# This file is part of ROBOTGAME # # ROBOTGAME is free software: you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software # Foundation, either version 3 of the License, or (at your option) any later # version. # # ROBOTGAME is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with # ROBOTGAME. If not, see . # # ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' # # game.py # -------------------- # date created : Tue Aug 7 2012 # copyright : (C) 2012 Sakse Dalum # maintained by : Sakse Dalum """ The game. Handles everything. """ import os import pygame import jukebox import level import main_menu class Game(object): """Create an object to handle the game.""" def __init__(self, window, running=False, speed=30): self.__dict__.update(locals()) self.objs = [] self.clock = pygame.time.Clock() self.jukebox = jukebox.Jukebox( os.path.abspath(os.path.join("resources", "music")), ["basshit.ogg"]) # Add main menu object to list of objects. self.objs.append(main_menu.MainMenu(self, os.path.abspath(os.path.join( "resources", "graphics", "main_menu.png")))) self.level = None self.ticks = self.prev_ticks = pygame.time.get_ticks() def start(self): self.running = True self.run() def stop(self): self.running = False def run(self): t = pygame.time.get_ticks() dt = 0 while self.running: dt = t - pygame.time.get_ticks() t = pygame.time.get_ticks() self.update(t, dt) self.draw() self.clock.tick(self.speed) def goto_level(self, level): self.level = level def update(self, t, dt): """ Update all game objects. """ # Retrieve and flush all events since last update call (this prevents # event "bottlenecking"/lock-ups) e = pygame.event.get() for event in e: # Stop the game when closing the window if event.type == pygame.QUIT: self.stop() # Keep the music playing! if not pygame.mixer.music.get_busy(): self.jukebox.play() # Update all objects for obj in self.objs: if hasattr(obj, 'update'): obj.update(e, t, dt) def draw(self): """ Draw all game objects. """ self.window.fill((0, 0, 0)) for obj in self.objs: if hasattr(obj, 'draw'): obj.draw(self.window) pygame.display.flip()