用easyAI+Flask构建网页版井字棋AI对战平台:完整教程
【免费下载链接】easyAIPython artificial intelligence framework for games项目地址: https://gitcode.com/gh_mirrors/ea/easyAI
想做一个能在浏览器里和AI下井字棋的小项目?本文用 Python 人工智能框架easyAI配合Flask,带你零基础搭建一个网页版井字棋 AI 对战平台。easyAI 内置了强大的 Negamax 搜索算法,你只需几十行代码定义游戏规则,就能获得一个足以"完胜"普通玩家的 AI 对手,整个过程不超过 10 分钟。
为什么用 easyAI 构建井字棋 AI 对战平台?🎯
easyAI 是一个纯 Python 实现的游戏人工智能框架,专为井字棋、四子棋、黑白棋这类双人回合制游戏设计。它最大的价值在于:你只需要描述游戏规则,AI 自己会"想"怎么赢,完全不需要你编写任何搜索树或局面评估代码。
核心亮点:
- ⚡内置 Negamax 算法:带 alpha-beta 剪枝和置换表优化,棋力强悍
- 🧩极简 API:继承
TwoPlayerGame基类,实现 4 个方法即可成游戏 - 🌐与 Flask 天然搭配:官方示例直接提供了网页对战版本
- 📦纯 Python 实现:无需复杂依赖,安装即可上手
对应的核心代码都集中在 easyAI/ 目录,其中游戏基类定义在 TwoPlayerGame.py,AI 算法核心在 Negamax.py。
准备工作:快速安装 easyAI 框架
在终端执行一条命令即可完成easyAI 框架安装:
pip install easyAI另外还需要 Flask 用于搭建网页服务:
pip install flask安装完成后,在 Python 中验证是否成功:
from easyAI import TwoPlayerGame, Human_Player, AI_Player, Negamax print("easyAI 就绪!")💡 提示:easyAI 的所有导出模块都定义在init.py 中,你也可以按需导入
TranspositionTable、SSS等进阶算法。
三步搭建网页版井字棋对战平台
项目的 easyAI/games/ 目录下已经准备好了完整示例 TicTacToe-Flask.py,它是命令行版 TicTacToe.py 的网页升级版。下面拆解它的三个关键步骤。
第一步:定义井字棋游戏规则
创建一个继承自TwoPlayerGame的游戏类,实现 4 个核心方法即可:
from easyAI import TwoPlayerGame, Human_Player, AI_Player, Negamax class TicTacToe(TwoPlayerGame): def __init__(self, players): self.players = players self.board = [0 for i in range(9)] # 9 宫格棋盘 self.current_player = 1 # 玩家 1 先手 def possible_moves(self): # 哪些格子可以落子 return [i + 1 for i, e in enumerate(self.board) if e == 0] def make_move(self, move): # 落子 self.board[int(move) - 1] = self.current_player def is_over(self): # 游戏是否结束 return (self.possible_moves() == []) or self.lose()这 4 个方法就是 easyAI 理解游戏的全部前提,AI 会基于它们自动推演后续所有局面。如果你想加快 AI 思考速度,还可以像示例中那样额外实现unmake_move方法,避免每次搜索都复制整个棋盘。
第二步:接入 Negamax AI 算法
AI 对手只需一行代码即可创建:
ai_algo = Negamax(6) # AI 会提前思考 6 步棋 ttt = TicTacToe([Human_Player(), AI_Player(ai_algo)])这里的Negamax(6)表示AI 会向前推演 6 层局面。数值越大棋力越强,井字棋用 6 已经足够让 AI 做到"不输",参数调优方法见下文。
第三步:用 Flask 渲染网页对战界面
网页版的关键在于:用 Flask 路由接收玩家的点击,让 AI 自动回应,并把棋盘状态保存到 Cookie 中:
app = Flask(__name__) @app.route("/", methods=["GET", "POST"]) def play_game(): ttt = TicTacToe([Human_Player(), AI_Player(ai_algo)]) # 1. 从 Cookie 恢复棋盘 # 2. 玩家落子后调用 ttt.play_move() # 3. AI 通过 ttt.get_move() 自动回击 # 4. 把新棋盘写入 Cookie 并渲染 HTML完整的 HTML 模板(一个 3×3 按钮表格)直接内嵌在 TicTacToe-Flask.py 的TEXT变量中,配合 Jinja2 模板语法动态渲染O和X,不需要单独的前端文件。
运行你的井字棋 AI 对战平台
在终端启动服务:
python easyAI/games/TicTacToe-Flask.py浏览器访问http://127.0.0.1:5000,你会看到:
- 🎮 一个可点击的 3×3 棋盘,你执
O先手 - 🤖 你每走一步,AI 立即自动回应一个
X - 🔄 "Start Over" 按钮随时重新开局
- 🏆 游戏结束会显示 "AI Wins" 或 "Tie"
🍪 小知识:这个示例用Cookie 保存棋盘状态,即使刷新页面也能继续对局,非常适合初学者理解无状态 HTTP 下的游戏会话管理。
如何调高 AI 难度?完整参数指南
想让你的井字棋 AI 对战平台更有挑战性?调整Negamax的参数即可:
| 参数 | 作用 | 建议值 |
|---|---|---|
depth | AI 向前推演层数 | 井字棋 6~9,四子棋 8~12 |
scoring | 自定义局面评分函数 | 赢 +100,输 -100 |
win_score | 认定必胜/必败的阈值 | 默认为无穷大 |
tt | 置换表,缓存已算过的局面 | 传入TranspositionTable() |
scoring方法定义在游戏类中(见 TicTacToe.py 第 58 行),它是 AI 判断局面的"价值观",你可以自由定制。
更多玩法扩展思路 🚀
掌握了网页版井字棋,你还可以:
- 换游戏:easyAI 内置了四子棋 ConnectFour.py、黑白棋 Reversi.py、尼姆游戏 Nim.py 等多个游戏,替换游戏类即可复用整套网页框架
- 加 AI 难度选择:用不同
depth创建多个AI_Player,让玩家自行选择对手强度 - 无 UI 对战:命令行版 TicTacToe.py 直接运行即可在终端与 AI 对弈
- 求解游戏:使用
solve_with_iterative_deepening可以算出"先手必胜"等结论,见 solving.py
总结
通过本文,你用easyAI + Flask在几分钟内就构建了一个完整的网页版井字棋 AI 对战平台。easyAI 把复杂的博弈搜索算法封装成了直观的 API,让你把精力集中在游戏设计和 Web 交互上——这正是它作为Python 游戏 AI 框架的最大魅力。现在就去运行示例,和你的 AI 对手来一局吧!🎉
【免费下载链接】easyAIPython artificial intelligence framework for games项目地址: https://gitcode.com/gh_mirrors/ea/easyAI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考