来源:
data/lua/README.md
data/lua/manifest.schema.json
data/lua/types/ccb_api_v5.d.lua
data/lua/reference/ccb_public_api_v5.json
data/lua/reference/ccb_public_api_v5_coverage.json
tools/lua_api/README.md
commit d32b9cc880a8
api-contract
Lua 内容待修订: 本页仍含已移除的 v5 接口或旧运行时示例,不可作为当前 Lua 开发依据。请使用 Platform v1 入门。
游戏本体核心开发与贡献指南 (Core Development & Contribution Guide)¶
本指南面向所有希望为 Cataclysm: Cleanwater Bomb (CCB) 贡献 C++ 引擎代码、修复 Bug 或新增核心机制的开发者,提供从环境配置、编译构建、代码规范、测试调试到 PR 提交的全流程标准实践。
1. 全平台开发环境搭建 (Environment Setup)¶
🐧 Linux (Ubuntu / Debian / Arch)¶
# Ubuntu / Debian
sudo apt-get update
sudo apt-get install -y build-essential cmake pkg-config astyle \
libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev \
libncursesw5-dev liblua5.4-dev libgettextpo-dev
# Arch Linux
sudo pacman -S base-devel cmake astyle sdl2 sdl2_image sdl2_ttf sdl2_mixer ncurses lua gettext
🪟 Windows (MSVC / Visual Studio 2022)¶
- 安装 Visual Studio 2022(勾选“使用 C++ 的桌面开发”与“C++ CMake 工具”)。
- 使用
vcpkg安装依赖库: - 在 VS2022 中直接“打开文件夹”选择项目根目录,选择
x64-Release或x64-Debug预设即可一键编译。
🤖 Android (Gradle & NDK)¶
- 安装 Android Studio 与 NDK 25+。
- 进入
android/目录:
2. 现代 CMake 与 Make 构建指令 (Build Workflows)¶
推荐使用 CMake 现代构建系统:
# 1. 配置构建目录 (启用 SDL2 图形界面与音效)
cmake -B build -DCMAKE_BUILD_TYPE=Release -DTILES=ON -DSOUND=ON
# 2. 多核并发极速编译
cmake --build build -j$(nproc)
# 3. 运行游戏
./build/cataclysm-tiles
# 4. 编译并运行自动化单元测试
cmake --build build --target cata_test -j$(nproc)
./build/tests/cata_test
3. C++20 代码规范与 Astyle 自动格式化¶
CCB 项目全面采用 现代 C++20 标准,要求保持极高的代码整洁度与健壮性:
核心编码规范¶
- 内存与指针安全:
- 杜绝野指针和裸
new/delete,优先使用std::unique_ptr、std::shared_ptr、std::optional或引擎句柄game_handle。 - 引用传递优于指针传递;只读数据强制使用
const&。 - 现代语法特性:
- 合理使用
auto、结构化绑定(auto [k, v] = ...)、constexpr与<ranges>算法库。 - Astyle 代码自动格式化: 在提交代码前,必须执行项目自带的格式化检查:
4. 编写与运行 Catch2 单元测试¶
为确保改动不引入潜在回归,任何核心子系统的逻辑修改必须附带 Catch2 单元测试:
// tests/weather_test.cpp
#include "catch/catch.hpp"
#include "weather.h"
TEST_CASE( "weather_forecast_storm_intensity", "[weather]" ) {
GIVEN( "a stormy weather pattern" ) {
tripoint test_pos( 60, 60, 0 );
WHEN( "querying 2 hours ahead forecast" ) {
weather_forecast forecast = weather_manager::forecast_at( test_pos, 2 );
THEN( "wind speed must remain within safe physical boundaries" ) {
CHECK( forecast.wind_speed >= 0.0f );
CHECK( forecast.wind_speed <= 300.0f );
}
}
}
}
运行单个测试用例:
5. 本地调试与内存检测 (Debugging & ASan)¶
1. VSCode Launch 调试配置¶
在 .vscode/launch.json 中配置 GDB 调试:
{
"name": "(gdb) Launch Game",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/cataclysm-tiles",
"args": ["--debug"],
"cwd": "${workspaceFolder}",
"MIMode": "gdb",
"setupCommands": [{ "text": "-enable-pretty-printing" }]
}
2. 启用 AddressSanitizer 内存泄露排查¶
6. Git 工作流与 Pull Request 提交流程¶
- 从
master创建特性分支: - 遵循原子提交(Atomic Commits):
- 每次提交聚焦于单一明确的改进,Commit 信息遵循约定式提交(如
fix(water): correct gradient calculation、feat(lua): expose weather radar API)。 - 本地完整运行验证:
- 提交 Pull Request:
- 明确标注 Responsible human(指明你的 GitHub 账号作为代码责任人)。
- 如改动影响 Lua 契约或文档,需在 PR 中勾选并说明 Documentation Impact。