本页目录

毁灭战士3(Doom 3)GPL 引擎源码

doom3.gpl · TTimo/doom3.gpl

id Software 以 GPL 许可发布的《毁灭战士3》引擎源代码,语言为 C++。仓库只包含引擎源码,不含任何游戏数据;游戏数据仍受原 EULA 约束,需自行拥有正版游戏并将其升级到最新版本。README 提示:Win32 平台提供 Microsoft Visual Studi...

动作游戏 休闲 SDL C++ 角色控制 碰撞检测 存档系统 关卡管理 中级
★ Stars 18 Forks 11 License GPL-3.0 更新 2026-05-20

国内开发环境适配

Windows
官方声明支持
Linux
官方声明支持
macOS
未知
引擎 / 框架:SDL 暂无中文教程标记 未标记站长实测
代码托管在 GitHub,主页在 SourceForge,拉取源码一般可行;编译需要 SDL 1.2 系列开发包(SDL、SDL_image、SDL_ttf、SDL_mixer)以及 OpenGL/LibGLU 开发文件,现代发行版上这些 1.2 版本库可能已不在默认仓库或改由社区包提供,需自行安装;WiiMote 支持还需 libwiiuse。具体包名与可用性待核验。

中文项目介绍

SDL-Ball 是丹麦开发者 Jimmy Christensen 的个人作品,也是他人生中写下的第一款电脑游戏。作者在 README 中回忆,这个项目最初只是用来学习 C++ 和“如何不要把软件设计得很糟”的练手工程,多数代码是在 Kate 编辑器里敲出来的。正因如此,他在 2020 年的补记里坦率地说:这里有很多做法在今天是错的,请不要把它当作游戏开发的范例;但项目确实能跑、也确实好玩,他不打算重写或大改,而是选择继续把它挂在网上并尽量维护。对于想了解“一个人如何在上世纪 90 年代式打砖块框架里堆出完整功能”的读者,这份坦白本身就是有价值的背景。

玩法上,它是一款标准的打砖块(Breakout)游戏,目标与 DX-Ball、MegaBall 一脉相承:玩家操控屏幕底部的挡板,接住不断反弹的球,并通过精确的角度控制把球打向砖块。击中砖块会获得分数并掉落道具,道具效果有正有负,有的让游戏变简单、有的让游戏更难。道具系统还带有一层“经济循环”:拾取道具会折算成金币,金币的具体数量对玩家并不透明,但可以花掉它们去购买新的道具。当一关内所有可破坏砖块被清空,关卡结束并进入下一关;所有关卡通关之后,游戏会回到第一关重新开始,但分数按两倍计算,形成一种简单的循环挑战结构。

核心功能

核心特性

操作方式是本作相当突出的部分,README 专门用一整节列出四种输入设备。键盘用左右方向键移动挡板、上方向键发球,另有大量功能键:W 调出 WiiMote 连接对话框(需以 wiiuse 编译)、S 在 ~/.config/sdl-ball/screenshots/ 下截图、U 关闭画面清除以得到古怪的拖影效果、P 或 Pause 暂停、ESC 暂停并呼出菜单、F1 显示标题画面、F11 切换全屏、C 显示/隐藏时钟,以及 V/B/N 分别用于切换与购买道具。鼠标是作者推荐的方式:X 轴移动挡板,左键发球,右键购买道具,滚轮上下选择要买的道具。WiiMote 需要先按 W 再同时按 1 和 2 完成连接,倾斜手柄控制挡板,按键 1 购买、按键 2 发球,+ 键左右切换道具。摇杆则区分“数字摇杆”和“模拟摇杆”两种模式,模拟摇杆需要走一遍校准流程(居中、按键、左推、按键、右推、按键),校准值会写入配置文件,之后不必重复校准。

游戏的持久化数据都放在用户主目录的 ~/.config/sdl-ball/ 下:settings.cfg 保存设置,highscores.txt 保存高分榜,savegame.sav 保存存档。保存只能记录“关卡开始时的状态”,因此第一关无法存档——作者的理由很直白:你还没取得任何进度。删除对应的文本文件即可清空高分或存档。配置文件暴露了菜单里够不到的选项,例如 clearscreen(每次绘制前是否清屏)、eyecandy(粒子与拖尾特效)、resx/resy(分辨率)、showbg(背景图)、fullscreen、particlecollide(粒子间碰撞检测,好看但吃 CPU)、sound 与 stereo、controlmaxspeed/controlaccel/controlstartspeed(非鼠标控制器的最高速度、加速度与起步速度,其中 maxspeed 同时充当 WiiMote 与模拟摇杆的灵敏度)、左右/发球/切换与购买道具的按键 SDLK 编号、joyisdigital(摇杆是否按数字方式工作)、joycal*(校准值)以及 sndtheme/gfxtheme/lvltheme 三个大小写敏感的主题目录名。

技术架构分析

技术要点

构建方面,README 给出的依赖清单是 OpenGL、LibGLU、SDL 1.2 以及 SDL_image、SDL_ttf、SDL_mixer 的 1.2 版本,外加 make、可用的 C++ 编译器与 stdlibc++6。解包后进入目录执行 make 即可;此外还给出三种可选编译路径:不带声音编译、带 WiiMote(libwiiuse)支持编译、以及面向系统级安装的编译。资源层面,代码、图形、关卡与声音均以 GPLv3 发布,默认主题中的字体另有独立的许可文件。游戏支持主题切换,图形、声音、关卡三类资源分别放在各自的主题目录里,玩家可以按目录结构自制主题,这对想研究“资源与逻辑分离”的人来说是个小巧的样本。

平台方面,标题就写明这是面向 “linux+friends(以及 Windows)” 的打砖块克隆,Windows 需要有相应移植与 SDL 1.2 依赖,README 并未给出 macOS 的明确说明。由于 SDL 1.2 生态在今天已属老旧,在现代发行版上编译通常需要额外安装 1.2 系列开发包,可能还会遇到路径或头文件找不到的报错(README 自己就列了 “SDL.h: No such file or directory” 这一常见错误)。对国内读者而言,源码托管在 GitHub、项目主页位于 SourceForge,拉取代码一般可行,但旧版依赖包的获取与镜像配置建议以本地实际环境为准,具体可用性待核验。最后需要提醒的是:作者本人明确不建议把这份代码当作教学范本,如果你想学习的是现代工程组织方式,更适合把它当作“能跑起来的 2D 打砖块完整实现”来对照阅读——它可以展示一个爱好者项目如何用 SDL 1.2 加 OpenGL 组织主循环、输入抽象、配置持久化、主题资源与关卡流程,但其中的设计取舍不宜照搬。

开源许可证与版权说明

许可证标识:GPL-3.0。源码、资源与依赖许可可能不同,请以官方仓库为准。本站仅做索引,不托管源码。

相似项目