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++中的ifelse
      • 如果他们过桥,就射击!
      • 否则执行其他操作
      • 读者挑战
    • 计时

      • 帧率问题
      • 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顶点数组和精灵表
      • 什么是精灵表?
    • 什么是顶点数组?
      • 用图块构建背景
      • 构建顶点数组
      • 使用顶点数组进行绘制
    • 创建随机生成的滚动背景
    • 使用背景
    • 总结
    • 常见问题解答
  • 第10章:指针、标准模板库和纹理管理

    • 学习指针
      • 指针语法
      • 声明指针
      • 初始化指针
      • 重新初始化指针
      • 解引用指针
      • 指针用途广泛且功能强大
        • 动态分配内存
        • 将指针传递给函数
        • 声明并使用指向对象的指针
      • 指针和数组
      • 指针总结
    • 学习标准模板库
      • 什么是vector?
        • 声明vector
        • 向vector添加数据
        • 访问vector中的数据
        • 从vector中删除数据
        • 检查vector的大小
        • 遍历vector的元素
      • 什么是map?
        • 声明map
        • 向map添加数据
        • 在map中查找数据
        • 从map中删除数据
        • 检查map的大小
        • 检查map中是否存在键
        • 遍历map的键值对
    • 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类的编写
      • 拆分新的绘制代码
    • 为游戏编写着色器
    • 运行完整的游戏
    • 总结
    • 进一步阅读
上次更新: 2025/12/11, 15:37:43

社区交流

讨论与留言

前往 GitHub Issues →

本留言区仅对应当前文章,欢迎补充观点、提出问题或帮助修正文中疏漏。 留言由 GitHub/Gitalk 提供,需要使用 GitHub 登录。

最近更新
第 1 课:专栏导论与安全边界
07-01
第 3 课:安装编译与调试环境
07-01
第 4 课:第三方库下载、编译与依赖管理
07-01
更多文章>