Skip to content

Commit

Permalink
加入代码讲解
Browse files Browse the repository at this point in the history
  • Loading branch information
TsXor committed May 14, 2024
1 parent 5004212 commit 1480566
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions impl_doc.md
Original file line number Diff line number Diff line change
@@ -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脚本自动生成。

0 comments on commit 1480566

Please sign in to comment.