Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
        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()
Ejemplo n.º 3
0
        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()
Ejemplo n.º 4
0
        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()
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
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()