加载失败
这是一款可在浏览器里玩的 roguelike,标题里的 Xs of Y 指它每一局都会自动生成不同名称。项目大约 4k LoC,由作者自制的 let-go(一个 Clojure-like 编程语言)写成,核心思路是每个 tick 重算整张世界状态,并借助 persistent data structures 保持性能。评论里把它放在 Brogue(一个以 ASCII、光照和视线效果著称的 roguelike)与 Noita(一个以物理连锁死亡和高挫败感闻名的 roguelike)的谱系里理解,因此讨论同时围绕美术/机制致敬和逆向成长曲线展开。浏览器端又牵涉 cross-origin isolation(跨源隔离)和 wasm(WebAssembly)兼容问题,所以很多人实际遇到的首先是 Safari 报错、怪物不动或致命 bug,而不是完整的游戏体验。
作者说明这不是普通的游戏脚本,而是用自己做的 let-go(一个 Clojure-like 编程语言)写出来的。它每个 tick 都会重算整个世界状态,但靠 persistent data structures 仍然保持可用的效率。作者还说这更像一个 tech demo,而不是完整成品。评论里有人单纯夸语言名很酷,也有人开始追问这套实现的写法和思路。
不少人一上手就被秒,或者卡在第一层,甚至还抱怨需要先按 i 才能把背包里的 dagger 和 armor 装上。作者解释这种手感本来就受 Noita 启发,想做出那种“开局脆、后期强、最后照样会死”的逆向成长曲线。有人把这种随机暴毙和混乱气质联想到 Dwarf Fortress、NetHack,另有人则觉得这正是“真 roguelike”的味道。对新手来说,这套设计显然既残酷又容易和 bug 混在一起。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10] [来源11] [来源12]
浏览器端的问题也很多:Safari 直接报 Interactive input unavailable,并提示缺少 cross-origin isolation,得配合 coi-serviceworker-js。另一些人看到的是怪物不动、时间像被冻结,日志里 goblin 一直攻击却没有玩家动作,感觉像是回合系统坏了。作者后来承认至少部分问题是 bug,并强调这还不是 finished game;还有人补充某个 instant kill 已被最近的 commit 修掉,另一个问题则出在 let-go stdlib。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8]
最热的争论集中在它到底算不算对 Brogue 的致敬还是过度借鉴。有人指出色彩、ASCII、动画和整体观感都太像 Brogue,应该明确署名;也有人认为 Roguelike 本来就是从 Rogue 一脉演化来的,名字里带 like 已经说明来源。作者本人回应说确实参考了 Brogue,但做了自己的改动,并会在 README 里补链接。评论里还顺手延伸到 Mario-like 这种命名是否也应该被接受。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10] [来源11] [来源12] [来源13] [来源14] [来源15]
有评论直接质疑,这种小型游戏 clone 现在是不是完全可以交给 Claude code 生成,一边怀疑其价值,一边把它归为典型的 LLM/vibe-coded 周末项目。反方则说它至少是个 prototype,像 game jam 作品一样值得实验,而且作者做这门语言从 2021 年就开始了,不是纯粹套壳。还有人承认 docs 和部分代码确实很像 AI 辅助生成,但也有人把它看成对解释器的 fuzz test,觉得小实验本来就该存在。整个争论本质上是在问:HN 应不应该继续容纳这种“能跑但不新”的项目。
[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8]
let-go: 作者自制的 Clojure-like 编程语言,这个游戏和部分 bug 都与它的实现有关。
Brogue-like: 受 Brogue(以 ASCII、颜色和视线效果著称的 roguelike)影响的子风格。
Noita: 一款以高死亡率、物理连锁事故和逆向成长曲线闻名的 roguelike。