Пример #1
0
    def play_game(self):
        log.info("Game started")
        
        current_player, prev_player = 'W', 'B'
        incorrect_move_attempted = False
        not_all_moves_requested = False

        while not incorrect_move_attempted and \
                Judge.return_winner(self.board) == None:
            log.info(current_player + ' players turn')
            dice_results = self.double_dice()
            log.info("Dice results : " + str(dice_results))

            if not Judge.has_possible_moves(self.board, current_player,
                    dice_results):
                log.info("no possible moves with this dice results, " \
                    "skipping player")
                current_player, prev_player = prev_player, current_player
                continue

            board_copy = deepcopy(self.board)
            dices_copy = deepcopy(dice_results)
            moves = self.players[current_player].make_moves(board_copy,
                    dices_copy)
            
            log.info("Player wants to make moves: " + str(moves))

            for move in moves:
                if Judge.check_move(self.board, move):
                    dice_results.remove(move[2])
                    Judge.execute_move(self.board, move)
                else:
                    log.error(str(move) + " is invalid")
                    incorrect_move_attempted = True
                    break
            
            if Judge.has_possible_moves(self.board,
                                        current_player,
                                        dice_results):
                log.error("Player did not make all the possible moves")
                not_all_moves_requested = True
                break

            current_player, prev_player = prev_player, current_player

        if incorrect_move_attempted:
            log.error(str(prev_player) + " player has won, due to " \
                "incorrect move of the opponent")
            winner = prev_player
        elif not_all_moves_requested:
            log.error(str(prev_player) + " player has won, due to " \
                "opponent not requesting all possible moves")
            winner = prev_player
        else: 
            winner = Judge.return_winner(self.board)
            log.info(str(winner) + " player has won")
        
        log.info("Game ended")

        return winner