def main(): config = GameConfig() config.set_config_val("clock_rate", 12) config.set_config_val("window_size", [500, 500 + ColorBlocksScreen.GRID_OFFSET[0]]) config.set_config_val("window_title", "Color Blocks Game") screen = ColorBlocksScreen(config, [10, 10]) loop_events = ColorBlocksEvents(screen) return loop_events
pastel_flowers = Image(os.path.join("sample_sprites", "tiles", "png", "pastel_flowers.png")) grass = Image(os.path.join("sample_sprites", "tiles", "png", "grass.png")) images = (pastel_flowers, grass) # XXX Just a demo, do not try this at home: this (rightly!) assumes that # pastel_flowers and grass have the same dimensions visible_width = int(self.screen_dimensions[GameConfig.WIDTH_INDEX] / pastel_flowers.width) visible_height = int(self.screen_dimensions[GameConfig.HEIGHT_INDEX] / pastel_flowers.height) area_tile_size = (visible_width + 2) * (visible_height + 2) self.tiles = Group() for i in range(area_tile_size): img = random.choice(images) img_xpos = img.width * (i % visible_width) img_ypos = img.height * (i % visible_height) self.tiles.add(PyRoSprite(img.clone((img_xpos, img_ypos)))) def draw_screen(self, window): self.tiles.draw(window) self.tiles.update() if __name__ == "__main__": config = GameConfig() config.set_config_val("window_size", (400, 400)) model = GameModel() screen = ExplorableScreen(config, model) loop_events = GameLoopEvents(config, screen) loop = GameLoop(loop_events) loop.go()
keydown_event = pygame.event.Event(pygame.KEYDOWN) up_event_handler = GameLoopEvents.KeyboardHandlerMapping(pygame.K_UP, self.move_shooter) down_event_handler = GameLoopEvents.KeyboardHandlerMapping(pygame.K_DOWN, self.move_shooter) shoot_event_handler = GameLoopEvents.KeyboardHandlerMapping(pygame.K_RETURN, self.game_screen.shoot) self.add_event_handler(keydown_event, up_event_handler) self.add_event_handler(keydown_event, down_event_handler) self.add_event_handler(keydown_event, shoot_event_handler) class PVZLoop(GameLoop): def __init__(self, events): """ @param events Must be an instance of PVZEvents. """ super(PVZLoop, self).__init__(events) config = GameConfig() config.set_config_val("window_size", [500, 500]) config.set_config_val("clock_rate", 60) config.set_config_val("window_title", "PvZ Clone Demo") screen = PVZMainScreen(config) image_gle = PVZEvents(config, screen) gl = PVZLoop(image_gle) gl.go()
self.add_event_handler(keydown_event, GameLoopEvents.KeyboardHandlerMapping( keycode=pygame.K_UP, handler=self.__create_move_event_handler(pygame.K_UP) )) self.add_event_handler(keydown_event, GameLoopEvents.KeyboardHandlerMapping( keycode=pygame.K_DOWN, handler=self.__create_move_event_handler(pygame.K_DOWN) )) self.add_event_handler(keydown_event, GameLoopEvents.KeyboardHandlerMapping( keycode=pygame.K_LEFT, handler=self.__create_move_event_handler(pygame.K_LEFT) )) self.add_event_handler(keydown_event, GameLoopEvents.KeyboardHandlerMapping( keycode=pygame.K_RIGHT, handler=self.__create_move_event_handler(pygame.K_RIGHT) )) if __name__ == "__main__": config = GameConfig() config.set_config_val("clock_rate", 60) config.set_config_val("window_size", (600, 600)) config.set_config_val("window_title", "SNAKE!") config.set_config_val("debug_mode", True) config.set_config_val("log_to_terminal", True) config.set_config_val("difficulty", 1) screen = SnakeScreen(config, (10, 10)) loop_events = SnakeGameEvents(config, screen) loop = GameLoop(loop_events) loop.go()
def test_dry_run(self, pygame_init, clock_tick, flip, quit): config = GameConfig() config.set_config_val("clock_rate", 60) config.set_config_val("window_size", (600, 600)) config.set_config_val("window_title", "SNAKE!") config.set_config_val("debug_mode", True) config.set_config_val("log_to_terminal", True) config.set_config_val("difficulty", 1) screen = SnakeScreen(config, (10, 10)) loop_events = SnakeGameEvents(screen) loop = GameLoop(loop_events, is_test=True) loop.go() self.assertTrue(pygame_init.called) self.assertTrue(clock_tick.called) self.assertTrue(flip.called) self.assertTrue(quit.called)
class GameConfigTest(unittest.TestCase): def setUp(self): self.game_config = GameConfig() self.watcher = ConfigSubscriberMock() self.game_config.subscribe(self.watcher) self.titled_config = GameConfig(window_title="Your Majesty") def test_window_size_setter(self): self.assertFalse(self.watcher.notified) self.game_config.set_config_val("window_size", (100, 100)) self.assertTrue(self.watcher.notified) def test_clock_rate_setter(self): self.assertFalse(self.watcher.notified) self.game_config.set_config_val("clock_rate", 100) self.assertTrue(self.watcher.notified) def test_custom_key_setter(self): self.assertFalse(self.watcher.notified) self.game_config.set_config_val("quick brown foxkcd", 1) self.assertTrue(self.watcher.notified) def test_load_from_file_expected(self): expected_json_newbies = """{ "song": "Lost Stars", "artist": "Adam Levine", "player": "Spotify" }""" preload_title = self.titled_config.get_config_val("window_title") self.assertTrue(preload_title is not None) self.titled_config.load_from_file(StringIO(expected_json_newbies)) postload_title = self.titled_config.get_config_val("window_title") self.assertEqual(preload_title, postload_title) json_confs = json.loads(expected_json_newbies) for key in json_confs.keys(): self.assertEqual(self.titled_config.get_config_val(key), json_confs[key]) def test_load_from_file_unwanted(self): unwanted_json = """[ {"song": "Lost Stars"}, {"artist": "Adam Levine"}, {"player": "Spotify"} ]""" preload_title = self.titled_config.get_config_val("window_title") self.assertTrue(preload_title is not None) with self.assertRaises(AttributeError): self.titled_config.load_from_file(StringIO(unwanted_json)) postload_title = self.titled_config.get_config_val("window_title") self.assertEquals(preload_title, postload_title) def test_load_from_file_replacing(self): replacing_json = '{"window_title": "Your Royal Highness"}' preload_title = self.titled_config.get_config_val("window_title") self.assertTrue(preload_title is not None) self.titled_config.load_from_file(StringIO(replacing_json)) postload_title = self.titled_config.get_config_val("window_title") self.assertEqual(postload_title, "Your Royal Highness") self.assertNotEqual(preload_title, postload_title)
self.game_screen.ps.translate(10, 10) class RandomDrawingScreen(GameScreen): def __init__(self, config): super(RandomDrawingScreen, self).__init__(config, GameModel()) self.__ps = PointShape() self.__ps.add_point(Point(3, 5)) self.__ps.add_point(Point(15, 25)) self.__ps.add_point(Point(10, 40)) self.__ps.add_point(Point(30, 28)) @property def ps(self): return self.__ps def draw_screen(self, window): window.fill(Colors.MAX_WHITE) self.ps.draw(window) if __name__ == "__main__": config = GameConfig() config.set_config_val("window_size", (600, 600)) config.set_config_val("clock_rate", 12) gamescreen = RandomDrawingScreen(config) loopevents = RandomDrawing(config, gamescreen) gl = GameLoop(loopevents) gl.go()