一个人花三个月做了一台二战潜艇里的鱼雷计算机
文章摘要
Silent Shark 是开发者 epaga 在业余时间花约三个月做的一款战术地图风格的二战潜艇模拟器,主打”真实的鱼雷火控解算“——不是那种 3D 第一人称浪漫化的潜艇游戏,而是完全建立在二维战术地图上:你在地图上画方位线、估算敌舰速度和航向、操作TDC(Torpedo Data Computer,鱼雷数据计算机)输入参数、计算开火诸元、然后等鱼雷划过那条几公里长的航线击中目标。
最让 HN 用户兴奋的是真实度——作者直接读了二战美军 TDC 的原始操作手册(maritime.org/tech/tdc.php)、用了 1944 年的 ONI 208-J 日本商船识别手册作为目标船图鉴、参考了 1944 年莱特湾海战报告里的美军潜艇巡逻区地图。HN 评论里多次出现”dry(干燥/枯燥)”这个形容词——但它在这里是夸奖:玩家不是按按钮看炮弹炸,而是真的在算角度、追踪目标、判断什么时候上潜望镜(举得太久会被护航舰发现)。
技术上是 Vite + TypeScript 的纯网页应用,可以加为 PWA 几乎全屏运行;同时已经上架 Steam 准备做桌面版。游戏使用 Gustav Holst《行星组曲》Op. 32 作为背景音乐——作者说是因为这是他从小最早接触的古典乐,”既感人又省了自己写配乐的功夫”。HN 上的发布帖变成了罕见的高质量产品反馈现场:作者 epaga 在评论区逐条回复用户意见,甚至当场把建议加进了游戏里——本帖最精彩的不是产品本身,而是这种公开迭代的过程。
HN 评论精华
-
epaga(作者):开场感谢——”这居然又上首页了!第一次发的时候 0 票……”。贴出了三份让他做出这游戏的公开资料——原版 TDC 手册、ONI 日本商船识别手册、莱特湾战报里的潜艇巡逻区地图。”这种二战公开档案是金矿”。
-
abrookewood:第一句担忧——”看起来有点太 dry(枯燥)了,但真实感很爱”。epaga 接住问:”有什么变得不那么 dry 的建议吗?这本来就是潜艇模拟器的命……” conception 替他挡:“dry 在这里是优点。让小众的留小众,世界不需要更多最大公约数内容。” applfanboysbgon 神回:”潜艇模拟器不应该是 wet 吗?非常 wet 才对。”
-
kqr(神级用户):玩了一遍 tutorial 后给了长篇有效反馈——建议在地图上 TDC 计算出的目标船黄色虚影旁边,多画几个未来 1/2/3 分钟的预测位置,透明度递减。epaga 当场把它加进游戏,几小时后回复:”把你的建议做进去了,去试试看。” kqr 回:”第二关试了,机制很棒。”——HN 上罕见的实时 build-in-public。
-
oezi:另一个 tutorial 问题——”开始/停止时间的时机让我搞混了,和教程指令脱了节,后来不小心又跑了一遍时间,所有计算都要重做”。epaga 解释:基础教程里应该会卡住不让你解暂停直到第 7 步,第 8 步会自动暂停,”看来我得做得更死板一点”。
-
dwroberts:偏好问题——”想试,但强烈希望有 Steam demo 而不是浏览器版。浏览器有种’短暂感’,和’要花很久学才能玩’的游戏气质不搭。” epaga 给出双路径——Steam demo 在做,同时浏览器版可以加到主屏幕变 PWA 接近全屏体验。
-
crimsoneer:眼力错觉——”这是 Comic Sans 还是我眼花了?” epaga:”应该是 Patrick Hand 字体加 typewriter 用的 Special Elite……你真看到 Comic Sans 了?” Citizen_Lame 给出公允仲裁:”是 Patrick Hand 没错,但这种潜艇游戏的气质需要更严肃的字体,比如打字机风。”
-
fraXis:硬核老玩家——”我是玩着 Gato / Silent Service / The Hunt for Red October / Up Periscope! / Aces of the Deep 长大的,已经 wishlist 了。你能讲讲开发过程吗?花了多久?有没有 vibe coding?” epaga 大方公开了所有细节——业余时间 3 个月,整个项目是他从 2 月开始作为 prompting 练习实验做起来的,主要为了试探 LLM 辅助开发能做到什么程度。
-
sublinear(手机端首次玩家反馈):极有建设性的第一印象——音乐”完全压过其他声音”必须立刻调低;不需要先教工具怎么用、应该先讲目标。ramses0 补充 BoardGameGeek 的规则讲解经典套路——“倒着讲”:目标是击沉敌船 → 怎么击沉 → 鱼雷怎么瞄 → 数字怎么输……
-
throwaway2037:考据—— “这音乐是 Holst 的《行星组曲》Op. 32”——问作者为什么选这个。epaga:”从小最爱的曲子之一,是我对古典乐的第一次启蒙;而且省得自己写配乐。”
-
kqr 又一次:报了一个小 bug——在教程里选中目标船然后按 Delete,目标船被直接删了。epaga:”哎呀,那是我调试时留的功能,已修复,谢谢!”——继续展示了什么叫作者就在线。
-
butz:纯技术 nitpick——”你的 app icon 是 3.66 MB 的 PNG,可以优化下省点流量。” epaga:”谢谢提醒——已优化为 webp。” 整个评论区从产品反馈到 favicon 体积都被一遍——这种回应密度本身就是软广。