class Game: """A game of Blocky. """ # === Private Attributes === # _renderer: # The object that is capable of drawing our Blocky board on the screen. # _data: # The data of the game that can be shared with other GameState objects. # _state: # The current GameState. _renderer: Renderer _data: GameData _state: GameState def __init__(self, max_depth: int, num_human: int, num_random: int, smart_players: List[int]) -> None: """Initialize this game, as described in the Assignment 2 handout. Precondition: 2 <= max_depth <= 5 """ board = generate_board(max_depth, BOARD_SIZE) players = create_players(num_human, num_random, smart_players) self._renderer = Renderer(BOARD_SIZE) self._data = GameData(board, players) self._state = MainState(self._data) def run_game(self, num_turns: int) -> None: """Start the main game loop and stop after num_turns. """ self._data.max_turns = num_turns clock = pygame.time.Clock() while True: clock.tick(30) # Process events for e in pygame.event.get(): if e.type == pygame.QUIT: return else: self._state.process_event(e) # Update the state of the game self._state = self._state.update() # Render the new state of the game self._renderer.clear() self._state.render(self._renderer) # Update the screen pygame.display.flip()
def __init__(self, max_depth: int, num_human: int, num_random: int, smart_players: List[int]) -> None: """Initialize this game, as described in the Assignment 2 handout. Precondition: 2 <= max_depth <= 5 """ board = generate_board(max_depth, BOARD_SIZE) players = create_players(num_human, num_random, smart_players) self._renderer = Renderer(BOARD_SIZE) self._data = GameData(board, players) self._state = MainState(self._data)