本项目的是在多人在线真人对战小游戏 Generals.io 上开发的人机对战版本 Generals 游戏。
generals.io 风格的人机对战实时棋盘策略网页游戏。纯前端实现,零后端,静态部署在 GitHub Pages。
- 🎮 WASD 操控,开箱即玩
- 🤖 4 种 AI 对手:贪心策略 / LLM / 用户自写 bot / 机器学习
- 🌫️ 战争迷雾、城市与主城、移动队列
- 🔐 LLM Key 双通道安全(自填 Key + 共享代理),密钥绝不进入前端
当前进度:M1 核心(人 vs 贪心)已完成。LLM / 用户 bot / ML bot 为后续里程碑。
占领空地扩张、攻下中立城市加速产兵、最终攻占对方主城 ★ 消灭对手。
| 键 | 作用 |
|---|---|
W A S D |
向 上/左/下/右 派兵(默认半兵) |
Shift + 方向 |
全兵出击(留 1) |
E |
选中自己的主城 |
Q |
清空移动队列 |
Space |
暂停 / 继续 |
| 🖱️ 点击 | 选中己方格 |
详细规则见 docs/DESIGN.md。
本项目用 pnpm(包存全局 store,省磁盘、跨项目复用)。
npm install -g pnpm # 一次性,安装 pnpm 工具
pnpm install # 装依赖(进全局 store + 本地软链接)
pnpm dev # http://localhost:5173
pnpm build # 类型检查 + 产物到 dist/
pnpm preview- push 到
main触发.github/workflows/deploy.yml:pnpm install --frozen-lockfile→pnpm build→ 上传dist/。 - 仓库 Settings → Pages → Source 选 GitHub Actions。
- 访问
https://<用户名>.github.io/GeneralGame_StaticVersion/。
务必把
pnpm-lock.yaml一并提交,CI 才能用--frozen-lockfile做可复现的快速安装。
纯静态前端里任何内置 Key 都会泄露(F12 可读)。本项目采用双通道:
- 自填 Key(BYOK,推荐):在「设置」页填你自己的 GLM/DeepSeek Key,仅存浏览器 localStorage,请求直达 LLM。
- 共享代理:项目方部署 proxy/(Cloudflare Worker),Key 作为服务端 secret,前端只持有公开的代理 URL。
Key 优先级:自填 > 共享代理 > 无(回退贪心)。共享代理的硬化与「Key 未泄露」验证见 PLAN.md §4。
src/
├── game/ 纯逻辑层:types / engine / map / loop + ai/
├── net/ LLM 客户端(M2)
├── components/ Board(Canvas) / HUD
└── pages/ Home / Game / Settings
proxy/ 共享 Key 代理(Cloudflare Worker)
train/ ML bot 离线训练(Python)
bots/ 示例用户 bot
docs/ 设计文档 / bot 协议
- M1 人 vs 贪心,完全可玩
- M2 LLM 对手(GLM/DeepSeek)+ 用户自写 bot 沙箱
- M3 机器学习 bot(离线训练 + 浏览器推理)