/GameFramework

简易游戏框架,整合D2D和Lua

Primary LanguageC++

CC Game Framework Project

参见:从零开始构建标准库 - 知乎专栏

实现一个游戏框架。

已嵌入物理引擎代码clib2d

已嵌入脚本操作系统代码clibparser

脚本操作系统

简介:语言为简化C语言,自制编译器(词法+语法+LR分析)、IR(基于寄存器)、虚拟机、GUI、VFS

原理:执行程序时,即时编译代码并执行所生成的二进制指令,按需加载。

main

main

介绍

架构是C/C++,渲染用DirectX,库用STL/ATL

从易到难,逐步推进。

使用的开源项目:

  • libqrencode-3.4.4
  • libevent-2.0.22
  • libcurl-7.53.1
  • dkjson(lua)

知乎文章列表

历程

第一阶段:搭好脚手架

项目架构:

  • 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 元胞自动机(已完成)
    • 光线追踪(进行中)

第三阶段:图形学

光线追踪

2D物理引擎

物理引擎系列:

截图

主界面

main

画光系列!!!(算法优化)

main

main

main

main

光线追踪入门

1. 渐变

main

2. 深度

main

3. 材质

main

4. 反射

main

基本光源

1. 平行光

main

1. 平行光(带阴影)

main

2. 点光源(带阴影)

main

3. 聚光灯(带阴影)

main

4. 三原色(带阴影)

main

画光系列

(采用动态刷新法)

1. 抖动采样

main

2. 实体几何

main

3. 反射

main

画光系列(彩色)

1. 实体几何

main

main

2. 反射

main

main

3. 三原色

main

main

4. 折射

main

5. 折射(菲涅耳方程)

main

6. 折射(比尔-朗伯定律)

main

main

画光系列(文字)

main

main

第四阶段:模拟器

Bochs

脚本操作系统

进度:

  • 一切皆文件(抽象包括:文件、管道、队列、http客户端、http服务端、日志、进程、句柄、设备、音乐等)
  • Shell
  • 红黑树
  • GUI接口
  • 多窗口管理
  • IPC
  • HTTP
  • JSON
  • 文件权限
  • 多用户