from gameconstants import Cells from enum import IntEnum class Turn(IntEnum): FIRST = 1 SECOND = 2 NOT_YET = 99 class Direction(IntEnum) : USER_INPUT_TURN_ORDER = 0 USER_INPUT_BOARD_POSITION = 2 FIRST_TURN = 10 SECOND_TURN = 20 GAMEOVER = 99 class GameJudge : def __init__(self, board): self._target_board = board self._user_turn_order = Turn.NOT_YET self._current_turn = Turn.NOT_YET def _change_turn(self) : self._current_turn = Turn.SECOND if self._current_turn == Turn.FIRST else Turn.FIRST def set_user_turn_order(self, turn) : if self._user_turn_order == Turn.NOT_YET : self._user_turn_order = turn self._current_turn = Turn.FIRST return def set_user_input_position(self, posX, posY) : if self._target_board.put_chip(self._user_turn_order, posX, posY) == 0 : self._current_turn = self._user_turn_order else : self._change_turn() return def set_user_input_pass(self) : poslist = self._target_board.collect_valid_positions(self._user_turn_order) if len(poslist) == 0 : self._change_turn() return def set_input_position(self, posX, posY) : if self._target_board.put_chip(self._current_turn, posX, posY) > 0 : self._change_turn() return def set_input_pass(self) : poslist = self._target_board.collect_valid_positions(self._current_turn) if len(poslist) == 0 : self._change_turn() return def get_instruction(self) : valid_first_poslist = self._target_board.collect_valid_positions(Cells.FIRST_CHIP) valid_second_poslist = self._target_board.collect_valid_positions(Cells.SECOND_CHIP) if self._current_turn == Turn.NOT_YET : return Direction.USER_INPUT_TURN_ORDER elif ( len(valid_first_poslist) == 0 ) and ( len(valid_second_poslist) == 0 ) : return Direction.GAMEOVER elif self._current_turn == self._user_turn_order : return Direction.USER_INPUT_BOARD_POSITION else : direction = Direction.FIRST_TURN if self._current_turn == Turn.FIRST else Direction.SECOND_TURN return direction