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

10-四子棋AI

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

8.3.2 四子棋AI

我们为井字棋开发的 minimax()find_best_move() 函数,可以不加修改地直接供四子棋实现代码使用,这很神奇吧。代码清单8-19所示的代码段与井字棋AI代码只有一点点不同。最大的区别就是,现在 max_depth 设成了 3 。这能把计算机每一步的思考时间控制在合理范围内。换句话说,这里的四子棋AI最多只能看到后3步的(评分)棋局。

代码清单8-19 connectfour_ai.py

from minimax import find_best_move
from connectfour import C4Board
from board import Move, Board
board: Board = C4Board()
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 column (0-6):"))
        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, 3)
        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

请试着运行一下上述四子棋AI程序。与井字棋AI不同,它对于每一步的生成都需要耗费几秒的时间。除非你仔细思考每一步棋,否则它仍有可能会获胜。至少它不会犯任何明显的错误。通过增加搜索的深度,我们可以提升它的游戏水平,但计算机每走一步的计算时间将呈指数级增长。

提示  你知道四子棋游戏已经被计算机科学家“解决”了吗?游戏的“解决”意味着我们对任何棋局下的最佳走法都已弄清楚了。最佳的四子棋开局走法是把棋子放在中间列。