C++游戏编程入门(零基础学C++) 说明
  # C++游戏编程入门(零基础学C++) 说明
# 翻译说明
如果你连C++基础语法都不熟悉,并且想学习C++,或者想学习游戏开发,那么本专栏特别适合你。
本专栏适合没有任何C++语言基础的同学,也适合其他编程语言想往C++语言转的读者。
在这个专栏中,我们将使用C++开发4个流行的小游戏。
本专栏翻译自《Beginning C++ Game Programming——Learn C++ from scratch by building fun games》(第三版)。
限于水平有限,若发现翻译有不当之处。欢迎交流。
# 目录
第1章:欢迎阅读《C++游戏编程入门(第三版)》
- 我们将制作的游戏
- 《木材!!!》
 - 《乒乓》
 - 《僵尸竞技场》
 - 平台游戏
 
 - 为何在2024年应使用C++学习游戏编程
- SFML库
 - 微软Visual Studio
 - Mac和Linux系统呢?
 - 安装Visual Studio 2022
 
 - 设置SFML
 - 在Visual Studio 2022中创建新项目
- 配置项目属性
 
 - 规划Timber!!!
 - 项目资源
- 制作自己的音效
 - 将资源添加到项目中
 - 探索资源
 
 - 理解屏幕坐标和内部坐标
 - 开始编写游戏代码
- 用注释让代码更清晰
 - 主函数
 - 代码呈现与语法
 - 从函数返回值
 - 运行游戏
 
 - 使用SFML打开窗口
- 引入SFML的功能
 - 面向对象编程、类和对象
 - 使用命名空间sf
 - SFML的VideoMode和RenderWindow
 - 运行游戏
 
 - 游戏循环
- while循环
 - C风格的代码注释
 - 输入、更新、绘制、重复
 - 检测按键
 - 清除并绘制场景
 - 运行游戏
 
 - 绘制游戏背景
- 使用纹理准备精灵
 - 对背景精灵进行双缓冲处理
 - 运行游戏
 
 - 处理错误
- 配置错误
 - 编译错误
 - 链接错误
 - 程序bug
 
 - 总结
 - 常见问题解答
 
- 我们将制作的游戏
 第2章:变量、运算符和判断:为精灵制作动画
全面学习C++变量
- 变量类型
 - 用户定义类型
 
声明和初始化变量
声明变量
初始化变量
一步完成声明和初始化
常量
统一初始化
声明和初始化用户定义类型
操作变量
- C++算术运算符和赋值运算符
 - 用表达式实现功能
- 赋值
 - 自增和自减
 
 
添加云朵、嗡嗡叫的蜜蜂和一棵树
- 准备树
 - 准备蜜蜂
 - 准备云朵
 - 绘制树、蜜蜂和云朵
 
随机数
- 在C++中生成随机数
 
使用if和else进行判断
- 逻辑运算符
 - C++中的
if和else - 如果他们过桥,就射击!
 - 否则执行其他操作
 - 读者挑战
 
计时
- 帧率问题
 - SFML的帧率解决方案
 
移动云朵和蜜蜂
- 让蜜蜂动起来
 - 飘动的云朵
 
总结
常见问题
第3章:C++字符串、SFML时间:玩家输入与平视显示器
- 暂停和重新开始游戏
 - C++字符串
- 声明字符串
 - 给字符串赋值
 - 字符串拼接
 - 获取字符串长度
 - 用StringStream以另一种方式操作字符串
 - SFML文本和字体
 
 - 添加分数和消息
 - 添加时间条
 - 总结
 - 常见问题
 
第4章:循环、数组、switch语句、枚举和函数:实现游戏机制
- 循环
while循环- 跳出循环
 for循环
 - 数组
- 声明数组
 - 初始化数组元素
- 快速初始化数组元素
 
 - 这些数组对我们的游戏有什么实际作用?
 
 - 用switch语句进行判断
 - 枚举
 - 函数入门
- 谁设计了这些奇怪又让人抓狂的语法?为什么是这样的?
 - 函数返回类型
 - 函数名
 - 函数参数
 - 函数体
 - 函数原型
 - 组织函数
 - 函数作用域
 - 关于函数的最后一点说明(目前为止)
 
 - 生成树枝
- 准备树枝
 - 每一帧更新树枝精灵
 - 绘制树枝
 - 移动树枝
 
 - 总结
 - 常见问题
 
- 循环
 第5章:碰撞、声音和结束条件:让游戏可玩
- 准备玩家(和其他精灵)
 - 绘制玩家和其他精灵
 - 处理玩家输入
