def render(self): logger = self.logger if logger: logger.renderStart() Renderer.begin(self) for m in self.managers: m.render() Renderer.end(self) if logger: logger.renderEnd()
class Game: """ Space invaders main game class """ def __init__(self): self.running = True self.width = 640 self.height = 480 self.fps = 30 # initialize game self.init() def init(self): # initialize the module os.environ['SDL_VIDEO_CENTERED'] = '1' pygame.init() # create the window self.size = (self.width, self.height) self.w_init = HWSURFACE | DOUBLEBUF | RESIZABLE self.window = pygame.display.set_mode(self.size, self.w_init) pygame.display.set_caption("Space Invaders") # create renderer self.batch = Renderer(self) # create the sprites self.player = Player(self) self.data = LevelData(self) self.bullets = pygame.sprite.Group() self.monsters = pygame.sprite.Group() self.data.reset(self) def update(self, delta): """ Update game logic """ for event in pygame.event.get(): if event.type == pygame.QUIT: self.running = False if event.type == VIDEORESIZE: self.width = int(event.dict['size'][0]) self.height = int(event.dict['size'][1]) self.size = (self.width, self.height) self.window = pygame.display.set_mode(self.size, self.w_init) # only update when renderer is ready if self.batch.ready[0]: # update movement self.monsters.update(delta) self.player.update(delta) self.bullets.update(delta) # collision checking bullets, sprites = self.bullets.sprites(), self.monsters.sprites() for sprite in sprites: if self.player.rect.colliderect(sprite.rect): self.data.reset(self) break for i, bullet in enumerate(bullets): if bullet.rect.colliderect(sprite.rect): bullet.kill() sprite.kill() self.data.score += 1 # update level data self.data.update(self) def draw(self): """ Draw to sreen """ self.batch.begin() # only draw when renderer is ready if self.batch.ready[0]: # draw text self.data.draw(self.batch) # draw sprites for sprite in self.monsters.sprites(): sprite.draw(self.batch) for sprite in self.bullets.sprites(): sprite.draw(self.batch) self.player.draw(self.batch) self.batch.sync(self.fps) self.batch.end() def dispose(self): """ Dispose any memory """ self.bullets.empty() self.monsters.empty() del self.player del self.batch del self.data del self.window pygame.quit() sys.exit() def run(self): """ Basic game loop """ while self.running: self.update(self.batch.delta) self.draw() self.dispose()