Work / Strategy Prototype

StarKiller 《歼星者》反塔防轨道棋

进攻一颗会自转、会还手的武装行星:用有限的 Δv 改变轨道,赶在主炮充满前拆掉护盾。可在线试玩。

Role
独立开发
Year
2024 – 2026
Team
个人项目
Tech
JavaScript · p5.js · Node 测试
Status
原型
战斗界面:选中舰船后预览 Δv 机动的新轨道、落点会受到的炮台威胁和可攻击目标

概览

你是进攻方。对面是一颗会自转、会还手的武装行星:护盾按周期露出缺口,炮台锁定最近的船,主炮在倒计时。你指挥三艘船,每回合用有限的 Δv 改变轨道,赶在主炮充满之前拆掉护盾、打爆核心。

这是我独立做的浏览器策略原型,可以直接在线试玩。它不是塔防,是反塔防:要拆的不是一波波敌人,而是一座塔。

3个轨道根数决定一艘船的位置:倾角、升交点、相位
20 + 32艘舰船与件装备,全部来自配置表
1,218行,拆成 core / systems / ui 三层
3套脱离浏览器运行的 Node 测试

核心规则

一局是一个回合制的读局问题,所有信息都摆在明面上。

  • 行星每回合自转 22.5°。 护盾、炮台和核心跟着转,你的船不转——同一个位置这回合安全,下回合可能就进了炮台射程。
  • 护盾只在缺口打开时能打。 每面护盾有自己的周期和相位;全部护盾被摧毁之后,核心才会暴露。
  • 炮台打射程内最近的船,同距离时优先打血多的。
  • 主炮倒计时。 归零即失败,所以拖延不是选项。
  • 赤道轨道伤害 +1。 留在赤道打得更疼,但两座炮台也都在赤道上。

Δv:把轨道力学做成一个预算问题

每艘船的位置由三个轨道根数决定,一次机动就是改其中一个:

机动 含义 成本
倾角 ± 轨道面倾斜,才能够到高纬度的护盾 每 45° 消耗 100
节点 ± 升交点经度,整条轨道绕极轴旋转 每 22.5° 消耗 20
相位 ± 沿当前轨道前进或后退 每 22.5° 消耗 20

每回合的预算由火箭方程给出:质量越大(包括装备的质量),能用的 Δv 越少,并夹在 20 到 120 之间。所以编成阶段的选择是真实的取舍——重装备换来火力,付出的是机动性。

改变倾角很贵,这是有意的:它让“要不要离开赤道去打高纬护盾”成为一局里最重要的决定。

战前布阵:三艘船放在赤道轨道上

让决定可以被预判

规则复杂的回合制游戏,如果后果不可见就只剩试错。所以确认机动之前,界面会先画出结果:

  • 当前轨道(实线)和机动后的新轨道(虚线)
  • 预测落点,以及这个落点会被几门炮台攻击
  • 到了落点之后能打到哪些目标(绿色圈)
  • 攻击前显示预计伤害,需要二次确认

回合结束时先结算,再播放行星自转的过场,可以跳过;失败之后会给一行复盘:剩几面护盾、沉了几艘船、主炮还剩几回合。

其他系统

  • 技能与能量:EMP 让炮台本回合停火,过载让一次攻击翻倍,诱饵吸收一次锁定,撤退让船离场两回合后回到出生轨道;支援舰可以维修
  • 舰队编成:三个船位,每艘两个装备位,编成界面直接显示 HP、射程和 Δv
  • 研发:抽卡池由配置表定义,重复获得会返还金币
  • 教程关:五步引导,每一步只允许做提示里的操作
  • 存档:LocalStorage,带版本号;旧版存档里的舰船和装备 id 会被迁移到新 id

实现

战斗规则不依赖 p5.js。core(常量、数据解析、球面数学)和 systems(棋盘、战斗)是纯逻辑,只有 Game.js 负责绘制和输入。这样规则可以在 Node 里直接跑:

  • smoke_test.js:配置表解析、派生数值、旧存档迁移
  • board_test.js:护盾缺口的周期、投影与反投影
  • battle_test.js:伤害、机动成本、攻击与回合结算
  • simulate.js:让一个只会“贴近护盾、能打就打”的脚本连打上千局,用来看数值

最后这个脚本给了一个不太好看、但有用的结论:在当前这一关,这个最笨的策略 2000 局全胜,平均 11 回合通关,一艘船都不沉。也就是说现在的关卡太宽松,炮台和主炮倒计时还没有形成真正的压力。

现状

  • 能完整玩通:教程关 + 一个正式关卡,编成、研发、存档都可用
  • 关卡只有一个,数值偏松(见上)
  • 界面是原型级的:文字标签会重叠,没有美术和音乐,只有合成的提示音
  • 主菜单上还写着“拖拽给速度向量”,实际交互已经改成了方向 + 档位的按钮,这行字还没改

这个项目的前身

2024 年底的第一版是实时的:舰船绕行星自动对射,带属性克制、关卡表和 3D 模型预览,当时叫 Star Annihilator。配置表、编成、抽卡和存档这层外壳是从那一版沿用下来的;战斗层在 2026 年整个重写成了现在的回合制,同时把 3400 多行的单文件拆成了模块。

旧版的设计记录还在:用 p5.js 做太空可视化:构建动态行星战斗系统。

下一步

  • 用模拟脚本反过来调数值:让笨策略的胜率掉下来,让“撤退”和“诱饵”变成必要的选择
  • 做第二、第三关,用护盾相位和炮台布局做出不同的读局题
  • 清理界面:标签避让、教程文案与实际操作对齐