<!-- title: 《Craft》几千行C，装下一座世界 -->
<!-- domain: games -->
<!-- repo: fogleman/Craft -->

# 《Craft》几千行C，装下一座世界

每个想入局游戏变现的个人开发者，心里都藏着一个Minecraft梦，然后马上被吓退：10年开发、无数人力、几亿行代码。但GitHub上有个叫 **Craft** 的仓库告诉你：把"Minecraft"这个名字拆掉，只留下“方块世界”这个内核，一个人用几千行C语言就够了。它不打算复刻Minecraft——没有生物、没有合成表、没有红石——它只回答一个问题：**一个由数学生成的、可以随意挖掘和建造的方块世界，最少要多少代码？**

答案是：少到你能一口气读完。

## 一、仓库档案

| 项目 | 情况 |
|---|---|
| 仓库 | [fogleman/Craft](https://github.com/fogleman/Craft) |
| Star | 约1万（据仓库页面） |
| 语言 | C（渲染用 OpenGL，据仓库页面） |
| License | MIT（据仓库页面） |
| 作者 | Michael Fogleman，个人开发者 |
| 状态 | 老牌项目，近年基本停更，属于“写完就成名”型仓库 |

作者 Michael Fogleman 是GitHub上著名的“周末项目狂魔”，图形学方向的仓库几乎被他做成了个人系列：软件光追器、NES模拟器、2D绘图库……Craft 是其中最有名的一个。注意他是**纯个人开发者**，没有公司背景、没有团队页，这正是这批“小而美”仓库最值得研究的地方——一个人，一个编译器，一个让你玩了一下午的世界。

## 二、这游戏是什么

一句话：**按下按钮，噪声函数长出一座有山有树有洞穴的岛屿；左键挖、右键放，从零盖出你想要的一切，还能局域网联机给朋友看（据仓库README）。**

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

```mermaid
flowchart TD
    A[输入一颗种子] --> B[噪声函数生成地形<br>山脉·洞穴·树木·水]
    B --> C[落地探索<br>爬上山顶 / 钻进矿洞]
    C --> D[左键挖 · 右键放<br>方块进背包 又变成墙]
    D --> E[设计建造<br>小屋 / 高塔 / 地下基地]
    E --> F[昼夜更替 光影流转<br>退后三步看自己的作品]
    F --> G{满意吗?}
    G -->|想换个风景| H[换一颗新种子]
    H --> B
    G -->|想盖得更大| C
    G -->|喊朋友来看| I[局域网联机<br>同一座世界一起盖]
    I --> C
```

这个循环的精妙之处在于**没有终点**。传统的游戏循环是“目标→达成→结算→再来一局”，而Craft这类沙盒的循环是“生成→改造→欣赏→再生成”——系统从不告诉你该干什么，但每一颗新种子都自动帮你清空存档、重置欲望。地形是数学算出来的，意味着**世界的供给是无限的**，而你手里的工具（挖和放）永远只有两个。极简的操作，配无限的内容，这就是沙盒品类七十亿美元的底层配方。

## 三、为什么上头

别看它代码简陋，上头机制一个不少，而且每一条都能对应到具体实现：

**1. 即时反馈：一次点击，世界永久改变。** 左键点下去，方块消失、露出一块新面；右键点下去，方块出现、挡住一段视线。没有任何冷却、任何判定延迟。行为心理学里最强化行为的，就是“动作→结果”间隔最短的那类反馈——Craft把间隔压到了一帧以内。

**2. 进度感：从平地到城堡，全是你自己。** 新世界给不了你任何东西（背包几乎是空的），但挖三分钟你就有了一堆土，堆半小时就有了挡风的小屋，玩一天就有了带瞭望塔的基地。这套进度不靠系统发奖励，靠**世界的物理残留**——你挖过的坑、盖过的墙都留在那里，进度是可视化的，这比任何经验条都直观。

**3. 随机奖励：每颗种子都是一张盲盒。** 同样的噪声参数，换一颗种子，山形、矿洞分布、水岸线全变。你永远不知道下一颗种子长什么样——翻过这座山后面是平原还是峡谷？这就是最原始的“开箱”心理，只不过开的是地形。很多人玩Craft的真实行为是：**连续生成几十个世界，只为了找一块“看着舒服”的地**，游戏还没开始，乐趣已经发生。

**4. 策略深度：约束来自地形本身。** 没有敌人，但地形就是谜题：在悬崖上盖房子要先解决“怎么上去”，在湖边盖要解决“怎么不漏水”。挖矿洞要考虑塌方式的挖掘顺序。系统没给你出题，是**世界结构本身在出题**——这是沙盒品类最高明的设计转嫁。

**5. 社交攀比：联机一小步，欲望放大器。** 据仓库README，Craft自带简单的联机模式——起个服务器，朋友连进来，同一座世界一起挖一起盖。一个人的建造是自我表达，两个人的建造就有了比较：“你这塔怎么歪了”“看我这个地下宫殿”。**分享欲是沙盒游戏二次传播的发动机**，Minecraft当年在YouTube上的病毒式传播，烧的正是这把火。

## 四、技术拆解

这个仓库对开发者的价值，比游戏本身大得多。它相当于一本**摊开的“体素引擎入门”教材**，每个模块都小到能单独抄走：

**1. 噪声地形生成（最值得抄的模块）。** 整个世界的山脉，来自经典的Perlin噪声——一个连续的伪随机函数，输入坐标(x,z)，输出一个高度值。相邻坐标的输出是连续的，所以地形是连绵的山而不是刺猬；同一个种子算出的结果处处相同，所以世界可以“要用再算”，**不必存整个世界，只存一颗种子**。这一招对任何需要随机地图的游戏都通用：横版关卡、爬塔地图、roguelike房间布局，都可以换成“种子+函数”。

**2. 区块（Chunk）管理。** 世界不是一整块，而是切成了一个个立方区块，玩家走到哪，哪附近的区块才被生成、被渲染。这是所有体素游戏的地基，也是“无限世界”能在几千行代码里成立的唯一原因——**世界无限，内存有限，靠的是按需生成**。

**3. 射线拾取：你“摸到”的方块是怎么找的。** 从相机位置沿视线方向一步一步采样，碰到第一个非空方块就算选中。没有物理引擎，没有碰撞体，一段循环就搞定了“准星指着哪块”的问题。任何3D拾取交互（编辑器、建筑工具）都能用这个思路。

**4. 手写渲染管线。** Craft没有用任何游戏引擎，直接对着OpenGL写：着色器、顶点缓冲、纹理图集。光照是简化过的环境光遮蔽思路，配合昼夜循环做时间流逝的氛围。想学“游戏到底是怎么画出来的”，比啃图形学教材直观十倍——**因为每一行代码都在为一个“能玩”的目标服务**。

**5. 极简联机。** 据仓库README，它带了多人模式的示例和服务器端的启动方式。规模当然不能跟真正的联机服务比，但“多人在同一张地图上改方块、改动同步给所有人”这个骨架是完整的。你做任何小型联机游戏（答题对战、你画我猜、合作解谜）都可以从这个量级起步，而不是上来就啃网络同步的深水区。

**6. 存档即种子。** 最优雅的一点：世界的“存档”本质上是种子加玩家改动。新玩家进世界的成本被压到了一个字符串。这个“**状态极小化**”的思路，放到网页游戏里就是URL里带个参数就能分享你的关卡——零服务器成本的分享机制。

可直接复用的组件清单：噪声地形生成器（换语言都能抄）、区块管理系统、射线拾取函数、“种子即存档”的存档设计。这套东西拼起来，就是任何“方块类”或“程序生成类”项目的地基。

## 五、变现观察

先说实话：**Craft本身没有任何变现痕迹**——README里没有广告、没有众筹链接、没有商店页。它是典型的“技术名片”型开源项目，作者赚的是声誉和行业机会，不是现金流。但对想变现的你，这个品类周边的路径反而是所有品类里被验证最充分的：

- **移动端换皮+广告内购**：App Store和Google Play上常年盘踞着大量“方块世界”类App，套路就是开源体素引擎换题材，插屏/激励视频广告为主，皮肤和地图内购为辅。门槛低、竞争也狠，但需求是真的，下载盘子巨大。
- **从模组长成付费游戏**：Vintage Story是从Minecraft模组起步、最终做成独立付费游戏（约20美元档、常年稳定销量）的活案例——说明“方块生存”这个内核愿意有人反复付费，只要你在某个维度做得更深（它是农耕和冶金深度）。
- **教程即产品**：“手写一个Minecraft”是图形学/游戏开发教学的常青题材，YouTube上这类视频靠播放和赞助活着一整批频道；国内B站、掘金上“从零写体素引擎”也是流量密码。**你复刻Craft的过程，本身就是可以卖的内容**——这是开源项目变现里最被低估的一条：仓库免费，过程收费。
- **itch.io免费+打赏/付费**：网页化的轻量方块玩法（见下节灵感）在itch.io上有稳定的“小玩具”付费档位（3-8美元或自由打赏），适合当副业试水。

一句话总结路径：**仓库学技术 → 网页版试水（打赏/广告）→ 移动端换皮（广告+内购）→ 有独到设计就上Steam卖深度**。

## 六、给我的灵感

**灵感一：网页版“一口世界”，MVP约1-2周。**
用Three.js做一座16×16的悬浮小岛：噪声生成地形、左键挖右键放、localStorage自动存档、按钮一键换种子。砍掉联机、砍掉昼夜、方块控制在五六种。这就是一条可以直接发itch.io和朋友圈的玩具，主打“通勤路上盖个小岛”。变现走免费+打赏，火了再挂轻量广告。Craft证明这个玩法的最小可行规模是几千行，你用现成3D库只会更少。

**灵感二：每日种子挑战——把Wordle的钩子嫁接到沙盒上，MVP在灵感一基础上加约1周。**
全网每天同一颗种子、同一个目标：“今天的地图里，10分钟内谁能挖到最深？”“谁能盖出最高的塔？”结束后生成一张可分享的成绩卡（几行表情+数字，Wordle同款传播机制）。这一层改动极小，却同时吃到了**随机奖励（每日新种子）和社交攀比（成绩卡刷屏）**两个上头引擎，天然适合移动端：插屏广告+去广告内购，跑的是被扫雷类、数字类小游戏验证了无数遍的模式。

**灵感三：把“挖和放”塞进别的骨架，MVP约3-6周。**
Craft最值得抄的不是方块，是“**玩家用两个动作对抗一个随机生成的世界**”这个句式。套进别的品类：挖方块+塔防（白天挖矿造墙，夜里守怪潮）；挖方块+爬塔roguelike（每一层的房间要自己挖出来才能通过，挖法决定难度）；甚至挖方块+文字放置（离线时你的矿工替你挖，回来收获——接上放置品类的长线留存）。设计上多一个维度，就有资格上Steam抢先体验或者itch付费档，这是从“换皮”往“作品”走的路线。

## 七、上手

- 仓库：<https://github.com/fogleman/Craft>
- 注意：**没有网页Demo**，这是桌面端项目，需要拉代码本地编译（据仓库README，需准备OpenGL相关的编译环境），Windows/Linux都有构建说明；README里还附了演示视频，动手前先看视频确认“就这？就这么点东西就好玩了？”的真实观感。
- 阅读建议：先玩十分钟，再对照`noise`相关的地形生成代码看——你会清楚地看到“眼前的这座山”是怎么从一行数学里长出来的。这个瞬间，比任何图形学网课都值回票价。

## 结语

Craft的启示不是“你也能做个Minecraft”，而是：**一个好玩的世界，内核小得惊人**——一个噪声函数、两种操作、一个会变化的光源。个人开发者最容易犯的错，是把力气花在复刻大游戏的完整度上，而不是找到那个几百行就能跑起来的“上头内核”。先把内核跑起来，玩家自然会替你把游戏玩成一千种样子。

下一次打开Craft，别急着挖矿——先按住那个换种子的按钮，看十座不同的山从噪声里长出来。那是这个仓库真正想卖给你的东西：**无限的世界，和一个属于你的起点。**

> [!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学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
