Generals Lite Bot 进化记录:从规则复刻到训练迭代
记录我如何把轻量 generals 做成一个可观战、可训练、可持续增强的 bot 实验场。
为什么我会做这个项目
我想做一个适合放进个人网站、又能长期继续扩展的策略小游戏。
基础玩法沿用 generals 的核心结构:占地、集兵、攻击城市、寻找并击破敌方皇城。但我的站点不是一个大众联机平台,真人玩家不会一直在线,所以我很早就引入了 BOT。它们最初只是为了帮我测试,后来逐渐变成了整个项目最重要的一部分。
第一阶段:先把游戏本体做稳
在最开始,我先把基础规则做成一个能玩的轻量版本。这个阶段最难的点,并不是地图画出来,而是让操作逻辑真正稳定。
我遇到的几个关键难点
1. 路线不允许交叉
如果允许一条路线任意穿插另一条路线,排队指令会很快变得难以维护。尤其是在连续编辑长路径时,前一条路线已经开始执行,后一条路线还在修改,状态很容易混乱。
所以我最终限制了路线交叉,让一条指令在编辑和执行时都更容易预测。
2. 皇城生成不具有一般性
一开始的皇城生成逻辑在少数地图尺寸上能跑,但不够通用。后来我把生成逻辑改成更一般化的写法,让它在不同地图大小上都更稳定。
3. 连续多条指令下达
为了让游戏更接近真正的策略感,我加入了连续多条指令排队。这样玩家不需要每步都手动点一次,可以提前铺路线,让前线和后方同时运转。
4. 游戏平衡性的实验
光是“能跑”还不够。BOT 和人类对局时,地图、城市、视野和后期拖延都可能造成不平衡,所以我在这个阶段就开始不断观察对局,做小范围实验。
第二阶段:加入观众系统,开始观察 BOT
当游戏本体差不多可用之后,我发现一个问题:
如果我看不到 BOT 在干什么,就很难真正改好它。
于是我引入了 观众席。
不仅如此,我还给观战模式加了一个非常关键的功能:
点击玩家卡片即可代入视角
这意味着我在观战时,不只是上帝视角看完整棋盘,而是可以点某个玩家,直接切到它当前的战争迷雾视角。
这个功能非常重要,因为它让我第一次能真正理解:
- BOT 当前看到了什么
- 它为什么会走这一步
- 它是因为信息不足,还是因为策略本身不好
从这一步开始,这个项目不再只是一个小游戏,而开始变成一个 bot 观察与训练平台。
第三阶段:一步一步教 BOT 打得更像样
我没有一开始就直接上深度学习,而是先从启发式策略做起。
先让 BOT 学会贪婪扩地
第一步最直接:
- 优先扩地
- 避免长时间空转
- 对附近空地和低成本目标更积极
这样做的目标不是让它立刻变强,而是先让它“像在玩游戏”,而不是原地堆兵。
再让它学会攻击小城市
只会扩地会让 BOT 显得很被动。我后面开始引导它:
- 看到小城市时更愿意试探进攻
- 对可吃下的目标提高优先级
- 不要无意义地绕开容易拿到的资源点
然后教它集兵冲击迷雾
接下来我开始让 BOT 学会更主动的搜索。
我做了两件事:
- 鼓励它在后方集兵
- 降低距离惩罚,让它更愿意探索迷雾
这样它就不只是守在已知区域里,而会更积极地去寻找敌方主城。
再继续补上防守能力
如果只会扩张和冲锋,BOT 在遭到反打时会很脆。所以后续我又补了一些防守逻辑,让它在主城附近出现威胁时能更快回防。
第四阶段:处理后期僵局
随着 BOT 越来越能打,一个新问题出现了:
后期经常僵局
双方都已经扩到很大面积,迷雾减少,前线拉长,结果就是谁都打不死谁,对局变得很拖。
所以我加入了 500 回合后的决战模式。
决战模式的想法
在这个模式里,我让 BOT 的行为切换到更强制的后期逻辑:
- 离主城近的兵力,用来集兵和守主城
- 离主城远的兵力,用来向迷雾推进
- 整体上减少犹豫,逼迫局面收束
这个改动不是为了让 BOT 更“聪明”,而是为了让后期更有结果,而不是无限拖延。
第五阶段:为什么最后还是要走向深度学习
当启发式逻辑越来越多之后,我意识到一个现实:
- 规则能帮我把 BOT 推到一个还不错的水平
- 但很多复杂权衡,光靠手写逻辑很难一直维护下去
尤其是在:
- 进攻和防守如何平衡
- 集兵与扩地如何切换
- 面对不同地图尺寸是否要自动换节奏
这些问题上,启发式会越来越重,越来越难调。
所以我决定开始尝试 深度学习。
第六阶段:训练路线也被我推翻过一次
我一开始直接训练,结果基本没用。
原因后来很明确:
如果启发式参数本身不合理,深度学习学不到好东西
模型只能学到你给它的数据风格。启发式本身还很差时,模型只会把这种差策略学得更稳定。
于是我把训练路线改成两步:
- 先用启发式搜索找到更合理的参数
- 再让更强的 BOT 迭代训练下一代
这相当于先把老师变强,再让学生去学。
现在这个项目对我来说意味着什么
它已经不只是一个轻量 generals 复刻,而是一个把这些部分串在一起的实验项目:
- 轻量但完整的策略玩法
- 房间系统与多人/观战逻辑
- 可切换强度的 BOT
- 观战代入视角
- 启发式 bot 设计
- 后期决战模式
- 面向深度学习的训练入口
接下来我会继续把它往两个方向推进:
- 让项目本体更像一个成熟的站内作品
- 让 BOT 训练链路更稳定,真正形成一条可持续迭代的路线
这篇文章先作为阶段性整理。后面我还会继续补:
- medium / high 强度的区别
- 启发式参数到底怎么定义
- 为什么早期训练失败
- 新训练模板相比旧版到底改了什么