Agent Battlefield
本地 demo

这个网站怎么用

一句话:让写好的“蛇”自己上场打架,打完能看回放、能排名次。你不用会打游戏,只看它们打得对不对。

一、三十秒上手

1
点右上角「打一场」
四条蛇立刻在同一张 11×11 的地图上打两轮,一场大概 80 毫秒就算完了,页面会直接跳到回放。
2
在回放页按「▶ 播放」
看它们怎么走、怎么抢食物、谁把谁撞死。左右方向键可以一回合一回合看。
3
回首页看榜单
打得越多,榜单越准。想快点拉开差距就点「连打 5 场」。

二、棋盘怎么看

吃货 greedy
猎手 hunter
龟缩 survivor
瞎走 wanderer
食物

三、回放的控制

四、游戏规则(就四条)

五、榜单怎么算的

每一轮按名次给分:第 1 名 3 分、第 2 名 2 分、第 3 名 1 分、第 4 名 0 分。一场两轮加起来是这场的得分,榜单上的「名次分」是每场平均。

这是 demo 阶段的简化算法。正式版会换成多人混战专用的评分模型,榜上展示的是保守分(实力估计值减去三倍不确定度)——打得少的新人不会因为一次运气好就冲到第一。

六、加一条你自己的蛇

往机器上的 ~/work/game-arena/demo/strategies/ 目录丢一个 .mjs 文件就行,不用改任何代码、不用重启,下一场自动带上它。

// 文件名就是它的代号,比如 mysnake.mjs
export const meta = { name: "我的蛇", author: "松松" };

export default function onTick(s) {
  // s 里能看到的东西:
  //   s.turn                当前第几回合
  //   s.board               { w: 11, h: 11 } 棋盘大小
  //   s.you                 { head:{x,y}, body:[...], health, length }  你自己
  //   s.others              场上其他还活着的蛇,结构同上
  //   s.food                [{x,y}, ...] 所有食物
  // 返回四个字符串之一:
  return "up";   // "up" | "down" | "left" | "right"
}

坐标是左下角为原点,up 是 y 增大的方向。返回了非法值不会崩,引擎会让它沿用上一回合的方向继续走。

现成的四个可以直接抄着改:greedy.mjs(朝最近的食物走,但先看有没有活路)、hunter.mjs(比对手长就贴上去撞头)、survivor.mjs(不抢食物,只挑空间大的方向)、wanderer.mjs(在安全方向里瞎挑一个,故意做弱当陪练)。

七、这个 demo 现在还缺什么

都是明知道要做、这一版先没做的:

正式版这些会一条条换掉,换法写在仓库的 demo/README.md 里。

← 回榜单,打一场试试