CC Game Framework Project
实现一个游戏框架。
已嵌入物理引擎代码clib2d。
已嵌入脚本操作系统代码clibparser。
脚本操作系统
简介:语言为简化C语言,自制编译器(词法+语法+LR分析)、IR(基于寄存器)、虚拟机、GUI、VFS
原理:执行程序时,即时编译代码并执行所生成的二进制指令,按需加载。
介绍
架构是C/C++,渲染用DirectX,库用STL/ATL。
从易到难,逐步推进。
使用的开源项目:
- libqrencode-3.4.4
- libevent-2.0.22
- libcurl-7.53.1
- dkjson(lua)
知乎文章列表
- 开篇
- 初见成效
- 有模有样
- 2048
- 诗情画意
- 柳岸花明
- Wireworld元胞自动机
- 余音袅袅
- 简单的图形学(一)
- 简单的图形学(二)——材质与反射
- 简单的图形学(三)——光源
- 五彩缤纷
- 用C++画光(一)——优化
- 用C++画光(二)——矩形
- 用C++画光(三)——色散
- 嵌入Bochs
历程
第一阶段:搭好脚手架
项目架构:
- base - 基础类(包含二维码库、libevent、libcurl)
- ui - 界面逻辑
- render - DX渲染逻辑
- lua - lua代码
- lua_ext - lua扩展(UI、Web)
- script - lua脚本(UI、Scene)
整体思路:
- 将窗口包装成Window类,借鉴自MFC中的相关内容
- D2D1和DWrite的初始化
- 实现图元工厂模式,统一管理DX资源,已实现色块和文字的渲染
- 截取Window的特定消息,进行渲染
当前进度:
- 已整合Lua 5.3.3
- 实现背景渐变的效果
- 实现定时器功能
- 监听窗口消息
- 实现场景切换功能
- 实现绝对布局,可以自动调整大小
- 整合WIC图片工厂模块
- 整合二维码模块(libqrencode)
- 监听鼠标事件
- 添加线性布局
- 添加按钮控件
- 添加文本框控件
- 添加表格布局
- 添加HTTP组件,整合libevent和libcurl
- 添加图片控件,接收base64编码的图片二进制指针
- 添加lua版本的json解析
- 完善HTTP组件(GET,POST)
- 添加音频播放组件(libzplay)
TODO:
- 完善一言界面
- 添加更多控件
- 添加更多渲染图元
第二阶段:移植应用
- 游戏
- 贪吃蛇
- 2048(已完成)
- 俄罗斯方块
- 工具
- 计算器(计划中)
- JSON校验器
- 网络
- 一言(已完成)
- 网易云音乐播放器(制作中)
- 算法可视化
- A*寻路(已完成)
- Wireworld 元胞自动机(已完成)
- 光线追踪(进行中)
第三阶段:图形学
光线追踪
- 用JavaScript玩转计算机图形学(一)光线追踪入门 - Milo Yip (已完成)
- 用JavaScript玩转计算机图形学(二)基本光源 - Milo Yip (已完成)
- 用 C 语言画光(一):基础 (已完成)
- 用 C 语言画光(二):构造实体几何 (已完成)
- 用 C 语言画光(三):形状 (已完成)
- 用 C 语言画光(四):反射 (已完成)
2D物理引擎
物理引擎系列:
截图
主界面
画光系列!!!(算法优化)
光线追踪入门
1. 渐变
2. 深度
3. 材质
4. 反射
基本光源
1. 平行光
1. 平行光(带阴影)
2. 点光源(带阴影)
3. 聚光灯(带阴影)
4. 三原色(带阴影)
画光系列
(采用动态刷新法)
1. 抖动采样
2. 实体几何
3. 反射
画光系列(彩色)
1. 实体几何
2. 反射
3. 三原色
4. 折射
5. 折射(菲涅耳方程)
6. 折射(比尔-朗伯定律)
画光系列(文字)
第四阶段:模拟器
Bochs
脚本操作系统
- 【Parser系列】实现LR分析——开篇
- 【Parser系列】实现LR分析——生成AST
- 【Parser系列】实现LR分析——支持C语言文法
- 【Parser系列】实现LR分析——完成编译器前端!
- 【Parser系列】实现LR分析——识别变量声明
- 【Parser系列】实现LR分析——解决二义性问题
- 【虚拟机系列】C语言虚拟机诞生!
- 【虚拟机系列】实现Fork!
进度:
- 一切皆文件(抽象包括:文件、管道、队列、http客户端、http服务端、日志、进程、句柄、设备、音乐等)
- Shell
- 红黑树
- GUI接口
- 多窗口管理
- IPC
- HTTP
- JSON
- 文件权限
- 多用户