浏览器端单机 2D 俯视实时战略 · 以解放战争经典战役为题材的红色战争 RTS
《沙盘战争》(英文代号 War of Dots)是一款基于浏览器的单机、俯视 2D 实时战略(RTS)游戏,为课程项目。 玩法框架参考 Steam 平台上的《War of Dots》,但全部代码、地图、关卡、文案、UI 与美术资源均为原创。
游戏以解放战争经典战役(塔山阻击战、宿北战役、双堆集战役等)为题材,玩家指挥部队完成战役级作战任务。 项目采用纯静态 Web 应用部署,无需后端,可作为静态站点直接发布。
核心循环为「观察 → 决策 → 下令(选择 / 移动 / 攻击)→ 模拟推进(战斗、补给、占领、控制线)→ 迷雾与状态反馈 → 胜负判定」。 单局为小型遭遇战规模(约 5–15 分钟),教学关卡引导玩家走完「选择 → 指挥 → 交战 → 占领 → 胜负」的完整闭环。
俯视 2D RTS,圆点单位 + 沙盘地图;支持单选、框选、Shift 增减、从单位拖出轨迹下令、右键移动 / 攻击,空格暂停,0.5 / 1 / 2 倍速。
城市是枢纽:占领半径 60px,每己方单位每秒贡献 5% 进度、上限 15%;提供 5 单位补给容量与 100px 内回血。占领全部城市(普通关卡的默认目标)即获胜,但歼灭 / 防守 / 夺取据点等关卡必须达成各自目标才算胜利;城市生产已关闭,兵力完全由关卡设计决定。
道路加速 25% 且行军补给消耗减半;森林减速但防御提升、并遮蔽视野;山地防御最强;高山不可通行;水域可蹚但代价高、水中攻击减半且持续掉血。隘口、桥头、山口天然成为必争之地。
单位携带补给存量,断补或被多面夹击会失序、溃逃甚至投降;崩溃后不受指挥、速度大减。战斗因此有了「击溃」而不只是「打死」。
格级三态(当前可见 / 已探索 / 从未探索);森林中敌军仅在 60px 内可见;离开视野后保留灰色「最后已知位置」虚影标记。
轻量战术目标,被占领后仅提供视野,不提供补给与士气,也不参与胜负——可用于前哨与观察哨,不会意外改变经济与平衡。
支持绘制地形、放置城市 / 出生点 / 占领点、可玩性校验、localStorage 保存载入、文件导入导出,并可一键试玩后安全返回。
一局游戏完整写在一个关卡 JSON 里,引擎不含任何关卡特例;同一引擎换一份 JSON 即得到新关卡,新增战役的成本主要是地图编辑。
world.issueCommands,避免为不同控制来源重复编写移动与攻击逻辑。src/config/values.js(禁止硬编码),文案集中在 src/i18n/(中文优先),两者由镜像测试守护一致。参考 Steam《War of Dots》的核心玩法框架,并在关卡数据化、自动化测试与确定性模拟上做出自己的工程化取舍。
当前状态为可玩、可扩展、可交付:断裂峡谷(教学进攻关)、宿北战役(歼灭关)、塔山阻击战(防守关)三关已数据化并可通关, 另含双堆集战役(淮海战役)等关卡脚本;地图编辑器独立成页;一次性构建产出 15 个静态页面可直接部署; 48 项 MVP 验收标准中 44 项已完成,剩余集中在真实 GPU、Edge 浏览器与多分辨率的人工验证。
已数据化可通关的战役包括:
开发中另含双堆集战役(淮海战役)等关卡脚本(蓝方玩家拥有华野援军剧本,红军按五阶段脚本依次行动)。 所有关卡共用同一套模拟核心与命令接口,差异完全由地图 JSON 与关卡参数表达。