 C++游戏编程入门(零基础学C++) 说明
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
