首页 › games › 《Graviton》HN爆火的引力弹弓,他八年前就开源了

这个周末,Hacker News 首页被一个网页小游戏刷屏了:《Hole Punch》——把黑洞当弹弓、把飞船甩回空间站的引力解谜。作者是个人开发者 trwhite,游戏挂在他自己的域名下,没上任何平台、没有版号、没有美术团队,两天热度冲到三百多分。评论区热闹得像过年:有人喊"把我的周六晚上还来",有人一口气通了全部 20 关,还有人直接外链他的 physics.js,给游戏画了一张解空间地图。

然后,在评论区一个不起眼的角落,有人贴了一个链接,配文轻描淡写:"I ended up making a very similar game for a hackathon with a friend years ago."(几年前和朋友参加黑客松,我做过一个差不多的游戏。)

点进去,就是今天要挖的仓库:yogthos/graviton。同样的引力弹弓,同样"飞船没有引擎",同样让人一关接一关停不下来——只不过它是开源的,MIT 协议,仓库总量不到 400KB,而且已经在 GitHub 上安安静静躺了八年。

一个玩法刚被市场验货,开源同款就摆在货架上。这就是小而美调研最舒服的入场姿势。

仓库档案

项目 数据(据 GitHub 仓库页面,截至 2026-10-05)
仓库 yogthos/graviton
⭐ Star 24
语言 Clojure(ClojureScript)
License MIT
作者 yogthos(Dmitri Sotnikov)与 danielcompton(Daniel Compton),共 2 人,提交比 41:3
创建时间 2018-04-16
最后提交 2018-12-09
仓库体积 372KB
在线试玩 http://yogthos.net/graviton/graviton.html

作者背景值得多说一句。yogthos 是 Clojure 圈的老熟人——Luminus 框架的作者,《Web Development with Clojure》的作者,正经的资深开源开发者。这个游戏是他 2018 年参加黑客松时和朋友(Clojure 咨询师 Daniel Compton)捣鼓出来的,2018 年 12 月提交完最后一笔之后就再没动过。八年过去,仓库 0 个开放 issue,在线版至今能玩,物理一点没坏——引力这种东西,写对了就不会过期。

⭐24 看着寒酸,但请注意它的际遇:一个黑客松玩具,靠口口相传攒了 24 颗星,然后被同一条 HN 爆帖召回大众视野。这类"已完成、已验证、无人认领"的仓库,恰恰是二创者最好的矿。

这游戏是什么

一句话说清:你是一艘没有引擎的飞船的飞行员,唯一的移动方式,是借行星引力把自己甩出去。

规则三行讲完。每关一张星图:蓝色星球是起点,绿色星球是终点,中间散布着其他天体。按住起点星球拖拽——拖的方向决定发射角度,拖的距离决定动力大小,拖动过程中有一条虚线实时预览轨迹。松手,发射。然后你就彻底失业了:引擎不存在,中途无法修正,引力接管一切。擦着某颗行星的引力井飞过,轨道被弯成一道弧,甩向目标——算准了,降落在绿色星球过关;算错一点,撞上天体或者飞出场外,关卡重开,零惩罚。

flowchart LR
    A["读星图<br/>蓝色起点 · 绿色目标"] --> B["拖拽瞄准<br/>方向定角度 · 拉距定动力"]
    B --> C["松手发射<br/>虚线只预览头几秒"]
    C --> D{"引力接管<br/>轨道被弯成弧线"}
    D -- "擦边借力" --> E["命中绿色星球<br/>过关"]
    D -- "撞上星体 / 飞出场外" --> F["坠毁<br/>零惩罚重开"]
    F --> B
    E --> G["下一关<br/>新星系 · 新谜面"]
    G --> A

把它和周末爆火的 Hole Punch 摆在一起看更有意思。两者共享同一套物理(万有引力弯曲弹道),但控制点完全不同:Hole Punch 是发射前造引力场——你往星图里" punching "黑洞、给黑洞加减质量、拖动位置,用环境改造给飞船铺路;Graviton 是发射前定初速度——环境一个字不能改,你只能选择怎么把自己扔出去。前者是排兵布阵的上帝视角,后者是高尔夫开球,一杆定音。HN 评论管 Hole Punch 叫 "Space Golfing"(太空高尔夫),其实这个词用在 Graviton 身上更贴切——它就是字面意义上的:一杆进洞,杆是引力。

为什么上头

这条机制轴能在 2026 年的 HN 上把几百号工程师摁在椅子里,靠的不是怀旧滤镜。拆开看,它踩中了四个点:

第一,发射后撒手的悬念感。所有轨迹类游戏的共同设计是:决策在发射前,体验在发射后。你按下发射的那一刻,物理结果其实已经注定,但你还是会盯着小船拐过第一道弧线时屏住呼吸——因为这几秒钟浓缩了你前面三十秒的全部盘算。Hole Punch 评论区有人形容它 "powerfully 'just one more round'",有人坦言"我需要拿回我的周六晚上",说的都是同一个东西:结果的不确定只维持几秒,但投入是预先付清的,你不可能不看完。

第二,"差一点"的即时反馈。Graviton 的虚线只显示头几秒的轨迹,后面的路要靠你在脑内做引力积分。于是每一次坠毁,误差都是具体的:动力多了半格、角度偏了三度、没算到第二颗行星的扰动。误差具体,修正就有了方向,"再来一局"就成了最廉价的学习行为。坠毁零成本、重开零等待,挫败感来不及积累就被下一杆冲掉了。

