Level.py
import pygame, random
from pygame.locals import *
from Constant import *
class Level(pygame.sprite.Sprite):
def __init__(self, id):
pygame.sprite.Sprite.__init__(self, self.containers)
self.id = id
if self.id == 1:
self.image = pygame.image.load(IMG_PATH + "Stage1.bmp")
self.image = self.image.convert()
self.speed = 0.5
self.finished = False
if self.id == 2:
self.image = pygame.image.load(IMG_PATH + "Stage2.bmp")
self.image = self.image.convert()
self.speed = 0.7
self.finished = False
self.rect = self.image.get_rect()
self.distance = 0
self.reset()
def reset(self):
self.rect.bottom = RESOLUTION[1]
def update(self):
self.rect.top += self.speed
if self.rect.top >= 0:
self.reset()
self.distance += 10
def draw(self,map):
self.map = map
self.map.blit(self.image,(0,0))
Main.py
import pygame, time, random
from pygame.locals import *
from Constant import *
from Ship import *
from Enemy import *
from Bullet import *
from PowerUp import *
from Ebullet import *
from Level import *
from Boss import *
from Bbullet import *
class Game:
def __init__(self):
pygame.display.set_caption(CAPTION)
self.screen = pygame.display.set_mode(RESOLUTION)
self.song = pygame.mixer.Sound(SFX_PATH +"Intro.ogg")
self.shotfx = pygame.mixer.Sound(SFX_PATH + "shot.ogg")
self.all = pygame.sprite.RenderUpdates()
self.levels = pygame.sprite.RenderUpdates()
self.enemies = pygame.sprite.RenderClear()
self.shots = pygame.sprite.RenderClear()
self.powerups = pygame.sprite.RenderClear()
self.ebullets = pygame.sprite.RenderClear()
self.boss = pygame.sprite.RenderUpdates()
self.bbullets = pygame.sprite.RenderClear()
Ship.containers = self.all
Enemy.containers = self.all, self.enemies
Bullet.containers = self.all, self.shots
PowerUp.containers = self.all, self.powerups
Ebullet.containers = self.all, self.ebullets
Level.containers = self.levels
Boss.containers = self.all
Bbullet.containers = self.all, self.bbullets
self.ship = Ship()
self.boss = Boss(1)
self.bg = pygame.Surface(RESOLUTION)
self.bg = self.bg.convert()
self.bg.fill((123,200,100))
self.lvlid = 1
self.levels.lvl = Level(self.lvlid)
self.intro = pygame.image.load(IMG_PATH + "ss.bmp")
self.intro = self.intro.convert()
self.clock = pygame.time.Clock()
self.font = pygame.font.Font("rnc.ttf", 20)
self.paused = False
self.enemycount = 0
self.score = 0
self.lives = 3
self.enemydied = 0
def pause(self):
while self.paused:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
self.paused ^= 1
if event.key == K_p:
self.paused ^= 1
def splash(self):
curtime = 0
while curtime < 5000:
curtime = pygame.time.get_ticks()
self.screen.blit(self.intro,(0,0))
pygame.display.flip()
self.menu()
def checklevel(self):
if self.lvlid == 2:
if self.levels.lvl.finished == True:
self.levels.lvl.distance = 0
self.levels.lvl = Level(self.lvlid)
self.levels.lvl.finished == False
def menu(self):
option = 1
self.song.play(-1)
while 1:
self.screen.blit(self.bg,(0,0))
self.clock.tick(45)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
return
if event.key == K_p:
self.paused ^= 1
if event.key == K_UP:
option = 1
if event.key == K_DOWN:
option = 2
if event.key == K_RETURN:
if option == 1:
for s in self.all.sprites():
pygame.sprite.Sprite.kill(s)
if not self.ship.alive():
self.ship = Ship()
self.lives = 3
self.score = 0
self.gameloop()
if option == 2:
pygame.quit()
return
self.screen.blit(self.bg,(0,0))
ren = self.font.render("Testing a Menu",1,(0,100,0))
self.screen.blit(ren,(100,200))
if option == 1:
ren = self.font.render("> New Game",1,(0,150,0))
self.screen.blit(ren,(100,250))
ren = self.font.render("Quit Game",1,(0,100,0))
self.screen.blit(ren,(100,300))
if option == 2:
ren = self.font.render("> Quit Game",1,(0,150,0))
self.screen.blit(ren,(100,300))
ren = self.font.render("New Game",1,(0,100,0))
self.screen.blit(ren,(100,250))
pygame.display.flip()
def gameloop(self):
#self.screen.blit(self.bg,(0,0))
self.levels.lvl.update()
self.paused = False
self.enemies.add(Enemy(200,random.randint(1,10)))
self.enemies.add(Enemy(400,random.randint(1,10)))
global Ebullet
global Bbullet
while 1:
self.clock.tick(45)
#self.screen.blit(self.bg,(0,0))
self.levels.update()
self.all.update()
self.pause()
self.checklevel()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
return
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
return
if event.key == K_p:
self.paused ^= 1
if event.key == K_z:
if self.lives > 0:
self.shots.add(Bullet(self.ship.rect.midtop,0))
if self.ship.powered == True:
self.shots.add(Bullet(self.ship.rect.midtop,1))
self.shots.add(Bullet(self.ship.rect.midtop,-1))
self.shotfx.play()
if self.levels.lvl.distance == 6000:
self.boss = Boss(self.levels.lvl.id)
elif self.levels.lvl.distance < 6000:
self.enemycount += 100
if self.enemycount > 1000:
self.enemies.add(Enemy(random.randint(1,799),random.randint(1,10)))
self.enemycount = 0
if pygame.sprite.groupcollide(self.shots,self.enemies,1,1):
self.score += 50
self.enemydied += 1
self.sp = random.randint(1,40)
if self.sp == 1:
self.powerups.add(PowerUp(random.randint(30,750)))
if pygame.sprite.spritecollide(self.ship,self.powerups,1):
self.ship.powered = True
if pygame.sprite.spritecollide(self.ship,self.ebullets,1):
self.ship.powered = False
self.lives -= 1
self.ship.rect.center = (400,500)
if self.lives <= 0:
self.ship.kill()
if pygame.sprite.spritecollide(self.ship, self.bbullets,1):
self.ship.powered = False
self.lives -= 1
self.ship.rect.center = (400,500)
if self.lives <= 0:
self.ship.kill()
if pygame.sprite.spritecollide(self.boss,self.shots,0):
self.boss.hp -= 1
#for shot in self.shots.sprites():
#pygame.sprite.Sprite.kill(shot)
if self.boss.hp <= 0:
self.levels.lvl.finished == True
self.lvlid += 1
self.boss.kill()
self.levels.update()
self.levels.draw(self.screen)
self.all.draw(self.screen)
pygame.display.flip()
def run():
pygame.init()
pygame.mixer.init()
game = Game()
game.splash()
if __name__ == "__main__":
run()