rendered paste body#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()