Example #1
0
    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))
Example #2
0
    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()
Example #3
0
 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()
Example #4
0
 def winner(self):
     return get_winner(self._board)