Roka:一个可以自己写 Bot 对战的实时领土战争游戏

· · 科技·工程

游戏地址:https://roka.oim.moe:444/

开源仓库:https://github.com/oimasterkafuu/roka (AGPL-3.0)

本文在人类引导和审核的前提下,较大部分内容通过 AI 生成或编辑。

这是什么

Roka 是一个实时方格领土战争游戏,玩法上致敬 generals.io:你和若干名玩家(或 Bot)各自从一座主城起家,每 0.5 秒一个 Tick,主城持续产兵,你用 WASD 把兵力推向四面八方,占地、筑城、切断对手,最后活下来的队伍获胜。

但 Roka 不是 generals.io 的复刻。在熟悉的规则骨架之下,它有一套相当独特、也更有博弈深度的核心机制,外加一个对开发者极其友好的 Bot 生态——这也是我写这篇文章、向各位 OIer 安利它的原因。

核心机制:连通块就是生命线

Roka 最有意思的设计是 「连通与孤军」机制:

这一条规则彻底改变了游戏的战略结构。在 generals.io 里,最优策略往往收敛于「攒兵堆一波流」;而在 Roka 里,切断比歼灭更致命——一支深入敌后的小分队,只要精确地切在对方领土的咽喉割点上,就能让对手大后方成片领土瞬间减半、瘫痪、腐烂,其破坏力远超同等兵力的正面硬推。防御方则必须时刻维护自己领土的连通性:什么时候补第二座主城做冗余锚点,哪个走廊是死都不能丢的咽喉,都是每 0.5 秒就要重新回答的问题。

围绕连通机制,Roka 还有一整套配套的规则设计:

重点:这里是一个算法竞技场

如果只是一个对战游戏,我不会投稿到洛谷。Roka 真正让我想安利给大家的,是它的 Bot 开发生态——它本质上是一个披着游戏外衣的实时策略算法竞赛平台。

第一,协议完全开放,文档极其详尽。 https://roka.oim.moe:444/develop/bot(需要登录)是 Bot 协议的权威文档:握手鉴权、房间事件、回合事件、格子编码表(山脉 201、中立 200、主城 owner+100……)、可发送操作集、增量帧合并方法、常见坑,全部成文。你只需要一个 socket.io-client,几十行代码就能让自己的程序连进服务器、进房、准备、走子。

第二,官方提供了三个难度递进的 Bot 模板,本身就是很好的教学材料:

第三,服务端可以托管你的 Bot。 不需要自己挂机——管理员在后台就能把策略模板作为托管 Bot 跑在服务器进程里,自动进房、自动准备、打完自动再来一局,服务器重启后自动恢复。也就是说,你写好策略提交上来,它就会 24 小时坐在房间里接受所有人挑战。托管的 Bot 需要达到一定的 Rating,更多具体要求,请联系我。

这意味着你可以:写一个贪心 Bot 试试水;把威胁建模成最短路问题;给「切不切断这条走廊」写个代价评估;或者干脆上对抗搜索、MCTS、强化学习。游戏的规则文档就是你的题面,排行榜就是你的评测机。

顺便聊聊实现:这套代码本身也值得一看

Roka 全栈开源(TypeScript + Fastify + Socket.IO,前端是无构建的原生 JS),工程上有不少值得 OIer 玩味的细节:

来打一局吧

服务器上常年坐着官方策略 Bot 等你挑战。能稳赢 simple-strategy-bot 的策略,放到哪儿都拿得出手——欢迎来 Roka 排行榜上留下你的颜色。

私货

这年头都来 Vibe Coding 了,请给你的 Agent 丢下这么一段话:

你现在是一名负责开发 Roka 游戏机器人的 AI 工程师。

你的任务不是简单地给出一个 Bot 示例,而是完整地研究 Roka 的游戏规则、游戏引擎、Bot API、现有机器人实现和测试环境,然后独立设计、实现、测试并迭代一个具有实际竞争力的 Roka Bot。

项目地址:
https://roka.oim.moe:444/

代码仓库:
https://github.com/oimasterkafuu/roka

请先完整阅读仓库。不要在没有理解代码的情况下直接开始写 Bot。

/goal 最终目标是创建一个可以真正参与 Roka 对局的独立 Bot。

这个 Bot 应当:

1. 能够正确连接和运行于 Roka Bot 环境。
2. 能够理解完整的游戏状态。
3. 能够进行经济、扩张、进攻、防守、运输、切断、孤军救援和建筑决策。
4. 能够根据敌人的行动动态改变策略,而不是执行固定脚本。
5. 能够处理不同地图和不同出生位置。
6. 能够在实时 Tick 制约下做出合理决策。
7. 不依赖人工每局干预。
8. 能够通过离线模拟进行大量测试。
9. 不应该只是复制现有 Bot 的代码或策略。
10. 最终目标是形成一种具有自己战略思想的 Bot。

你可以参考仓库中的现有 Bot,但必须把它们视为研究对象,而不是模板。