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'))
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()