坦克体问题:带轨道力学的《焦土》式炮战游戏

查看原文 HN 讨论

文章摘要

Tank Body Problem(坦克体问题)是一个浏览器回合制炮战小游戏,名字是”三体问题”(Three-Body Problem)的双关。作者 jimbooonooo 在 HN 上说,他小时候在 Windows 3 上玩《焦土》(Scorched Earth),”那差不多是一千年前的事了”,一直很喜欢这个游戏。这是他的实现版本:把平坦的战场换成一颗圆形的小星球,再加上基本的轨道动力学,两辆坦克分立在星球表面,旁边还有一颗月亮在绕着转。理论上手机也能玩,但主要是为电脑浏览器设计的。

作者坦白了 AI 的角色。 他特意声明,出于透明,这个游戏是用本地模型 Qwen 3.8 27B 生成的,所以”我的实现”这个说法”最多只能算宽松意义上的”。有人问花了多久,他说在一块 B70 显卡上用 q4_k_m 量化版跑了大约一个小时。他希望大家反馈哪些地方好玩、哪些不行。

玩法。 轮到你时,先移动坦克,再调炮管仰角和发射力度,然后开火。月亮会绕星球运转,它的引力会弯曲每一发炮弹、激光、羽毛乃至爆炸碎片的轨迹,所以瞄准时得把月亮的位置考虑进去。屏幕上的弹道预览线只按开火那一刻月亮的位置计算,炮弹飞出去之后月亮还在动,实际轨迹会和预览不同,作者把这称作要靠你”内置的电动肉质估算器”(也就是大脑)来预判。爆炸会侵蚀星球地表,如果坦克脚下的地面被炸塌,坦克翻倒,这一局就结束。

武器随经验解锁。 根据游戏里的帮助页面,目前有五种武器:普通炮弹(0 经验);”孔雀羽”(Plumage,30 经验),飞行中再按一次空格会散成三片飘落的羽毛;奶酪(60 经验),会在地面上弹跳最多三次;毒药桶(120 经验),飞行时会一路洒下毒气泡;卫星(160 经验),飞行中自旋,再按空格会朝当前朝向射出一道同样受月球引力影响的激光。

发帖后作者已做的修改。 HN 评论里最集中的问题是”可以直接开到对手脸上开炮”。现在的版本已经把移动限制为每回合最多两个车身长度,还加入了单人模式(电脑对手会根据当前月亮位置规划射击)、五局三胜制、每个系列重置的经验值、保存在浏览器本地的 Elo 分数,以及输入三个字母名字上榜的记录功能。系列得分的公式是 10000 减去 100 乘以实际开火耗时,最低 100 分。规则里还写明:炮弹 20 秒后失效,飞出屏幕则立即失效;每回合结束后有 0.5 秒间隔再轮到下一位玩家。

HN 评论精华

帖子 188 分、50 多条评论。讨论分成两部分:大量具体、诚恳的游戏设计反馈,以及由”一个人类开发者绝不会放过的明显 bug”引出的关于 AI 生成作品的感慨。

最大的 bug:开到脸上开炮。 SubiculumCode 最先指出玩家可以直接开到对手旁边开火,olliepro 说”左右移动太 OP 了”,isoprophlex 惊讶”你可以直接开过去冲对方脸上开炮?!”,philipallstar 调侃”现实中的坦克战术在这个游戏里非常可行”,mozzaa 戏仿标题党:”2 号玩家最讨厌的一个简单技巧”。作者说会限制为每回合一到两个车长。pjc50 补充原版《焦土》可以在规则里选择是否允许移动,而且移动很慢,要和回合计时器赛跑,《百战天虫》也类似,他认为削弱一下或者加点风险(比如地雷)也可以保留。skewbone 提醒原版里开车还要花燃料钱,取决于经济设置。Bigpet 和 datadrivenangel 还发现 1 号玩家能换武器、2 号玩家不能。

月亮太快、引力太强。 这是第二大槽点。rikschennink 多年前做过一款”地球对抗小行星”的 iOS 游戏,遇到过同样的问题:引力太强时,想利用引力就变得难以捉摸,乐趣大减,最后他让引力只起装饰作用;他建议让月亮慢下来,再加上能预测”现在开火时月亮会在哪”的提示。作者回应说他和朋友也在笑月亮把游戏搞得有多难,但没有月亮的话两三回合就能打死对手,他同意调低月亮影响、做未来弹道预测会更好玩。empath75 的总结是:”复杂和混乱之间只有一线之隔,这个游戏现在站在了错误的一边。”bethekidyouwant 说月亮和炮弹一样快”太扯了”,womble2 较真地指出月亮的真实轨道速度约 1 千米每秒,而 M777 榴弹炮的出膛速度约 0.8 千米每秒,两者确实差不多;bethekidyouwant 反驳月亮还应该在 300 个地球长度之外呢,kbelder 算了一下:如果月亮在离地面一个地球直径的高度绕行,轨道速度约 4.6 千米每秒,七小时转一圈,”潮汐会非常狂野”。foo12bar 提议应该允许把月亮撞出轨道,砸到星球上毁掉半个世界。

