示例#1
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()
示例#2
0
    def test_make_invalid_move_black(self):
        player = 'b'
        start = 1

        board_start = config.INIT_BOARD.copy()

        self.assertEqual(utils.make_move(board_start, start, 1, player), None)
示例#3
0
    def test_move_into_enemy_door(self):
        board = [0] * 26

        p = copy.deepcopy(board)
        p[10] = 1
        p[14] = -2

        self.assertEqual(utils.make_move(p, 10, 4, 'w'), None)
示例#4
0
    def test_enter_door(self):
        board = [0] * 26

        p = copy.deepcopy(board)
        p[10] = 1
        p[14] = 2

        q = copy.deepcopy(board)
        q[14] = 3

        self.assertEqual(utils.make_move(p, 10, 4, 'w'), q)
示例#5
0
    def test_kill_enemy(self):
        board = [0] * 26

        p = copy.deepcopy(board)
        p[10] = 1
        p[14] = -1

        q = copy.deepcopy(board)
        q[14] = 1
        q[25] = -1

        self.assertEqual(utils.make_move(p, 10, 4, 'w'), q)
示例#6
0
    def test_make_move_white(self):
        player = 'w'
        start = 1
        modifier = utils.player_modifier(player)

        board_start = config.INIT_BOARD.copy()

        board_end = config.INIT_BOARD.copy()
        board_end[start] -= modifier
        board_end[start + modifier] += modifier

        self.assertEqual(utils.make_move(board_start, start, 1, player),
                board_end)