今天是挑战的第 17 天。

写代码的时候,有时候会觉得自己是个建筑师,有时候像个修表匠。但今天,感觉有点不一样—— 今天,我感觉自己像个“上帝”。

因为我花了一天时间,手搓了一个【星球生成器】。

01 赛博时代的“创世纪”

这不是一张静态图,而是一个活生生的、正在运转的星球。

我给它起名叫 Kepler-186F,致敬那颗距离地球 500 光年外的“地球表亲”。

在这个模拟器里,没有复杂的物理引擎,只有纯粹的数学之美。通过 Terrain Matrix(地形矩阵),我把大自然的鬼斧神工浓缩成了几个可以滑动的参数:

Water Level(海平面):轻轻一拖,沧海变桑田。

Amplitude & Frequency(振幅与频率):决定了是崇山峻岭,还是广袤平原。

Detail (Oct):噪波的细节,不仅是星球的皮肤,更是它的指纹。

02 这是一个有“灵魂”的星球

如果只是生成地形,那也就是个大号的贴图球。但我希望它更鲜活一点。

注意看左下角的 Civilization Status(文明状态):

Population: 100.7k Souls

是的,我接入了一个简单的增长模拟算法。看着 Time Operational 的秒数跳动,看着 Active Nodes 慢慢点亮,看着人口数字上涨,你会产生一种奇妙的错觉:

在那些像素构成的陆地上,真的有一群微小的数字生命在繁衍生息。

03 给游戏开发者的“福利”

做这个工具的初衷,除了好玩,其实也很实用。

很多做独立游戏、跑团(TRPG)或者写奇幻小说的朋友,最头疼的就是画地图。

我在右侧面板加了一个 Map View 功能。一键点击,就能把当前的球体地形展开,生成一张可下载的平面投影地图(JSON/图片)。

下一款爆款开放世界游戏的地图雏形,说不定就藏在你随机生成的这一次点击里。

开发感悟

从 UI 的科幻配色,到星球边缘的那一抹大气层蓝光,今天的开发过程非常享受。

编程不仅仅是逻辑的堆砌,它也可以是浪漫的。用代码构建宇宙,用算法模拟生命,这大概就是理工男/女独有的浪漫吧。

下一步计划: 我打算加入更复杂的气候系统,甚至让不同的星球之间建立贸易航线(右侧菜单我已经预留了 Orbital Trade Routes 的接口😎)。

如果你也想当一次“造物主”,欢迎在评论区留言,告诉我你想生成一个什么样的星球?是全是海洋的“水世界”,还是布满熔岩的“炼狱星”?