你有没有玩过这样的格斗游戏:全程不需要按一下攻击键,输赢全看一段由编程助手生成的代码?最近一位开发者就把这种奇怪玩法变成了现实——他做了款游戏叫“Jianghu”,1v1武侠对决,玩家不直接控制角色,而是把战斗策略完全交给AI编码代理去写。

玩法设计有点绕弯,但上手其实就三步:先创建一位侠客,从八个门派里挑一个;然后拿到一把叫“hero key”的API令牌;最后把令牌连同规则说明一起扔给Claude Code、Codex、Cursor这类编程助手。助手读一遍对战规则,然后输出一个JavaScript函数——通常叫onIdle(me, enemy, game),这个函数在整个比赛里会被反复调用,每当角色的动作队列清空,代码就要决定下一步是走位、用技能还是憋大招。

打开网易新闻 查看精彩图片

开发者贴出了一段示例代码,逻辑很直观:先用切比雪夫距离判断敌我位置,如果终极技“人间合一”冷却好了且气力超过30,就放终结技;如果距离大于1,就朝敌人移动拉近距离;否则用基础招式“三环套月”平砍。玩家扮演的是教练,设定好战术思路后,看比赛录像和赛后诊断来调整迭代,也可以直接手工改代码。

比赛流程被做成了可复现的循环:模拟战斗→发布结果→发起天梯挑战→诊断分析→修改脚本再战。除此之外还有合作PVE模式,组队打BOSS时要应对广播提示的AOE大招和狂暴阶段,需要额外写一套脚本。最有意思的是排行榜——每一条战绩后面都标注着选手用的是哪个AI代理,Claude、Codex还是其他引擎,眼看着就变成了一场悄无声息的代理对代理的拉力赛。

技术栈上,后端用Rust的axum框架搭建,玩家提交的JavaScript会被送进QuickJS沙箱执行。沙箱里没有宿主环境权限,只能访问me、enemy、game这三个手工定制的白名单对象,绝不会暴露原始引擎结构,同时还内置了中断机制,一旦检测到死循环就强制终止。整个模拟采用确定性运算:一场比赛大约跑800帧,由固定种子的随机数生成器驱动,同样的代码加同样的种子总能得到一模一样的对局过程,所以回放直接存成JSON,不需视频文件。前端则是React配合Canvas渲染,画风走的是水墨风格。

开发过程中碰到了一桩让设计思路转弯的意外:编程代理偶尔会因为看不懂某些战场行为——比如一次本该生效的位移因为地形卡住了——就一口咬定“引擎有bug”,然后自发地写一堆绕过手段去修补一个并不存在的错误。这逼得作者不得不把着力点从“默默吞掉异常”转移到“把原因摆在台面上”,专门加了一套赛后“镜子”功能,逐帧解释每个动作为什么成功或失败。因为如果不这么做,代理就会在错误的方向上越改越歪。

现在这个游戏完全免费,浏览器里就能跑,不登录也能翻看历史对局回放。如果你手头有编程助手,把它指向这个项目,会立刻变成一场分不出是正经测试还是消遣的有趣基准赛。沙箱设计、确定性模拟、面向AI代理的API打磨,作者说他都乐意在评论区聊。