反向扫雷

查看原文 HN 讨论

文章摘要

Sunflowers(向日葵)是一款浏览器逻辑解谜游戏,作者 pompomsheep 以「Reverse Minesweeper(反向扫雷)」为名发到 Show HN,拿到 267 分和 96 条评论。

游戏规则一句话说得清:格盘上的数字提示一开始就全部可见,数字表示它周围八格里有多少朵向日葵;你的任务是把向日葵种到正确的位置上,同时用叉号标记确定没有花的格子。操作上单击打叉、双击种花——这个设计后来被反复讨论。每局有 0/3 的错误额度(类似 sudoku.com 的三次机会),有计时器、提示灯泡按钮、铅笔(草稿)模式,以及可以按 ID 检索的固定谜题。棋盘尺寸从 6×6 到 14×14,难度分 Beginner / Easy / Medium / Hard / Extreme / Insane 六档,另有每日谜题(Daily puzzle)和每日大师题(Daily master)。作者反复强调的一条核心承诺是:永远不需要猜

这个游戏最值得技术读者细读的其实是它公开的难度系统文档。作者写道,每一个生成出来的盘面都会被「同一套驱动游戏内提示的逻辑引擎」端到端求解一遍——引擎像一个谨慎的人类那样,一次走一步、每次都选择最简单的可用推理,并记录这个盘面到底逼迫它用了哪些技巧。技巧一共五种,每一档难度以它所要求的最难那一种命名:

游戏还给出 0~100 的分数,把盘面定位在它所属档位的分段内(Easy 4-19、Medium 20-39、Hard 40-59、Extreme 60-79、Insane 80-100),分段互不重叠,所以 62 分一定真的比 40 分难。定位依据各档不同的子指标:Easy 看解法有多宽松容错,Medium/Hard 看被迫使用的 subset 或 overlap 步数,Extreme 看 what-if 链的总深度而非次数(因为 1 步的 what-if 玩起来像 overlap,4 步的级联则完全是另一种东西),Insane 看每个 either-way 枢轴两条分支的合计工作量。预计用时是直接把各类工作加权求和:每格常规标记约 1 秒、发现每个 basic 推理约 2 秒、每个 subset 约 14 秒、每个 overlap 约 26 秒、每个 what-if 约 15 秒加每步 10 秒、每个双链 either-way 约 35 秒加每步开销,权重都放在源码的 EST_TIME 里。此外 0 提示格遵循 ZERO_CLUE_RULES:Easy 和 Medium 带一到两个 0、Hard 恰好一个、Extreme 和 Insane 没有;生成器在剪枝时保护必需的 0、优先剥掉多余的、不够时补一个,仍然违规的盘面直接拒绝。页面还开放了一组难度调参滑块,每次点击最多尝试 90 个候选盘面,没有合适的就给出最接近的并在棋盘下方打标记,提示玩家把滑块放宽或换更大的棋盘。

HN 评论精华

名字之争:这到底哪里「反向」了

这是整场讨论投入最多口水的话题。hyperhello 起头:「我不明白这怎么算反向扫雷,它就是把炸弹换成花的扫雷。」作者 pompomsheep 承认名字可能不是最佳描述:「我的本意是所有线索开局就可见,而不是探索式地揭开;主要区别在于全部线索可见把它从『揭开并反应』变成了『搜索与演绎』的逻辑风格。」

kevincox 给出了最中肯的分析:扫雷里你从一片黑暗开始探索并避开炸弹,这里你从全部提示可见开始并放置炸弹;但实践中两者非常像,因为「确定炸弹在哪以免点到」和「确定炸弹该放哪」是完全相同的逻辑,唯一的功能性差别就是提示是一开始就给还是需要挖出来。imtringued 更刻薄:「反向扫雷的意思应该是左键点炸弹、右键点空格。如果你左键点空格右键点炸弹,那字面上就是扫雷。」ryukoposting 一句话打圆场:「因为『逆否命题扫雷』不够顺口。」saghm 提议叫「加速版扫雷」。kelnos 则站作者这边:给了数字提示、要求你放置而不是清除地雷,这挺「反向」的。amelius 反驳说真正的反向应该是给定炸弹让你填数字。

