class SnakeScreen(GameScreen): GAME_OVER_FONT_SIZE = 28 GAME_OVER_FONT = pygame.font.Font("fonts/forcedsquare/forcedsquare.ttf", GAME_OVER_FONT_SIZE) def __init__(self, config, grid_size): super(SnakeScreen, self).__init__(config, SnakeGameModel(grid_size[0], grid_size[1])) screen_size = config.get_config_val("window_size") self.game_model = self.model self.game_model.initialize() self.block_width = int(math.floor(screen_size[0] / grid_size[0])) self.block_height = int(math.floor(screen_size[1] / grid_size[1])) self.automove_schedule = Scheduler(config.get_config_val("clock_rate"), 1, self.__automove_snake) def __automove_snake(self): current_direction = self.game_model.snake.get_orientation() self.game_model.move_snake(current_direction) def draw_screen(self, window): snake_squares = self.game_model.snake.enumerate_snake_squares() for snake_pos in snake_squares: color = Colors.DIM_GRAY if snake_pos == self.game_model.snake.head else Colors.EBONY snake_pos = QuadraticGrid.make_rect(snake_pos, self.block_width, self.block_height) pygame.draw.rect(window, color, snake_pos, 0) if self.game_model.food_point: fp_rect = QuadraticGrid.make_rect(self.game_model.food_point, self.block_width, self.block_height) pygame.draw.rect(window, Colors.NIGHT_GRAY, fp_rect, 0) if self.game_model.is_endgame(): # Render a "Game Over" sign game_over_render = SnakeScreen.GAME_OVER_FONT.render("GAME OVER", True, Colors.HUMAN_RED) window.blit(game_over_render, (50, 50)) self.automove_schedule.event() def draw_unchanging(self, window): super(SnakeScreen, self).draw_unchanging(window) original_dims = self.config.get_config_val("window_size") pygame.draw.line(window, Colors.MAX_BLACK, (0, 0), (0, original_dims[1]), 10) pygame.draw.line(window, Colors.MAX_BLACK, (0, 0), (original_dims[0], 0), 10) pygame.draw.line(window, Colors.MAX_BLACK, (original_dims[0], 0), original_dims, 10) pygame.draw.line(window, Colors.MAX_BLACK, (0, original_dims[1]), original_dims, 10)
class RandomDrawing(GameLoopEvents): """ Wanted to draw a rectangle but oh, what the hey...ended up with an arrow-like object! :)) """ def __init__(self, config, gamescreen): super(RandomDrawing, self).__init__(config, gamescreen) self.__game_screen = gamescreen self.s = Scheduler(config.get_config_val("clock_rate"), 1, self.__translate) def loop_event(self): super(RandomDrawing, self).loop_event() self.s.event() def __translate(self): self.game_screen.ps.translate(10, 10)
def __init__(self, config, grid_size): super(SnakeScreen, self).__init__(config, SnakeGameModel(grid_size[0], grid_size[1])) screen_size = config.get_config_val("window_size") self.game_model = self.model self.game_model.initialize() self.block_width = int(math.floor(screen_size[0] / grid_size[0])) self.block_height = int(math.floor(screen_size[1] / grid_size[1])) self.automove_schedule = Scheduler(config.get_config_val("clock_rate"), 1, self.__automove_snake)
class SchedulerTests(unittest.TestCase): MOCK_FRAME_RATE = 18 MOCK_EVENT_FREQUENCY = 3 def setUp(self): self.event = Event() self.scheduler = Scheduler( SchedulerTests.MOCK_FRAME_RATE, SchedulerTests.MOCK_EVENT_FREQUENCY, self.event.happen ) def test_event(self): for _ in range(SchedulerTests.MOCK_FRAME_RATE): self.scheduler.event() self.assertEquals(SchedulerTests.MOCK_EVENT_FREQUENCY, self.event.times_called) for _ in range(SchedulerTests.MOCK_FRAME_RATE): self.scheduler.event() self.assertEquals(SchedulerTests.MOCK_EVENT_FREQUENCY * 2, self.event.times_called)
def setUp(self): self.event = Event() self.scheduler = Scheduler( SchedulerTests.MOCK_FRAME_RATE, SchedulerTests.MOCK_EVENT_FREQUENCY, self.event.happen )
def __init__(self, config, gamescreen): super(RandomDrawing, self).__init__(config, gamescreen) self.__game_screen = gamescreen self.s = Scheduler(config.get_config_val("clock_rate"), 1, self.__translate)