From 33f2220356ceb6ac845967080cd99ceec07a40e1 Mon Sep 17 00:00:00 2001 From: Eden Kirin Date: Thu, 30 Mar 2023 11:44:20 +0200 Subject: [PATCH] Game state --- hopper/engine.py | 9 +++++++-- hopper/enums.py | 8 +++++++- hopper/errors.py | 4 ++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/hopper/engine.py b/hopper/engine.py index 8f158c1..7046f2a 100644 --- a/hopper/engine.py +++ b/hopper/engine.py @@ -3,8 +3,8 @@ import logging import random from typing import Optional -from hopper.enums import Direction, PlayerMoveResult -from hopper.errors import Collision, PositionOutOfBounds +from hopper.enums import Direction, PlayerMoveResult, GameState +from hopper.errors import Collision, PositionOutOfBounds, GameLockForMovement from hopper.interfaces import SendGameDumpInterface from hopper.models.board import ( BOARD_DUMP_CHARS, @@ -30,6 +30,7 @@ class GameEngine: self.players = PlayerList() self._inacivity_watchdog = None self.__debug_print_board() + self.game_state = GameState.RUNNING def dump_board(self) -> list[list[str]]: dump = self.board.dump() @@ -113,8 +114,12 @@ class GameEngine: ) -> PlayerMoveResult: player.reset_timeout() + if self.game_state == GameState.LOCK_FOR_MOVEMENT: + raise GameLockForMovement("Player reached destination. Can't move now.") + # player will not be able to move once they reach the destination if player.reached_destination: + self.game_state = GameState.LOCK_FOR_MOVEMENT return PlayerMoveResult.DESTINATION_REACHED logging.info(f"Player {player} move to {direction}") diff --git a/hopper/enums.py b/hopper/enums.py index bd91853..5b37e9d 100644 --- a/hopper/enums.py +++ b/hopper/enums.py @@ -22,5 +22,11 @@ class PlayerMoveResult(Enum): class GameState(Enum): RUNNING = auto() - LOCKED_FOR_PRODUCT_SELECTION = auto() + LOCK_FOR_MOVEMENT = auto() ENDGAME = auto() + + +class PlayerState(Enum): + PLAYING = auto() + ON_DESTINATION = auto() + INACTIVE = auto() diff --git a/hopper/errors.py b/hopper/errors.py index 6c623d3..cf74c54 100644 --- a/hopper/errors.py +++ b/hopper/errors.py @@ -8,3 +8,7 @@ class PositionOutOfBounds(BaseError): class Collision(BaseError): ... + + +class GameLockForMovement(BaseError): + ...