地形生成
使用 Perlin / Simplex 噪声生成简单但观感自然的地形。
three.js · mrdoob/three.js
three.js 是一个 JavaScript 3D 图形库,项目目标是做一个易用、轻量、跨浏览器的通用 3D 库。根据 README,当前构建只包含 WebGL 与 WebGPU 渲染器,SVG 与 CSS3D 渲染器则以 addons 形式提供;仓库 topics 覆盖 WebXR、虚拟现实、增强...
Craft 是一个用 C 语言编写的简易《Minecraft》风格沙盒游戏,采用现代 OpenGL(着色器)渲染,代码量仅数千行。它支持 Windows、macOS 和 Linux 平台,并内置了基于 Python 服务端的在线多人联机功能。项目作者是 Michael Fogleman,其官方网站提供了更多信息与可执行文件下载。
Craft 的目标并非完整复刻《Minecraft》,而是以极简的代码展示一个可玩、可扩展的沙盒世界核心机制。它包含了地形生成、方块交互、昼夜循环、持久化存储和多人联机等基础模块,适合作为学习现代 OpenGL 和游戏编程的参考项目。
使用 Perlin / Simplex 噪声生成简单但观感自然的地形。
内置超过 10 种方块类型,且易于添加更多。
支持植物(草、花、树等)和透明效果(玻璃)。
天空中包含简单的云朵(不会移动)。
实现昼夜交替,并使用带纹理的天空穹顶。
用户对世界的修改保存在 SQLite3 数据库中。
支持在线多人游戏,服务端使用 Python 编写。
地形基于 Simplex 噪声生成,这是一种确定性噪声函数,根据位置播种,因此同一位置的世界总是以相同方式生成。世界在 XZ 平面上被划分为 32x32 方块的区块(Y 轴向上),这使得世界可以“无限”延伸(但在较大的 X 或 Z 值处存在浮点精度问题),同时也便于数据管理。只有可见的区块才会从数据库查询。
用户对世界的修改存储在 SQLite 数据库中,仅存储增量变化。加载时先生成默认世界,再应用用户修改。主表名为“block”,包含列 p、q、x、y、z、w,其中 (p, q) 标识区块,(x, y, z) 标识方块位置,w 标识方块类型(0 表示空气)。游戏内区块使用哈希表存储方块,键为 (x, y, z),值为 w。方块的 Y 坐标限制在 0 <= y < 256,上限为防止建造过高结构的人为限制,且不允许破坏 y = 0 的方块以避免掉出世界。
多人模式使用普通套接字和简单的 ASCII 行协议。每行由命令码和零个或多个逗号分隔的参数组成。客户端通过 C,p,q,key 请求区块,服务端返回方块更新 B,p,q,x,y,z,w 和缓存键 K,p,q,key。玩家位置以 P,pid,x,y,z,rx,ry 格式发送,客户端对过去两次位置更新进行插值以实现平滑动画。客户端最多每 0.1 秒发送一次自身位置。客户端使用 SQLite 数据库进行缓存,写入在后台线程中进行,每 5 秒提交一次事务,使用环形缓冲区作为写入队列。多人模式下,玩家可以在主视图或画中画视图中观察彼此,画中画实现简单,只需更改视口并从其他玩家视角重新渲染场景。
macOS:安装 CMake,可使用 Homebrew 简化:brew install cmake。
Linux (Ubuntu):
sudo apt-get install cmake libglew-dev xorg-dev libcurl4-openssl-dev
sudo apt-get build-dep glfw
Windows:安装 CMake 和 MinGW,将 C:\MinGW\bin 加入 PATH。安装 cURL,确保 CURL/lib 和 CURL/include 位于 Program Files 目录。使用以下命令替代后续编译命令:
cmake -G "MinGW Makefiles"
mingw32-make
git clone https://github.com/fogleman/Craft.git
cd Craft
cmake .
make
./craft
官方服务器 craft.michaelfogleman.com 已下线,可自行搭建服务器。
客户端:通过命令行参数连接服务器:./craft [HOST [PORT]],或在游戏内使用 /online [HOST [PORT]] 命令。
服务端:服务端使用 Python 编写,但需要编译一个 DLL 以执行与客户端相同的地形生成:
gcc -std=c99 -O3 -fPIC -shared -o world -I src -I deps/noise deps/noise/noise.c src/world.c
python server.py [HOST [PORT]]
/goto [NAME]:传送到其他用户,未指定 NAME 则随机选择。/list:显示已连接用户列表。/login NAME:切换到另一个注册用户名(区分大小写),会重新联系登录服务器。/logout:取消认证,成为访客用户,直到再次使用 /login 才会自动登录。/offline [FILE]:切换到离线模式,FILE 指定存档文件,默认为 "craft"。/online HOST [PORT]:连接到指定服务器。/pq P Q:传送到指定区块。/spawn:传送回出生点。Craft 是一个优秀的 C 语言 + 现代 OpenGL 入门项目,代码量小但功能完整。建议学习者从地形生成和渲染优化入手,理解区块管理、视锥剔除和着色器使用;随后可研究 SQLite 持久化和多人联机协议。项目结构清晰,适合作为图形学与游戏开发的实践案例。
DDNet 是 Teeworlds 的一个模组,源自 DDRace,是一款免费的合作型 2D 平台跳...
NBlood 是用 EDuke32 引擎技术与开发思路对 Build 引擎游戏所做的逆向工程移...
open-goal/jak-project 是面向 PS2《Jak & Daxter》系列的开源逆向工程与反编...