首页 › games › 《Sandspiel》一把沙子,撒出泼天流量

在所有能让人"再来一局"的机制里,最便宜的一种不是排行榜,也不是抽卡,是物理。一把沙子从指缝漏下去、在屏幕上堆出一个小小的坡的那一瞬间,上头就开始了。今天挖的这个仓库,把这件小事做到了浏览器里,代码全开源,Star 三千多,而它的作者只写了这一个游戏。

仓库档案

这游戏是什么

没有目标,没有关卡,没有敌人,没有输赢。打开就是一张空沙盘,底下排着一列元素:沙、水、火、石头、油、酸、火药、植物、冰(在线版的元素栏以试玩页面为准,还有病毒这类捣乱角色)。

然后你就开始撒料:

关键是:每一粒沙、每一滴水,都是逐格算出来的。这不是播放动画,是一台在你浏览器里实时运转的物理机器。这个品类的祖师爷是 Flash 时代的 Dan-Ball《Powder Game》,桌面端的传承者是开源的 The Powder Toy;Sandspiel 用 Rust + WebAssembly + WebGL 把这套老玩法重新做了一遍——加载快、手机能跑、画面干净得不像“祖传 Flash”。

它的核心循环画出来是这样的:

flowchart LR
    A["选一支元素笔刷<br/>沙 / 水 / 火 / 酸 / 火药"] --> B["往沙盘里撒料"]
    B --> C["WASM 引擎逐帧模拟<br/>流动 · 燃烧 · 腐蚀 · 冻结"]
    C --> D{"画面给什么反馈?"}
    D -->|"意外反应"| E["惊喜:原来还能这样"]
    E -->|"继续加料试反应"| B
    D -->|"符合预期"| F["作品成型<br/>火山 · 城堡 · 生态缸"]
    F --> G["截图 / 录屏分享"]
    G --> H["刷到别人更野的沙盘"]
    H -->|"不服,手痒"| A

玩家每回合只做一件事:撒料。系统每帧都在还你一幅画。而驱动“再来一次”的,是下面拆的这几层机制。

为什么上头

1. 因果链短到不存在。 笔刷落下的那一帧,沙粒就开始倒。从“我做了一个动作”到“世界给我反馈”,中间没有任何加载、没有回合等待。多巴胺走的是反射弧,不是审批流程。这是所有好手感游戏的共同底层,落沙玩具把它做到了极致——因为反馈不止是即时,还是连续的:你拖着手走,沙就跟着你流。

2. 涌现式惊喜,这是玩具类上头的发动机。 反应表就是一门化学课,但它从不发教材:你不会提前想到油会浮在水面上、火会顺着植物一路烧上坡、冰化了变水、水多了火药就哑火、酸蚀穿了池底一池子“化学废料”倾泻到下一层。每一次意外反应,玩家的内心都是同一句“哇,还能这样”。好的系统设计是让反馈超出玩家预期一点点——刚刚好到想立刻验证“那如果再加点……”。

3. 作品沉没成本。 沙盘是你的:你砌的城堡、你造的火山、你养的“烧了又长、长了又烧”的植物生态缸。玩到二十分钟,“再来五分钟就把这座塔封顶”的念头会自动出现。创造类玩具的留存不靠奖励,靠占有。

4. 十秒上手,十小时精通。 上手只需要一根手指拖动;但想造一个“云—雨—河—植物—焚烧—再生”的水循环系统,你得真正理解整张反应表。元素两两组合的空间是平方级的,精通的深度是玩法 longevity 的保证。

5. 图鉴收集欲。 社区里玩家互相晒的就是“全反应表解锁”——“我还没试过病毒配火药”本身就是一句让人手痒的话。这和卡牌游戏的收集欲同源,只是收集物从卡变成了物理规律。

6. 分享攀比。 落沙沙盘的 GIF 天生华丽:火在烧、水在流、沙在塌,随便录十秒都是素材。Reddit 和 Tumblr 上大家比的就是谁的沙盘更野——社交回流不需要设计排行榜,玩家自己会卷。

技术拆解

这套代码最值钱的地方,是它把“看起来很玄的物理游戏”拆成了三个能独立抄走的模块:

