Example #1
0
    def test_is_any_legal_move(self):
        board = [0] * 26

        b = copy.deepcopy(board)
        b[0] = 1
        b[1] = -2
        b[2] = -2
        b[3] = -2
        b[4] = -2
        b[5] = -2
        b[6] = -2
        b[12] = 3

        self.assertFalse(utils.is_any_legal_move(b, (3, 5), 'w'))

        b = copy.deepcopy(board)
        b[0] = 1
        b[1] = -2
        b[2] = -2
        b[3] = -1
        b[4] = -2
        b[5] = -2
        b[6] = -2
        b[12] = 3

        self.assertTrue(utils.is_any_legal_move(b, (3, 5), 'w'))
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()