- 处理新游戏设置
 - 检测玩家砍伐动作
 - 检测按键释放
 - 为砍伐的原木和斧头制作动画
 
 - 处理死亡情况
 - 简单音效
- SFML音效的工作原理
 - 何时播放音效
 - 添加音效代码
 
 - 改进游戏和代码
 - 总结
 - 常见问题
 
第6章:面向对象编程 - 开始制作乒乓球游戏
- 面向对象编程
- 封装
 - 多态
 - 继承
 - 为什么使用面向对象编程?
 - 类究竟是什么?
 
 - 乒乓球拍的理论
- 声明类、变量和函数
 - 类函数定义
 - 使用类的实例
 
 - 创建乒乓球项目
 - 编写
Bat类- 编写
Bat.h - 构造函数
 - 继续解释
Bat.h - 编写
Bat.cpp 
 - 编写
 - 使用
Bat类并编写主函数 - 总结
 - 常见问题
 
- 面向对象编程
 第7章:轴对齐包围盒碰撞检测和物理 - 完成《乒乓》游戏
- 编写
Ball类 - 使用
Ball类 - 碰撞检测和计分
 - 运行游戏
 - 学习C++的箭头运算符
 - 总结
 - 常见问题解答
 
- 编写
 第8章:SFML视图 - 开始制作《僵尸射击》游戏
- 规划并开始制作《僵尸竞技场》游戏
- 创建新项目
 - 项目资源
 - 探索资源
 - 将资源添加到项目中
 
 - 面向对象编程与《僵尸竞技场》项目
 - 构建层级 - 第一个类
- 编写Player类头文件
 - 编写Player类函数定义
 
 - 用SFML视图控制游戏相机
 - 启动《僵尸竞技场》游戏引擎
 - 管理代码文件
 - 开始编写主游戏循环
 - 总结
 - 常见问题解答
 
- 规划并开始制作《僵尸竞技场》游戏
 第9章:C++引用、精灵表和顶点数组
- 理解C++引用
- 总结引用
 
 - SFML顶点数组和精灵表
- 什么是精灵表?
 
 - 什么是顶点数组?
- 用图块构建背景
 - 构建顶点数组
 - 使用顶点数组进行绘制
 
 - 创建随机生成的滚动背景
 - 使用背景
 - 总结
 - 常见问题解答
 
- 理解C++引用
 第10章:指针、标准模板库和纹理管理
- 学习指针
- 指针语法
 - 声明指针
 - 初始化指针
 - 重新初始化指针
 - 解引用指针
 - 指针用途广泛且功能强大
- 动态分配内存
 - 将指针传递给函数
 - 声明并使用指向对象的指针
 
 - 指针和数组
 - 指针总结
 
 - 学习标准模板库
- 什么是vector?
- 声明vector
 - 向vector添加数据
 - 访问vector中的数据
 - 从vector中删除数据
 - 检查vector的大小
 - 遍历vector的元素
 
 - 什么是map?
- 声明map
 - 向map添加数据
 - 在map中查找数据
 - 从map中删除数据
 - 检查map的大小
 - 检查map中是否存在键
 - 遍历map的键值对
 
 
 - 什么是vector?
 auto关键字- 标准模板库总结
 - 总结
 - 常见问题解答
 
- 学习指针
 第11章:编写
TextureHolder类并创建一群僵尸- 实现
TextureHolder类- 编写
TextureHolder头文件 - 编写
TextureHolder函数定义 - 我们通过
TextureHolder类实现了什么? 
 - 编写
 - 创建一群僵尸
- 编写
Zombie.h文件 - 编写
Zombie.cpp文件 - 使用
Zombie类创建一群僵尸 - 让这群僵尸“活起来”
 
 - 编写
 - 为所有纹理使用
TextureHolder类- 更改背景获取纹理的方式
 - 更改
Player类获取纹理的方式 
 - 总结
 - 常见问题解答
 
- 实现
 第12章:碰撞检测、拾取物和子弹
- 编写
Bullet类- 编写
Bullet头文件 - 编写
Bullet源文件 - 编写
shoot函数- 在
shoot函数中计算斜率 - 在
shoot函数中使斜率为正 - 在
shoot函数中计算X和Y之间的比例 - 完成对
shoot函数的讲解 
 - 在
 - 更多子弹函数
 Bullet类的update函数
 - 编写
 - 让子弹飞起来
- 包含
Bullet类 - 控制变量和子弹数组
 - 重新装填枪支
 - 发射子弹
 - 在每一帧更新子弹
 - 在每一帧绘制子弹
 - 给玩家添加准星
 
 - 包含
 - 编写拾取物类