第三,现实知识直接迁移。引力弹弓、轨道力学,这是 KSP 玩家、科幻迷、物理系学生盘里现成的肌肉记忆。HN 评论区一水儿的"gravity assist maneuver 一直让我着迷""这让我想起当年的 Gravitee"。一个玩法如果能借到现实知识的力,玩家第一次上手的成本是负的——他是带着快感预期进来的,你要做的只是别把教程做太长(评论区对 Hole Punch 最高的一条称赞是"我从没那么快跳过一篇教程,这是夸奖")。

第四,关卡即谜题的"啊哈"时刻。Graviton 每关就是一道几何题:哪些行星是助力、哪些是陷阱、该从哪个方向切入引力井。解法是"想出来"的,不是"磨出来"的——想通的那一瞬间多巴胺给足,想不通换一关也不丢人。这跟合成消除类的"磨"是两种上头,后者留人靠时长,前者留人靠聪明感。

技术拆解

这个仓库最动人的地方是它的体量:372KB,含素材。剥开看,游戏本体就是 src/graviton 下四个 ClojureScript 文件:core.cljs(4.3KB,主循环与交互)、physics.cljs(2.6KB,物理)、levels.cljs(2.8KB,关卡数据)、state.cljs(状态管理)。

物理核只有 2.6KB,是全仓库最值得抄的部分。每个天体对飞船施加万有引力 F=G·m/r²,逐帧把加速度累进速度、速度累进位置——标准欧拉积分,二十行代码封顶。没有碰撞反弹,没有轨道修正,没有任何花活,全部游戏性押在这个最简模型上。这恰好证明了一件事:引力玩法的技术门槛约等于零,门槛全在关卡设计的手感上。你甚至不需要完整复刻 Hole Punch 的功能,先把这个 2.6KB 抄走,二十分钟后你就有了一个能弯轨迹的沙盒。

levels.cljs 证明"关卡即数据"。每关就是一张天体表:位置、质量、半径,外加一个目标点。加一关不写一行代码,填表就行。这对想变现的人是关键性质——"每日一关"、关卡编辑器、UGC 工坊、难度分级包,全部建立在数据驱动的关卡格式上。八年前的黑客松团队无意中把现代运营型小游戏的地基打好了。

技术栈:ClojureScript + Pixi.js 渲染 + Figwheel 热重载(README 里的开发命令就是 lein figwheel,改一行代码浏览器即时刷新)。你不会 Clojure?完全不影响——这个仓库给普通开发者的启示恰恰是"栈不重要":物理核 20 行、渲染交给 Pixi.js(或 Phaser/Kaboom)、关卡一张 JSON 表,用你最熟的 TS 搬一遍,三天封顶。

可直接复用的三件组件:① 引力积分核(2.6KB 照抄即用);② 拖拽瞄准 + 轨迹预览——这是愤怒的小鸟验证过的手势,天然适配触屏;③ "坠毁即重开"的关卡状态机,配上 Undo/Reset 两个按键就是完整闭环。

变现观察

仓库本身零变现痕迹:没有广告位、没有付费页、没有 itch.io 页面,README 短得像张便签。它就是个黑客松玩具加作品集页面——八年前的产物,逻辑上也不该有变现。

但这条机制轴的商业证据一点都不缺,而且就在这条 HN 帖子里:

一句话总结:这条轴的需求刚被 HN 现场验货,供给端却只有一个八年前的开源玩具和一个不打算开源的爆款。窗口是开着的。

给我的灵感

灵感一:做"开源版 Hole Punch",蹭正在开着的热度窗口(流量优先)。Hole Punch 不开源,但需求侧已经沸腾:帖子里有人外链作者的 physics.js 画解空间图,有人求排行榜,有人求移动端适配——全是没人接的需求。做法:拿 Graviton 的物理核换成"造洞"交互(点击按住长出黑洞、上下键加减质量、拖动改位置,操作抄 Hole Punch 的说明书即可),二十关加"燃料用量计分",部署在 GitHub Pages,标题就叫 "an open-source Hole Punch",往 HN 和 r/WebGames 一发。MVP 一到两周。变现:页面广告 + itch.io 打赏,这个量级的流量本身就是收入,开源属性还会给你带来 PR 和 Star 的二次传播。

灵感二:触屏弹弓 + 激励视频(最稳路径)。这条 HN 帖暴露的最大痛点是移动端:一致吐槽手机上没法玩,作者自己承认"the mobile sucks"且连台测试机都没有。而 Graviton 的拖拽瞄准天然就是触屏手势,这是原版的先天优势。做法:TS + Phaser 复刻,二十关 + 每日关,失败看广告重试,走微信小游戏或 CrazyGames 分成。MVP 两到三周。这个组合拳(弹弓手势 + 关卡数据化 + 广告钩子)是小游戏变现的标准答案,物理核已经有人替你写好了。

灵感三:每日一关 + "燃料榜"(钩子层)。这条帖子里呼声最高的功能请求是排行榜:"想看分数分布(质量/黑洞数/耗时),像 Zachtronics 那样"。把它移植过来:全网每天同一张星图,比谁用的动力少、谁用的杆数少,成绩一天一清零。每天解锁一关制造回访习惯,燃料榜制造攀比,难度曲线照着 Hole Punch 的后期关卡抄(信标、禁洞区、无燃料飞船,它已经把关卡机制测好了)。变现:免费引流层,把玩家导去你的付费续作或订阅制谜题包——Wordle 到 NYT 的路,小游戏都认识。

上手

最后说句实话。这个仓库的 Star 数是 24,八年没人给它加过一行动力,但它今天比绝大多数千星仓库都更值得打开——因为它把"小而美"三个字压到了极致:物理 2.6KB,关卡一张表,协议随便用,玩法刚上头条。上头的从来不是代码量,是那条被引力弯出来的弧线;能变现的也从来不是仓库,是你从这条弧线里看出来的、属于你自己的那一杆。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入