超时机制和弹道预览。 ulrikrasmussen 和 zug_zug 都对超时很恼火:好不容易打出一发看起来要直接命中的绕射炮弹,结果它刚开始朝目标下坠就被游戏移除了。zug_zug 给了一个具体方案:炮弹 5 秒没落地时,先判断它是否还在推进,不确定的话就把时间加速 10 倍,直到明显在推进,世界时间 60 秒后再超时;他还说判断炮弹是否达到逃逸速度对 AI 来说应该是很简单的数学。kbelder 建议加一点随高度增强的空气阻力,让稳定轨道不可能出现。作者说时间加速这个机制很巧妙,让他想起了《旅鼠》。shoo 是《焦土》老玩家,给了一份清单:主导策略是开到近处开火,需要重新平衡;游戏中途怎么调出操作提示;方向键左右调的是力度而不是炮管角度,和原版相反、不直观;月亮参与时弹道预览基本没用。他还转述了游戏开发者做原型时常用的思路:先问这东西能好玩 5 秒吗,怎么让它好玩 30 秒、60 秒。手机端也有人反馈找不到降低力度的按钮,lebuin 和 Arn280 说按钮在”增加力度”左边,透明度很低,几乎和背景融为一体。yuppiepuppie 说浏览器提示”连接不安全”,smallerize 调侃这是纯 HTTP,”没有证书可以配错或被冒充”。

关于 AI 生成作品的感慨。 ryankrage77 列完一串问题后直接问:”你发帖之前自己真的玩过吗?”jimmaswell 为游戏辩护:显然应该用预览线来规划下一发、掌握时机,如果只是等预览线对准对手就开火,那就太简单了;能打到对手只是这类网页小游戏的小毛病,它依然有趣。作者说”这位懂了”。

讨论中最有分量的是 rossy 的评论:显而易见的事情人人都会漏掉,但一个人类作者有 99% 的可能会在实现移动功能做到一半时意识到它破坏了游戏。他说自己对 AI 未来最大的恐惧,就是所有东西都变成这样。过去,像这样一个游戏的存在,本身就证明有个人足够热爱它、把它硬拉到了世界上;现在则有一种空洞又略带尴尬的感觉,如果你认真琢磨别人的作品,你投入的思考可能比作者本人还多。bruce343434 说”说出了我想说的”,并指出弹道指示线不具预测性,玩一次就能发现,也许一句提示词就能修好。MarcScott 讲了一个类似经历:某个 AI 发布页面上有一款由 Codex 编写的赛车游戏,第一次玩很惊艳,第二次发现只要按住油门、完全不转向就能每次都赢过所有 AI 对手,”漂亮但毫无意义”。jerf 说现在编程类 Reddit 上到处是提交历史只有一个半小时、却请求”残酷反馈”的帖子,他想给的残酷反馈是”你自己用过你的代码吗?”他认为 vibe coding 没什么错,但任何像样的成果都需要远超 30 分钟的测试,单次提示生成的初版通常没什么实际价值;他给孩子做一个应用已经花了几周,用”能连续用多久才碰到问题”来衡量进度,第一次撑过五分钟时他觉得是件大事,现在是 15 到 20 分钟。他也说明这些话并非针对楼主。

作者 jimbooonooo 的回应很坦诚。他说能直接开过去这件事其实是他有意保留的功能,方便自己快速刷经验解锁武器,但同意它不该出现在”正式版”里(”正式”这个词他用得很宽松)。他也强烈认同大家对 AI 垃圾和创作者缺乏思考的看法:他自认是热爱”第二类乐趣”的人,职业生涯中从软件、硬件到机械开发的艰难摸索里获得了很多满足,看到这种体验可能因 AI 消失让他很失望,他甚至为人类文明的长期稳定和发展感到担忧。他引用了 H.G. 威尔斯笔下的莫洛克人,那些维护着自己已经不知道如何制造、也不知道为何存在的机器的人(他把出处记成了《地心游记》,其实出自《时间机器》)。最后他感谢所有反馈,承认自己发得太早,也没有做全面测试。