Skip to content

快速开始

本项目不能直接用 file:// 打开 index.html。浏览器会限制 Web Worker、ES module、Wasm 和 Service Worker 的加载,所以项目提供了 server.py 启动本地 HTTP 服务。

本地运行

在项目根目录执行:

python3 server.py

服务会从 81008999 中选择一个空闲端口,然后打印访问地址,例如:

http://127.0.0.1:8342/

打开这个地址后,正常结果是页面显示黑白棋棋盘和开始菜单。首次访问时页面可能刷新一次,这是 coi-serviceworker.js 接管页面时的正常行为。

如果想确认自己打开的是正确入口,可以看浏览器地址栏。地址应该以 http://127.0.0.1: 开头,而不是以 file:// 开头。file:// 能打开 HTML 文件,但不能给 Worker 和 Wasm 提供完整的浏览器站点环境。

第一次打开时看什么

页面加载成功后,先不要急着判断 AI 强弱。先确认运行链路是否通:

  1. 页面中间应该出现棋盘和“开始”按钮。
  2. 点击“开始”后,模式选择应该能打开。
  3. 选择“本机双人”后,点击合法位置应该能落子并翻子。
  4. 回到菜单选择“人机对战”或“机机对战”,AI 第一次行动前会初始化 Worker 和 Wasm。
  5. AI 行动后,右侧表格应该出现深度、节点、NPS、耗时和分数。

如果前 3 步正常,第 4 步以后失败,问题通常不在棋盘 UI,而在 Worker 或 Wasm 加载。

选择模式

开始后可以选择三种模式:

  • 本机双人:两个玩家在同一浏览器内轮流落子。
  • 人机对战:玩家和 AI 对局,可以选择玩家先走或电脑先走。
  • 机机对战:黑白双方都由 AI 控制,适合观察搜索效果。

人机和机机模式会加载 assets/wasm/othello_ai.js。如果 Wasm 文件缺失,AI 不会返回落子,浏览器控制台通常会出现模块加载错误。

判断运行是否正常

运行正常时应该看到这些现象:

  • 棋盘可以响应合法落子。
  • AI 思考时,合法落子位置会以黄色提示。
  • AI 落子后,右侧搜索评分表增加一行记录。
  • 表格中的深度、节点数、耗时和 NPS 不为空。

如果页面能打开但 AI 不动,先检查是否通过 HTTP 地址访问,再检查 assets/wasm/othello_ai.jsassets/wasm/othello_ai_bg.wasm 是否存在。

常见失败现象

如果页面空白,先打开浏览器控制台。常见原因是静态文件路径错误,或者脚本没有加载成功。正常页面至少会加载 assets/js/main.jsassets/js/ai-manager.js 和样式文件。

如果本机双人模式正常,但 AI 不落子,重点看控制台里是否有 othello_ai.js.wasm 的 404。othello_ai.js 是 JS 绑定文件,.wasm 是真正的 Rust 编译产物。两个文件缺一不可。

如果 AI 会落子,但统计表里的 nodes 很低或 depth 长期为 0,说明搜索没有正常展开。常见原因是传给 Rust 的合法步为空,或者 Worker 收到的棋盘状态和页面状态不一致。

如果首次打开后页面刷新一次,不需要处理。这是 Service Worker 注册后的正常行为。刷新后再进入模式选择即可。