Fly By:一款复古双翼机飞行小游戏,以及它引发的 AI 编程之争
文章摘要
Fly By 是 Michael Teter 做的一款浏览器复古飞行游戏,副标题是「Balloon Pop & Stunt Flight」(戳气球与特技飞行)。整个游戏是单个 HTML 页面,桌面端体验最佳,移动端可玩但作者承认还需打磨。
玩法:你驾驶一架 8-bit 风格的双翼机,目标是戳破气球、俯冲穿过谷仓、躲开客机,并做出特技机动。界面上方有完整的仪表盘:分数、最高分、已戳破气球数、连击倍率、当前航线、剩余飞机数、道具、燃料,以及一组飞行仪表——风速、空速、高度、迎角(AOA)、油门状态,还有一个失速(STALL)警告灯。
操作:方向键上下或 W/S 控制俯仰(爬升/俯冲);空格键或屏幕按钮控制油门/刹车/起飞;P 暂停、M 静音、F 全屏、ESC 设置。道具包括加速和机枪。
设置项里有几个能看出作者意图的开关:Y 轴反转(默认遵循航空标准——拉杆是爬升)、道具开关、屏幕触控按钮、仪表盘显示、复古 CRT 扫描线滤镜、引擎音效,以及「大气风力动力学」。落地并在跑道上暂停可以加油。
最关键的背景:作者在 Show HN 的正文里主动、完整地披露了制作方式——「我的概念、我的指导,Gemini Flash 负责干活。花了大约 4 小时、和 Gemini 进行了 50 多次对话。」 他还特意感谢了 Gemini Flash,说自己在很多项目上用它都很顺利。正是这段坦白,让这个 84 分的帖子变成了本期最激烈的一场关于 AI 编程与创作价值的辩论。
HN 评论精华
67 条评论,讨论大致分成两条完全不同的线:一半人在认真给游戏设计提建议(而且作者每条都认真回复了),另一半人在吵「AI 写的东西值不值得发在 HN 上」。
怀旧派:这勾起了一代人的记忆
这是最温暖的一条线。tclancy 说这让他会心一笑,想起了自己在 Atari 上花无数小时试图打完 Activision 的《Barnstorming》——「扫描线和飞行手感都对上了」。zwayhowder 说它把他带回了大约 1988 年、六岁时第一次玩 PC 游戏的场景,「怀旧解锁」。scandox 的一句「它可不是 Sopwith」引出了一串共鸣——esafak 说他点开链接前就料到会有人提 Sopwith,果然没失望;cube00 感叹「Sopwith Camel,飞行模拟器的记忆被解锁了」。kingforaday 想起了《Sky Kid》,nnevatie 则搬出了《Triplane Turmoil》说那个更好——作者 michaelteter 的回应堪称全帖最佳:「很多游戏都更好。很多评论也更好 :)。」contingencies 推荐了老 DOS 游戏《Wings of Fury》以及它的精神续作《Rogue Aces Deluxe》作为灵感来源。
hydropax 说扫描线是神来之笔,「让它感觉是真正的复古」。maxbond 说他玩得很开心,觉得扫描线效果很好看、障碍物设计有趣且有挑战,只希望能支持手柄(浏览器有对应 API)和自定义按键。他还顺带分享了自己的近况:「我最近也在做浏览器游戏。这是个很棒的开发环境。Three.js + WASM 已经治好了我想学 Godot 的念头,至少暂时如此。」
认真的游戏设计反馈
vunderba 建议让飞机物理随俯仰角变化,这样某些关卡就需要玩家主动俯冲几秒来积累”存储的速度”。作者回复说这其实已经实现了:平飞或俯冲会提速(平飞的上限低于俯冲),爬升会掉速,所以要够到高处的气球往往得先攒够速度再拉起来。他接着说了一句很有意思的话:「现在我在想还有什么值得加的——但又不能让它变成什么都是。我觉得我差不多做完了。」
byako 注意到了一个细节并表示敬意:「一个戳气球的游戏里居然有失速警告、迎角和风力动力学,这个飞行模型的投入程度,尊重。」不过 kqr 追问:风力动力学到底是什么?他本以为逆风增强时会爬升,但并没有;他也没能成功失速,只在飞出边界时被反转了。
Suhinnall27 建议给降落赋予更多意义——比如限制燃料和油门,让降落真正有用;并建议做筋斗等特技动作给额外分数,以及加一个护盾道具。作者承认:「你说得对,我需要改进整个地面体验。飞机确实会逐渐耗油,但你在耗尽之前坠机的概率要大得多。」他还补充说降落并在跑道上暂停可以加油,但地面上的操控手感很糟糕。
tom_ 和 Configure0251 都指出,重复拾取机枪道具时既没有增加同时射出的子弹数,也没有延长持续时间。therein 建议倒飞和倒着飞应该有惩罚,比如掉高度。mikepalmer 给了一整份愿望清单:像《Defender》那样切换左右方向、和红男爵空战、垂直和水平的圆环(需要失速穿过)、能打掉建筑、有不同目标的关卡并飞往下一关、航母降落、更快的飞机——同时提了两条 UX 问题:界面有些文字太小(「老游戏就只有一种字体」),以及降落时刹车很困惑、太容易误切到全油门。
关于控制反转的小讨论:jaylau47 觉得上下键方向反直觉——按上飞机往下、按下飞机往上,问是不是故意的。askvictor 解释这就是真实飞机的操纵方式,很多游戏都这么做。trencedamp 补充了更准确的说法:在座舱里你是把驾驶杆往前推来俯冲,键盘的上键常被用来表示这个动作,但这个类比并不完美。kqr 则提到配平轮往上转是配平到更高速度(即机头向下),并困惑地表示这跟自己的实际体验对不上。fhn 则更希望用左右键而不是上下键。
关于飞行物理的专业批评
kqr 给出了全帖技术含量最高的一条:「和很多横版飞机游戏一样,这个游戏里被操控的物体表现得更像火箭而不是飞机。」他建议作者读一点飞机物理(推荐了 av8n.com),并展示了自己做的一个原型和相应的技术文章,强调「要做对需要抠非常多的细节」。trencedamp 附议,说自己正在 Unity 里做一款休闲飞行游戏,「把物理做对真的很难」——他觉得最难的是准确模拟重力如何对抗飞机的动量,以及把失速和改出做对。
作者 michaelteter 的回应界定得很清楚:「目标是做一款在观感和手感上接近我小时候玩过的某款老主机游戏的东西。就像很多街机赛车游戏一样,这里的物理并不追求超写实。我确实很爱飞行/驾驶模拟里的真实物理,但那不是我这次的目标。」
最激烈的一条线:AI 生成的东西该不该发在 HN
Kuyawa 开了第一枪,也是最乐观的一枪:「这正是 AI 应该被用来做的事。我们至少要一个月、还会满是 bug 的东西,AI 现在不到一天就交付了,可以直接上线。这就是本质,AI 是超能力,世界是我们的。」
ricardobeat 的回敬只改了最后三个字,堪称全帖最精炼的反驳:「我们至少要一个月、满是 bug 的东西,AI 现在不到一天就交付了,满是 bug。」
krapp 成了批评方的主力。他先给了具体的游戏反馈(假扫描线让 UI 难读、飞机太慢、转弯半径太紧、物理缺乏重量和速度感、需要更大的场地),然后抛出了那个引爆全场的论点:「HN 传统上是用来和社区分享代码的。也许 AI 提交的东西,大家应该分享 prompt?我不知道。我本来想看代码,但既然不是你写的,你也没法真的讨论它。」
noir_lord 评价这话「生硬但不算不准确——欢迎来到我们的未来」。但 amazingamazing 反驳:「啊?你为什么这么认为?你上过文学课吗?」——随后是一轮关于这个类比是否成立的来回。krapp 的立场是:文学由人写成,如果作者在课堂上,他能讨论自己的过程和方法论;而用 AI 生成代码的全部要点就是不去关注这些,所以作者除了”这是我用的 prompt 和模型”之外提供不了任何洞见,「对我们这些还在乎这些东西的少数人来说没有任何价值,换句话说,没有任何能满足智识好奇心的东西」。amazingamazing 指出大多数文学课讨论的作品其作者根本无法到场,而且作者从未声称自己是”vibe coded”——他明确写了是「我的概念、我的指导,Gemini Flash 干活,4 小时 50 多次对话」。
作者本人的回应是全帖最有分量的一段。krapp 说「没人能在四小时里生成这个还理解任何东西,如果我错了欢迎作者回复」,于是 michaelteter 出场了:
我就是作者。
代码是艺术品吗?还是说代码的产物、以及人们使用这个产物时的感受才是重点?
在享受了几十年写代码这门手艺之后,我现在只想造出我喜欢的东西。到了这个阶段,只要产物满足我的要求,我对代码细节的在乎程度是零。
在你真正尝试构建一个完整(哪怕简单)的产品之前,你可能不会意识到其中涉及多少和代码毫无关系、却对产品成败至关重要的决策。那才是我关注的东西。
面对另一位批评者,他还说过一句同样直接的话:「在手写了 30 年、8 种语言的代码之后,我觉得我可以被免除把想法翻译成可执行代码这种繁琐工作了。」以及回应”这没什么价值”时的一句:「它现在存在了。在我『做』它之前它不存在。对我来说它有价值,因为它是我想玩的东西。」
socalgal2 提出了辩论双方里最具建设性的框架,虽然他自己也觉得这游戏平庸:电影导演指挥演员、摄影、剪辑、置景,他并不亲自做这些事,但我们仍然会去问导演关于他执导的电影的问题。「我把 AI 看作类似的东西。我在指挥它。知道导演为什么做出某些决定、以及他为了得到想要的结果所用的流程,这里面仍然有价值。因为现在垃圾太容易产出、还有点新鲜感,人们就发出来,结果很烂;但我相信有些人会把 AI 当作工具、投入足够的指导努力来得到好结果,那是值得尊敬的。」
cynicalkane 则承认自己因为 HN 的 AI 内容政策举报(flag)了这个帖子:「我知道技术上它并不适用于提交内容,但我认为游戏提交(或任何提交)应该展现更多人性,而不是『看这个 Gemini 帮我写的、能带来片刻愉悦的东西』。」leothetechguy 的立场更极端:「我不想看到 AI 被用来为任何平台生成游戏。我不会去读没人费心写的东西,也不会去玩没人费心做的东西。AI 没有品味,而且这不是后训练能解决的问题,因为品味就是那个人类成分、是真正投入某件事的努力本身。」
Walf 给了一个不同角度的批评,把矛头对准了美学而非伦理:「比起这些带着 mixel(像素尺寸不一致)、风格混杂(有些是块状有些是曲线)、还在旋转正方形的伪复古东西,我更希望看到 AI 被用来给老平台(主机模拟器)生成新游戏。把画布限制在一个低分辨率像素网格上会是立竿见影的改善。」
MRPockets 则替作者反驳了 krapp 的一条具体批评。krapp 说「感觉它真的需要一把枪」,MRPockets 回应:「我进游戏不到 10 秒就捡到了(本来就存在的)枪的子弹。你的评论读起来像是你玩了没几秒。这是个有趣的小游戏,没必要这么傲慢地一笔带过。」krapp 承认自己玩了几分钟就觉得无聊,后来又试了一次拿到枪,但枪是自动开火的,「还是不好玩——如果我能自己控制开火、弹药更少,会更有挑战性」。
superkuh 提了个纯技术方向的建议:做成基于 WebSocket 的多人游戏,配一个开发者控制的信令服务器(peer 在上面注册)和 STUN 检测来获取本地 peer IP。
mikepalmer 贡献了全帖最好的一句玩笑:「喜欢这个飞行手感,超好玩的游戏!!那你能做个 GTA VII 吗?」