模拟层:细胞自动机。 世界是一个网格,每个格子存一个元素 ID,每帧按规则更新——沙往下掉、水往两边淌、火往上窜、反应按表查询。一个元素的实现通常就是一个更新函数加几条反应配对,完全数据驱动:加一个新元素基本等于加几行配置。这层跑在 Rust 里,编译成 WebAssembly(wasm-pack 工作流,据仓库说明)——百万格子乘 60 帧,纯 JS 会喘,WASM 跑出原生速度。这套 wasm-pack 的工程模板本身就值得扒下来。

渲染层:WebGL 一次画完整盘。 整张网格打包成纹理一次性喂给 GPU,调色板加微噪声让它看起来像手绘而不是像表格。对想学“用 GPU 画像素级模拟”的人来说,这是一个能跑通的极简样本。

UI 层:薄薄一层 JS。 笔刷、元素栏、存档、分享,全是外围,和模拟核心零耦合。模拟(WASM)/渲染(WebGL)/界面(JS)三层分离——这个架构搬去任何模拟类小游戏都成立。

可直接复用的组件清单:元素反应表(数据结构)、笔刷系统(半径/密度/概率撒料)、GIF 与截图导出、wasm + 前端的构建链路。把反应表一换,它就是生命游戏变体、流体玩具、烟花模拟器、病毒传播演示器——细胞自动机全家桶通用。

MVP 成本:Sandspiel 完整版打磨了数月,但它的核心循环其实是一个周末的量级——一个网格、两种元素(沙和墙)、几百行代码,就能让朋友玩上半小时。这也是落沙品类对个人开发者最友好的地方:上头感来自规则,不来自内容量。

变现观察

先说实话:这个仓库本身没有一分钱变现痕迹——无广告、无内购、无付费墙(据仓库与试玩页面)。它是典型的“为名不为利”作品。

但对想入局的个人开发者,它恰恰演示了这类项目的真实价值结构:游戏内的收入常常是零,游戏外的杠杆极大。一个刷屏的爆款玩具,是创意编程圈里的硬通货——简历上的黄金一行、接单时的作品集、技术演讲的门票。Max Bittker 后来的水族箱版续作 Orb.Farm(orb.farm)延续了这个个人名片。

钱在品类的别处被赚过,路径是清楚的:

抄作业的正确姿势:别抄它的免费,抄它的流量三件套——猎奇视觉、零门槛、可分享的动态画面。这三样决定了广告位该挂在哪里:分享出去的每一帧 GIF,都是你的获客入口。

给我的灵感

1.《火锅沙盒》——中式题材换皮。 把元素表整张换掉:牛油(油)、辣椒(火)、冰粉(冰)、毛肚(遇烫变色)、鸳鸯隔板(墙)。玩家搭锅底、下菜、看沸腾,视觉猎奇度天然拉满,传播钩子现成——“你敢往锅里倒酸吗”。实现路径:fork sandspiel,改反应表 + 贴图 + 中文 UI,MVP 约 2–4 周;变现:微信小游戏,激励视频解锁新食材包、看广告加速沸腾。

2.《SandPuzzle》——给玩具加一层目标。 固定初始盘面 + 有限元素预算 + 通关条件:“让三座柴堆全部烧起来,但不能烧到房子”“用 500 滴水在沙漠里养活一棵树”。这是把玩具变成可通关游戏的最低成本路径:一个关卡就是一个 JSON,评分就是像素统计。MVP 约 1–2 周;变现:itch.io 定价 3–5 美元,或者免费送前十章、后续章节内购。

3. 分享引擎改造——让 GIF 替你打广告。 Sandspiel 本身能存档分享,你可以更进一步:一键导出“带二维码的 GIF + 沙盘编号”,GIF 片尾固定一帧你的下一款游戏。这是《Hello Wordl》式“社交回流”的变体:每一张被转发的 GIF 都是一条广告。MVP 一周以内;变现:页面广告(AdSense/Carbon)加 GitHub Sponsors 打赏位。

上手指南

一句话收尾:落沙品类证明了小游戏的上头可以纯靠规则——不用美术堆料,不用内容海,一张网格、一张反应表,就够玩家把整个周末填进去。而这套规则,MIT 协议,随便你抄。

任务汇报

[!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学通信知识星球海报-扫码加入