当前位置:嗨网首页>书籍在线阅读

07-开发井字棋AI

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.2.4 开发井字棋AI

现在所有组件都已就绪,接下来就简单了,就可以开发一个完整的能够走完一局井字棋的人工棋手了。AI不再是对测试棋局进行评分,而是要对两个棋手下棋形成的棋局进行评分。在代码清单8-11所示的代码段中,井字棋AI将会与执先手的人类棋手进行对战。

代码清单8-11 tictactoe_ai.py

from minimax import find_best_move
from tictactoe import TTTBoard
from board import Move, Board
board: Board = TTTBoard()
def get_player_move() -> Move:
    player_move: Move = Move(-1)
    while player_move not in board.legal_moves:
        play: int = int(input("Enter a legal square (0-8):"))
        player_move = Move(play)
    return player_move
if __name__ == "__main__":
    # main game loop
    while True:
        human_move: Move = get_player_move()
        board = board.move(human_move)
        if board.is_win:
            print("Human wins!")
            break
        elif board.is_draw:
            print("Draw!")
            break
        computer_move: Move = find_best_move(board)
        print(f"Computer move is {computer_move}")
        board = board.move(computer_move)
        print(board)
        if board.is_win:
            print("Computer wins!")
            break
        elif board.is_draw:
            print("Draw!")
            break

因为 find_best_move() 中的 max_depth 默认为8,所以这个井字棋AI一定能分析完游戏终局。井字棋最多只能走9步,而此AI是后手。因此,它应该能完美下完每一局。完美的游戏是指两个棋手在每个回合中都能走出最佳的走法。完美的井字棋结果就是平局。有鉴于此,井字棋AI应该是不可战胜的。如果人类竭尽全力,最多也就是平局。如果人类走错一步,AI就会赢棋。请尝试一下吧。AI应该不会输棋。