Skip to content

Repository files navigation

CONTACT

Carrier Warfare in the Pacific — Coral Sea, 7–8 May 1942.

You command what you know, not what actually exists.

浏览器端、单机、暂停式实时的航母特遣舰队指挥游戏。已实现 Coral Sea First Playable:完整搜索与不确定情报、有限航空作业、攻击队重新搜索、CAP、防空和损伤、公平日方 AI、Operation MO 与战后评估。无需账号或后端。

GitHub Pages

在线游戏:flanker.github.io/contact。源码:flanker/contact

.github/workflows/pages.yml 在推送到 main 或手动运行时,安装锁定依赖,执行格式、类型、lint、模拟测试和 Chromium 浏览器测试,再发布 dist/。Pages 的发布来源设为 GitHub Actions。构建路径读取 GitHub Pages 配置,支持仓库子路径;本地开发仍使用 /

本地预览相同的子路径构建:

VITE_BASE_PATH=/contact/ npm run build
VITE_BASE_PATH=/contact/ npm run preview

打开预览服务的 /contact/。线上与本地浏览器存档按站点分别保存。

本地运行

需要 Node 22.12+。

npm ci
npm run dev

打开终端显示的地址,默认 http://127.0.0.1:5173。点击 Start Coral Sea 开始。生产文件用 npm run build 生成到 dist/npm run preview 可本地预览。

第一次指挥

  1. AIR OPERATIONS 为舰队分配 12 架左右的 CAP;这些战斗机将不能担任攻击护航。
  2. 打开右侧 SEARCH,选择侦察机数、方位和距离。默认 12 架、300°–060°、230 nm。更窄的扇区更密集,但可能漏掉另一个方向的敌人。
  3. Next signal 推进到下一条重要信号。没有信号时最多推进 3 小时;+10m 则推进至多 10 分钟。空格暂停/继续,1×/5×/20×/60×控制时间倍率。
  4. 点击 Contact,检查报告年龄、置信度、可能舰种和不断扩大的位置误差。Plan strike 分配轰炸机和护航,开始整备。
  5. 打开下方航空作业表。第一批就绪后可 Launch now,或继续等更多飞机。起飞还有甲板时间;飞机攻击的是预计区域,到达后仍须重新找到舰艇。
  6. 空袭预警会自动暂停。CAP、护航和预备机共享资源。战果是延迟机组报告,未必正确。
  7. 在 5 月 8 日 18:00、失去全部可用美军航母飞行甲板,或主动 Withdraw 后结算。阻止 Operation MO 与击沉数量分别评价。

舰队标记可选择,Set course 修改航向/速度,Plot waypoint on chart 在地图设置目的地。地图缩放围绕选定友军;搜索与天气图层可单独切换。Field guide 包含完整操作说明;无线电提示音默认关闭,可在顶部打开。

本地存档

Save / Load 使用当前浏览器的本地存储,一个存档槽。开始页可继续已存游戏。存档记录版本、种子与玩家命令,再确定性地重建战局,包括飞行任务、AI、RNG 和尚未送达的报告。错误存档不会替换当前战局。不同浏览器或端口的存档互不共享;没有云存档。修改机制时应提高存档版本。

Verify

  • npm run verify — TypeScript, ESLint, unit/integration tests, production build.
  • npx playwright install chromium — install browser once.
  • npm run verify:e2e — browser interaction acceptance tests.
  • npm run sim:stress -- 1000 — 1–10000 局完整场景,检查精确飞机守恒、有限数值、事件队列上限和隐藏情报边界。
  • npm run format:check / npm run format — Prettier 格式检查 / 整理。

最终验证记录见 docs/VALIDATION.md,压力测试机器报告见 artifacts/stress-report.json

架构与调试

src/sim 是独立于 React/DOM 的 TypeScript 仿真。src/scenarios/coral-sea.ts 提供舰队、天气、起止时间和行动目标。src/controller.ts 是 UI 的唯一状态边界;UI 只得到友军和收到的情报投影。AI 决策使用其本方同等投影。src/ui 是 React/SVG 作战室。

开发服务器的 /?debug=1 是明确隔离的真值检查页,提供世界状态、双边情报、事件队列、RNG、行动状态和时间步进。它不与正常玩法同时显示,也不包含在生产构建中。

历史与简化

以 1942 年 5 月 7–8 日珊瑚海战的力量与行动背景为基础,没有任何强制击沉脚本。护航舰数量、出发位置、航空整备、天气、战斗和入侵推进经过玩法抽象;海图是示意作战图,未实现海岸碰撞和逐舰航路避障。中队按组模拟,CAP 持续轮换、损管、航空甲板调度和返航回收采用简化规则。本版不包含整个太平洋战役、夜间水面战、潜艇、多人或移动端专门交互。

SVG 适合本场景的任务编组数量,因此没有引入 PixiJS;所有素材在本地生成,运行时不依赖外部图片、字体或服务。

See PROJECT_STATE.md for current completion and evidence, docs/GAME_SPEC.md for the product, AGENTS.md for invariants, and LOOP.md for the development protocol.

About

CONTACT — pausable carrier warfare in the Coral Sea. Search, uncertainty, time and commitment.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages