#Meteor Shower #Created By Corey Ling a.k.a. Kasuko #Written in Python WIth Pygame #import required libraries import random, os import pygame #place pygame module in global namespace from pygame import * #load our other files from module import * from sprites import * height , width = 500, 400 level = 1 def printtoptext(): toptext = topfont.render('Score: 0', False, (200, 200, 200)) toptextpos = toptext.get_rect() toptextpos.top = 0 toptextpos.centerx = 200 screen.blit(toptext, toptextpos) def main(): #Initialize The random generator and The Screen random.seed() pygame.init() screen = pygame.display.set_mode((width,height)) pygame.display.set_caption('Meteor Shower by Corey Ling') #pygame.mouse.set_visible(False) //Possible Use Later #Load the Background Image background_image, background_rect = load_image('background.png') screen.blit(background_image, (0,0)) #Create All Sprites and Groups playermissle_sprite = pygame.sprite.RenderClear() #Missle Group explosion_sprites = pygame.sprite.RenderClear() #Explosion Group meteor_sprites = pygame.sprite.RenderClear() #Meteor Group playerpost_sprite = pygame.sprite.RenderClear() #Command Post Group playerpost_sprite.add(Post((200,400))) #Command Post Sprite playerbase_sprites = pygame.sprite.RenderClear() #Base Group restart = 1 topfont = pygame.font.Font(None, 24) titlefont = pygame.font.Font(None, 48) explosion = load_sound('Explode.wav') #Exploding Sound Effect firing = load_sound('Fire.wav') #Firing Sound Effect while restart: running = 0 print pygame.key.get_pressed if pygame.key.get_pressed(): playerbase_sprites.add(Base((50,430))) #Base 1 Sprite playerbase_sprites.add(Base((150,430))) #Base 2 Sprite playerbase_sprites.add(Base((250,430))) #Base 3 Sprite playerbase_sprites.add(Base((350,430))) #Base 4 Sprite #Top Text Creation toptext = topfont.render('Score: 0', False, (200, 200, 200)) toptextpos = toptext.get_rect() toptextpos.top = 0 toptextpos.centerx = 200 screen.blit(toptext, toptextpos) #Declare Variables running = 1 #Used to exit main game loop counter = 0 #Used to count stuff isfired = 0 #Used to detect if missle has been shot or not score = 0 #Main Game Loop while running: #Timing To Slow Game Down pygame.time.delay(10) #Event Controller for event in pygame.event.get(): if event.type == QUIT: #on quit exit running = 0 restart = 0 elif event.type == KEYDOWN: if event.key == K_ESCAPE: #exit when press escape running = 0 restart = 0 elif event.type == MOUSEBUTTONDOWN: #Mouse Button Down Control if isfired == 0 and event.pos[1] < 420: #If there is no Missle and you clicked above the Post fire_to = event.pos #Set the Destination to the mouse position playermissle_sprite.add(Missle(fire_to)) #Create The Missle Sprite firing.play() #Play Sound Effect isfired = 1 #Set isfired to 1 elif isfired == 1: #but if the missle is already fired isfired = 0 #We're about to blow it up so you can fire another MissleSprite = playermissle_sprite.sprites() #Get the missle (used in obtaining position) explosion_sprites.add(Explosion(MissleSprite[0].rect.center)) #Create the explosion playermissle_sprite.empty() #Remove the Missle playermissle_sprite.clear(screen, background_image) #Erase the missle explosion.play() #Play Explosion Sound Effect #Meteor AI if len(meteor_sprites) < 3: meteor_sprites.add(Meteor((random.randint(0,400),500),1,(random.randint(0,400),0))) #Clear All Sprites playermissle_sprite.clear(screen, background_image) explosion_sprites.clear(screen,background_image) meteor_sprites.clear(screen, background_image) playerbase_sprites.clear(screen, background_image) #Collison Detection MeteorCollision = sprite.groupcollide(explosion_sprites, meteor_sprites, False, True) BaseCollision = sprite.groupcollide(meteor_sprites, playerbase_sprites, True, True) #Game Logic if len(MeteorCollision) != 0: #Only change the score when needed for speed #Handle Score score += 50 * len(MeteorCollision) mystr = "Score: %d" % (score,) toptext = topfont.render(mystr, False, (200, 200, 200)) toptextpos = toptext.get_rect() toptextpos.centerx = 200 screen.blit(background_image,toptextpos,toptextpos) screen.blit(toptext, toptextpos) #Handle Game Over if len(playerbase_sprites) == 0: titletext = titlefont.render('GAME OVER', False, (255, 0, 0)) titletextpos = titletext.get_rect() titletextpos.centery = height/2 titletextpos.centerx = width/2 running = 0 #Update Sprites playermissle_sprite.update() explosion_sprites.update(explosion_sprites) meteor_sprites.update() #Draw All Sprites TODO: Increase Efficency By Drawing Only Whats Needed playermissle_sprite.draw(screen) explosion_sprites.draw(screen) playerpost_sprite.draw(screen) playerbase_sprites.draw(screen) meteor_sprites.draw(screen) #Display Drawed Sprites to Screen pygame.display.flip() #When not running exit return if __name__ == '__main__': main()