diff --git a/impl_doc.md b/impl_doc.md new file mode 100644 index 0000000..0693482 --- /dev/null +++ b/impl_doc.md @@ -0,0 +1,28 @@ +# SillyGame代码讲解 + +## 外层 +外层主要由“活动类”构成,目前有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脚本自动生成。 +