- 编写拾取物头文件
 - 编写拾取物类函数定义
 
 - 使用拾取物类
 - 检测碰撞
- 僵尸被击中了吗?
 - 玩家被僵尸碰到了吗?
 - 玩家碰到拾取物了吗?
 
 - 总结
 - 常见问题解答
 
- 编写
 第13章:分层视图和实现HUD
- 添加所有文本和HUD对象
 - 更新HUD
 - 绘制平视显示器(HUD)、主界面和升级界面
 - 总结
 
第14章:音效、文件输入/输出和完成游戏
- 保存和加载高分
 - 准备音效
 - 允许玩家升级并生成新一波敌人
 - 重新开始游戏
 - 播放其余音效
- 在玩家重新装填时添加音效
 - 制作射击音效
 - 在玩家被击中时播放音效
 - 在玩家拾取物品时播放音效
 - 在僵尸被击中时制作溅血音效
 
 - 总结
 - 常见问题解答
 
第15章:运行!
- 关于这款游戏
 - 创建项目
 - 编写主函数
 - 处理输入
 - 编写
Factory类 - 高级面向对象编程:继承和多态
- 继承
 - 扩展类
 - 多态
 - 抽象类:虚函数和纯虚函数
 
 - 设计模式
 - 实体组件系统模式
- 为什么管理多种不同类型的对象很困难
 - 使用通用
GameObject改善代码结构 - 优先使用组合而非继承
 - 工厂模式
 - C++智能指针
- shared_ptr
 - unique_ptr
 
 - 转换智能指针
 - 编写
GameObject类 - 编写
Component类 - 编写
Graphics类 - 编写
Update类 - 运行代码
 - 接下来做什么?
 
 - 总结
 
第16章:音效、游戏逻辑、对象间通信和玩家
- 编写
SoundEngine类 - 编写游戏逻辑
- 编写
LevelUpdate类 
 - 编写
 - 编写玩家相关内容:第一部分
- 编写
PlayerUpdate类 - 编写
PlayerGraphics类 
 - 编写
 - 编写
Animator类- 记住纹理坐标
 
 - 运行游戏
 - 总结
 
- 编写
 第17章:图形、相机、动作
- 相机、绘制所有内容和SFML视图
 - 编写相机类
- 编写
CameraUpdate类 - 编写
CameraGraphics类(第一部分) - SFML的
View类 - 编写
CameraGraphics类(第二部分) 
 - 编写
 - 向游戏中添加相机实例
 - 运行游戏
 - 总结
 
第18章:编写平台、玩家动画和控制代码
- 编写平台相关代码
- 编写
PlatformUpdate类- 编写
PlatformUpdate类的update函数 
 - 编写
 - 编写
PlatformGraphics类 - 在工厂中构建一些平台
 
 - 编写
 - 运行游戏
 - 为玩家添加功能
- 编写玩家控制代码
 
 - 运行游戏
 - 编写
Animator类 - 编写玩家动画
 - 运行游戏
 - 总结
 
- 编写平台相关代码
 第19章:构建菜单并实现下雨效果
- 构建交互式菜单
- 编写
MenuUpdate类 - 编写
MenuGraphics类 - 在工厂类中构建菜单
 
 - 编写
 - 运行游戏
 - 实现下雨效果
- 编写
RainGraphics类 - 在工厂类中实现下雨效果
 
 - 编写
 - 运行游戏
 - 总结
 
- 构建交互式菜单
 第20章:火球和空间化
- 什么是空间化?
- 发射器、衰减和收听者
 
 - 使用SFML处理空间化
 - 升级SoundEngine类
 - 火球
- 编写
FireballUpdate类 - 编写
FireballGraphics类- 编写
FireballGraphics.h文件 - 编写
FireballGraphics.cpp文件 
 - 编写
 - 在工厂中构建一些火球
 
 - 编写
 - 运行游戏
 - 总结
 
- 什么是空间化?
 第21章:视差背景和着色器
- 学习 OpenGL、着色器和 GLSL
- 可编程管线和着色器
 - 编写一个假设的片段着色器
 - 编写一个假设的顶点着色器
 
 - 完成
CameraGraphics类的编写- 拆分新的绘制代码
 
 - 为游戏编写着色器
 - 运行完整的游戏
 - 总结
 - 进一步阅读
 
- 学习 OpenGL、着色器和 GLSL
 
上次更新: 2025/05/07, 21:40:50