外层主要由“活动类”构成,目前有3个类:
acts::avg_scene
:目前大多数场景的基础acts::black_jack_scene
:21点游戏的实现acts::plane_battle_scene
:飞机大战游戏的实现
其中acts::avg_scene
并不包含具体场景的内容,它根据构造场景时传入的name
参数在静态成员scene_scripts
中查找对应的场景脚本,由指定的脚本填充场景的具体内容。
除此之外,简单物理模拟器算法也暂时位于外层,简单物理模拟器由naive_engine::simulator
类实现,其中使用了松散网格四叉树来高效检测碰撞。
内层实现了游戏运作所需的基础设施。核心类为silly_framework::game_window
,下辖几个分管理员:
render_manager
:管理基础渲染功能texture_manager
:管理纹理加载,使用LRU缓存减少重复加载input_manager
:管理键盘输入和键位映射activity_manager
:管理“活动类”
其中activity_manager
实现了两大核心机制:消息队列与活动栈。
- 消息队列:使活动异步单线程地处理事件,避免线程冲突。
- 活动栈:通过栈实现类似函数调用栈的功能,一个活动可以“调用”另一个活动,被调用活动退出后,回到原活动。
在寝室触发21点或飞机大战,游戏完成后回到寝室,就是利用了“活动调用”。
为了在C++代码中方便地调用配置文件中写的数据,本项目使用了一些Python脚本自动生成。