toxik(自称「我玩过大量扫雷」)提出了一个理论性区分:这个变体可以有多解,经典扫雷不会——想象一个只有一个 1 其余全空的盘面,这里有八种解;正因这种歧义性,搜索空间比经典扫雷大得多。作者立刻接话说 Sunflowers 在所有难度下始终只有唯一解,并主动约这位资深玩家详聊,想搞清楚为什么老手会感觉不到唯一性。toxik 后来确认注意到了唯一解,并给出了一份很扎实的反馈清单:Insane 并不比 Hard 难,常常反而更简单;铅笔模式在获胜时自动提交太宽容了;暗色模式对比度很糟;希望有玩家档案和统计;随机 Insane 玩起来像是在 50 个固定关卡里循环,经常认出重复的,Hard 则不会;有些谜题好像没人解过,因为自己的用时总是恰好等于全球平均;想知道有多少人解出过某题、以及自己解没解过;整体很棒,希望能做成 App 或可加书签的形式。

curious_ralts 附议铅笔模式的问题:有些序列需要大量铅笔标记才能找到矛盾条件,结果经常在铅笔模式下意外获胜,感觉很糟糕、像作弊——「我只是碰巧铅笔画出了正确答案,但并没有按预期方式解出来」。他还报告反馈表单不工作。

难度曲线:Insane 太简单

多位玩家给出同一条反馈。Kuinox:「我直接跳到 Insane 一次通关,太简单了。」作者随后上调了 Insane 的难度并请他复测,kybishop 回复说仍然远远太简单,「最高难度应该是真的很难,我三分钟内还是解出来了——但我超爱这个点子」。作者坦承自己在测试高难度上很吃力:「因为超出了我自己的水平,哈哈。」vl 建议做更大的棋盘(哪怕需要滚动和缩放):「毕竟扫雷在最大盘面上才最有意思。」0x1ceb00da 从 Medium 跳到 Insane 也没感到难度提升,还提出一个有趣猜想:谜题是不是 AI 设计的?就像 ARC-AGI 的题对人类很平凡但对 LLM 极难。mcmoor 的体验相反:Insane 也轻松解出,但 Extreme 需要全盘逻辑、差点放弃。

「我必须猜」的争议

yammajr 贴出一张截图说自己不得不猜,如果知道总雷数就不用猜了。三位读者迅速指出他漏看了逻辑步骤:Steve6 详细拆解——第 1 列第 5 行的 2 已经有两朵花了,所以第 2 列第 4 行的空格必须为空,因此上面那格必须是花、角上必须是空,不需要猜。MK2kTepix 各自指向同样的强制解。yammajr 随后编辑承认自己错了。

ltsSmitty 也报告了类似的「信息不足」感受,作者回应说始终存在可以完全推出来的下一步,灯泡提示会指出来(但坦承提示系统还不完美),并请他下次卡住时截图。tgsovlerkhgsel 给出了实用建议:任何时候你觉得必须猜,就用提示功能;高级难度本质上就是「猜一个然后用铅笔模式验证它导向有效解还是矛盾」。Retr0id 补充说经典扫雷也可以实现成保证无歧义可解的,指向 Simon Tatham 谜题集里的实现。

同类作品的大盘点

评论区几乎把这类「全线索可见」谜题的族谱理了一遍。omoikaneJaxan 都指出它和 Simon Tatham 谜题集里的 Mosaic 高度相似,Jaxan 还列出了 Mosaic 在世界各地的一长串别名(ArtMosaico、Count and Darken、Fill-a-Pix、Nurie-Puzzle、Voisimage 等)。Braini 提到 Picture Enigmas 的 squared 模式,kevinwang 提到 Steam 上的 Proverbs,aleph_minus_one 顺藤摸瓜推荐了同一开发者的《Mosaic of the Strange》(并调侃「如果你喜欢阴谋论、又把难度调到最高,HN 读者应该会觉得有意思」)。mamonoleechi 推荐了自己最爱的扫雷变体 mamonosweeper。sickcodebruh 提到几个月前 HN 上分享过的 Dragonsweeper,「彻底把我和我太太钓住了,最后不得不约定和它分手」。amanzi 认为概念上很像 0h h1(也叫 Binairo / Simon Tatham 集里的 unruly)。sneela 客气地指出 puzzlemadness.co.uk 上似乎早有同类玩法。Kuraj 贡献了本帖最欢乐的一条:「MSN Messenger 里就有这个!」——他和朋友轮流玩,炸弹会实时揭开,漏掉一颗雷就换人;游戏结束时会「骂你 slut」,因为他朋友的 MSN 是瑞典语版,而那是瑞典语里「结束(slut)」这个词。(bonoboTP 指出那其实就是普通扫雷,Kuraj 承认自己是被「挖出地雷而非避开地雷」这点带偏了。)

