def test_get_winner(self): board = [0] * 26 b = copy.deepcopy(board) b[3] = 1 self.assertEqual(utils.get_winner(b), 'b') b = copy.deepcopy(board) b[3] = -1 self.assertEqual(utils.get_winner(b), 'w') b = copy.deepcopy(board) b[4] = 1 b[3] = -1 self.assertIsNone(utils.get_winner(b))
def move(self, color, position, distance): with self._game_mutex: player = self._active_player board = self._board dice = self._dice if get_winner(board) is not None: self._active_player = None raise Game.LogicError('game has ended') if color != player: raise Game.LogicError('not players turn') if abs(distance) not in dice: raise Game.LogicError('move is invalid') new_board = make_move(board, position, distance, player) if new_board is None: raise Game.LogicError('move is invalid') self._board = new_board dice.remove(abs(distance)) if len(dice) == 0: self._next_player() elif not is_any_legal_move(self._board, self._dice, self._active_player): self._next_player() log.debug("{}: move {} {}".format(color, position, distance)) self.set_changed() self.notify_observers()
def _next_player(self): if get_winner(self._board) is None: with self._game_mutex: self._active_player = enemy(self._active_player) self._dice = list(self._roll_dice()) if not is_any_legal_move(self._board, self._dice, self._active_player): self._next_player()
def winner(self): return get_winner(self._board)