← 返回游戏

BOT 大赛接入

用 BOT 账号在首页正常登录,即可进入 BOT 工作台:粘贴 JavaScript 程序,点击「保存并启动」,由网站服务器托管运行。退出登录不会停止托管。

房主进入普通对局,在左侧醒目的「添加 BOT 账号」面板选择方向和账号。没有空位时可先离座或踢人;排位房不支持 BOT。全部准备后由房主开局。

托管代码须定义同步 function act(state),只能访问传入的棋局 JSON;支持返回 memory 保存记忆,不支持 Node.js、文件或网络。完整约定在工作台下方。托管运行期间,外部 API 客户端不能同时提交动作。

需要可直接粘贴的程序时,下载 工作台 BOT 源码,打开文件后全选复制到工作台,再点击「保存并启动」。它不依赖 Node.js 模块,适用于工作台;外部命令行程序请下载下方的 mjs 文件。

可选:在自己电脑运行外部程序

  1. 在注册页选择 BOT 账号并等待审核,或由管理员创建 BOT 账号。
  2. 下载 独立 BOT 程序。它仅需 Node.js 18 或以上,无需安装 npm 包。
  3. 在 WSL / Linux 中运行下方命令;服务器地址换成你实际的网站地址。
  4. 房主在普通房间空座选择 BOT 账号并添加。程序自动发现座位、布阵、准备。
  5. 全部准备后房主开局。纯 BOT 对战时,房主先离座,再给所有位置添加 BOT,自己观战。
export BOT_SERVER='https://你的域名'
export BOT_USERNAME='你的BOT账号'
read -s -p 'BOT 密码: ' BOT_PASSWORD; export BOT_PASSWORD
node siguo-junqi-bot.mjs

同一 BOT 账号同时只能占一个位置。离线程序不会自动走棋。每步限时 5 秒,包含轮询和网络传输,超时判负;示例程序默认搜索约 3.8 秒以预留通信时间。布阵阶段不限时。

自己编写程序

任意支持 HTTP 和 JSON 的语言均可使用。先 POST /api/bot/login,提交 {"username":"账号","password":"密码"},取得 token。后续请求使用 Authorization: Bearer TOKEN。

接口用途
GET /api/bot/board棋盘、铁路、棋子种类和规则版本
GET /api/bot/session查询房主分配的房间、方向和 assignmentId
GET /api/bot/rooms/CODE读取棋局、revision、deadline 和合法着法 legalMoves
POST /api/bot/rooms/CODE/setup提交本方全部 25 枚棋子的 id 和 position
POST /api/bot/rooms/CODE/ready提交 ready: true 或 false
POST /api/bot/rooms/CODE/move提交 from 和 to
POST /api/bot/rooms/CODE/resign认输

所有对局 POST 都须附带当前 assignmentId、revision 和唯一 requestId。例如:

{
  "assignmentId": "从 session 取得",
  "revision": 12,
  "requestId": "每次新操作生成的UUID",
  "from": "north-1-0",
  "to": "north-1-1"
}

遇到网络错误,重试同一操作时保留原 requestId 和完整请求体。遇到 409 先重新读取棋局;401 重新登录;403 检查账号类型或重新查询座位。400 表示请求或走法不合法。

公平与对局规则

只能读取自己的房间和方向。敌方、盟友的暗子 type 均为 null,即使对局结束也不额外公开。records 包含已阵亡棋子,battles 仅含公开交战结果,logs 只额外包含本方向的私人战报。私人标记不发送给程序。服务器会再次校验每一步走法。

legalMoves 是当前回合的全部合法 {from,to},非你的回合为空。central 九点与特殊转弯直道以 board 接口的 straightRailLines 为准。房主可踢出 BOT、替换空座或关闭房间;旧 assignmentId 随即失效。BOT 对局不计入真人 Rating。

完整接口字段和程序开发说明见项目包中的 BOT_API.md。修改示例算法后可运行 npm run build:bot,重新生成可独立分发的单个文件。