交互设计争议:单击该做什么

bonoboTP 报告说单击放的是叉不是花,他把谜题解对了却全填成叉,困惑于为什么不算通关,建议把单击改成主要操作(种花)。rezonant 反驳:正因为只有三次错误额度,误放一朵花要扣一次机会,而误放一个叉是免费的,所以他很庆幸种花需要双击——太容易误触屏幕烧掉一次机会了,如果是最后一次会非常挫败。jeremyjh 用同样逻辑补充:叉号相当于注释,是你判定该格不可能有花时才标的。

jader201 提出了另一条路:干脆不计错误,允许随便放,只是不完成就不算解出——「Simon Tatham 的大多数谜题就是这么做的,效果很好」。kelnos 反对:那样更简单了,可以不动脑筋地试错点下去,玩法很无聊。jader201 回应两点:一,如果能暴力破解出解,那通常说明谜题设计有问题;二,就算暴力可行,加个「提交」按钮就能解决(无效提交计一次错)。matsemann 补充说 Tatham 的谜题还有一个切换主副操作的功能,在这里也能用。amelius 报告了另一个体验问题:他解对了但显示「1 个错误」,却没告诉他错在哪里,很困惑。bonoboTP 最后强调这类游戏应该开箱即用地直观:「对大多数人来说这是打发时间的东西,不是还没确定喜不喜欢就要先研究一番的东西。」(Aardwolf 指出游戏是有教程可选的。)

其他反馈与花絮

convolvatron 说红框提示让他有点不适:如果程序每次都在你没想清楚时告诉你,那你的角色就只剩下推鼠标了。作者说正在让新手引导更宽容,Easy 及以上才启用三次错误上限。lioeters 建议把红框换成向日葵「摇头」表示「不行」,更可爱友好。itherseed 喊「需要暗色主题,我的眼睛!」作者回复说暗色主题藏在设置里(点左上角向日葵图标),会把入口做得更明显。mock-possum 报告 iPhone SE(iOS 26.5.2)上页面不滚动、谜题底部被截断。pillmillipedes 指出一个 QoL 问题:点数字自动填充邻格只对叉号生效、对向日葵无效,且对「0」提示也不工作;并预言「以你在 Steam 上看到的反应判断,你会收到一大堆来自不习惯长推理链的玩家的假 bug 报告」。LearnYouALisp 请求启用右键。graynk 希望默认进入每日谜题,并问原来的分享按钮去哪了。

Rexxargreazy 都问到谜题是怎么生成的(是否用了 Z3 之类的求解器),dyarosla 追问多个游戏各出两道每日谜题是怎么做到的,「不可能全手工也不可能全 AI」。tgsovlerkhgsel 给出通用答案:任何能程序化生成随机谜题的游戏,只要用日期派生的种子喂给确定性 PRNG 就行,不需要 AI 也不需要手工。dyarosla 认为理论上成立,但没有足够的启发式和约束就产不出好谜题。

ymolodtsov 借机感慨:「我喜欢 AI agent 让人可以这样试验不同的游戏概念」——他自己把围棋和俄罗斯方块合并做了个实验品。alex-moon 问作者有没有一个类似 NYT Games 的门户页面,好每天早上一个一个玩过去。ttmac 的评价大概最有代表性:「我真的很享受,不过也损失了不少工作时间。」