SuperKLF是出于学习目的实现steam游戏《超级键盘侠》基本框架的项目
- 平台:linuxmint(原生)/windows11(交叉编译)
- 语言标准:C++ 17
- IDE: vscode
- 使用库和工具: nlohmann::json raylib CMake
- 创意模板: 超级键盘侠
根目录下执行
mkdir build && cd build
cmake ..
cmake --build . -j{n} #其中n为CPU线程数或执行/build.sh
./build.sh #默认16线程构建Release版本编译结果在bin文件夹中
需要安装MinGW-w64交叉编译工具链 在Debian系的系统终端中执行
sudo apt update
sudo apt install mingw-64根目录下执行
mkdir build-win && cd build-win
cmake -DCMAKE_TOOLCHAIN_FILE=../mingw-toolchain.cmake ..
cmake --build . -j{n} #其中n为CPU线程数或执行/build-win.sh
./build-win.sh #默认16线程构建Release版本编译结果在bin-win文件夹中
- 启动游戏:获取资源,初始化各种组件,设置日志等级,注册即时特效和遗物特效,读取各配置文件创建游戏对象
- 进入游戏主循环:由流程控制类调用实时关卡的update()方法,更新游戏状态
- 退出游戏主循环:数据管理类存档,清理资源
下面是游戏主要组件的概述,忽略了部分细节
-
- 控制游戏流程的单例类
- 游戏开始时进行设置日志等级、注册即时特效和遗物特效等初始化工作
- 未接收到关闭信号时,从LevelManager关卡管理类获得实时关卡Level并调用其成员方法更新游戏状态
-
- 管理纹理和字体资源的单例类
- 内部管理一个<string,Texture2D>哈希表,并提供加载/卸载/缩放/获取纹理的方法
- 管理游戏字体
由于raylib对中文支持有限,游戏需在raylib库的基础上实现新的文字绘制函数
-
- 管理即时效果InstantEffect和遗物效果RelicEffect的单例类
- 为两种效果分别维护一个效果池,通过抽象工厂模式,由效果配置文件动态创建游戏初始化时注册的效果
-
- 用于实现遗物机制的单例类,采用观察者模式
- 提供绑定信号和遗物、广播信号的接口
-
- Level为抽象基类,其派生类实现具体的关卡逻辑
- 每个关卡类都有对应的关卡界面类LevelUI,并根据从接口获得的信号执行对应逻辑
-
- BaseUI为抽象基类,其派生类实现具体界面绘制逻辑
- 每个关卡界面类都向对应关卡类暴露查询组件状态的接口方法
-
- 表示实体对象的基类,派生类有玩家类Player和敌人类Enemy,规定了基本数据成员行为
-
- 子弹基类,规定了子弹的基本数据成员和行为
- 子弹功能通过触发一个或多个子弹特效实现
-
- 子弹效果的基类,派生类分别实现不同种类的子弹特效
-
- 即时效果基类,应用时立即对玩家产生效果