注:此README为项目前期编写,项目最终报告请移步docs文件夹
本项目是一个基于物理的模拟游戏(Simflow),其功能参考自一个更庞大的物理沙盒游戏。我们将从描述现实世界的物理定律出发,比如流体NS方程、热方程等等,提供一个可交互的物理环境,达到寓教于乐的效果。
玩家可以向环境中任意地添加各种物质,其表现形式为1像素大小的粒子。物质的种类主要为粉尘、固体、液体、气体;各个种类下有细分的物质,比如固体下有金属、木头,液体下有水等等。
同时,物质之间可以产生相互作用,包括物理上的交互(碰撞、传热)、化学上的交互(反应)。而对于各个种类的物质,我们将尽可能地还原其在现实中的行为,比如气体、液体的运动遵循流体方程,物质间传热遵循温度方程等。
因为时间比较有限,我们仅挑选这些比较核心的功能实现。若时间充裕,我们还将考虑实现火、酸等更多物质,丰富模拟的表现力。
-
本项目基于C++17、ImGui框架实现。
-
整体架构基于MVVM。
-
使用了Travis-CI实现持续集成。
本项目的复杂度主要集中在Model层。考虑到这个特性,我们安排两人进行Model层、ViewModel层的开发,一人进行View层的开发。
-
第一轮迭代由陈婉仪负责View、Window层,钟嘉农、上官越负责ViewModel、Model层。预期效果为实现固体、粉尘,主要是固体粉尘间的碰撞、粉尘与大气的交互(粉尘对大气产生扰动,由NS方程模拟大气流动)。
-
第二轮迭代 ... 预期效果为实现液体,主要是液体自身的交互,液体与粉尘、固体、大气间的交互。
- 粉尘、液体交互,液体自身交互
- 升级版碰撞检测
- 温度