最近对一个叫Grenade Brothers的小游戏做了二次开发,给它加了 AI 对手,支持单人游玩。
原游戏是用Zig编写、编译成WebAssembly,运行在wasm4这个幻想主机(fantasy console)上的。画面只有 160×160 像素和四种颜色,风格非常复古,玩法类似简化版的排球/乒乓球:两个人隔网打球,球落到对方场地就得分。
原作者的灵感来自游戏《A Way Out》里出现的一个街机小游戏。原版主要支持本地双人或 netplay 联机,缺少单人模式,所以我做了这个 fork,加上了 AI。
游戏简介
- 双方隔着球网交换一个球
- 球落到己方场地地面则对方得分
- 跳跃击球可以加速,站着击球会减速
- 击球点越偏离角色中心,横向速度越大
- 支持本地双人和 netplay(浏览器即可运行,手机也能玩)
原版控制:
- 左玩家:方向键(上键跳跃)
- 右玩家:ESDF
- R 键重置
本 fork 新增内容
在保留原游戏全部功能与EUPL-1.2协议的基础上,增加了模式选择菜单和三种 AI 难度:
| 模式 | 说明 |
|---|---|
| 2 Players | 原版本地双人 / netplay |
| AI Easy | 追踪型 AI,跟着球跑,反应有延迟 |
| AI Medium | 预测型 AI,模拟球的物理轨迹进行拦截 |
| AI Hard | 策略型 AI,会预判、试图把球打向空当,并使用有力跳跃 |
规则调整:
- 左侧始终是人类玩家(方向键 / 手柄1)
- 右侧在 AI 模式下由 AI 控制
- 先到5 分获胜,结束后返回菜单
菜单操作:
- 上下键移动光标
- X 键确认
AI 设计思路(简要)
AI 主要逻辑在 src/ai.zig 和 src/menu.zig 中。
几个关键点:
- AI 站位会刻意偏移,让击球更容易把球打过网,而不是纯垂直起跳
- 加入了人类化的“噪声”:反应延迟、脚步误差、跳跃时机抖动
- 紧急情况(球很低且很近)会优先救球,不会故意放水
- Hard 难度会尝试预判落点,并主动寻找空当
整体目标是让 AI 有层次感:Easy 适合练手,Medium 有一定对抗性,Hard 能给有经验的玩家一些压力。
如何运行
依赖与原版相同:
- Zig ≥ 0.10.1
- wasm4 ≥ 2.5.4
Bash
git clone https://github.com/lClonazepam/Grenade_Brothers_AI.git cd Grenade_Brothers_AI make init build run写在最后
这是一个纯粹的个人兴趣项目,主要是想在原有优秀小游戏的基础上,补上单人可玩性,并实践一下简单的游戏 AI(追踪 → 预测 → 简单策略)。
原游戏本身已经很有趣,加上 AI 后一个人也能随时玩一会儿。代码量不大,感兴趣的朋友可以直接看源码,尤其是 src/ai.zig 部分。
仓库地址: https://github.com/lClonazepam/Grenade_Brothers_AI
如果你也对 wasm4、Zig 小游戏或简单游戏 AI 感兴趣,欢迎交流。