第三版全书学习地图

Beginning C++ Game Programming 第三版 21 章学习路线:通过 Timber、Pong、Zombie Arena 与 Run! 四个项目,从 C++20 与 SFML 基础走到完整游戏架构。

学习目标

  • 能说出第三版 21 章在 Timber、Pong、Zombie Arena 与 Run! 四个项目中的位置、产出和依赖关系
  • 能设计一条按语言、对象、实时循环、世界规则和表现系统递进的学习路径,并判断何时需要回补前置章节
  • 能使用预测、实现、日志、测试、测量和干净构建证据验收每章,而不是以“代码能运行”代替掌握

从“这不是旧版十章目录”开始

本书当前对齐的是 2024 年第三版《Beginning C++ Game Programming》,使用 C++20 与 SFML,共 21 个官方章节。旧学习地图把它压成“10 章、三板块”,会让第 11 至 21 章的资源管理、对象通信、Camera、Animator、空间音频和 shaders 全部失去位置。

不是把语法学完再突然做游戏,而是每学一组语言能力,立即放入可玩的垂直切片。

让每章都有可观察结果,也迫使所有权和阶段边界尽早暴露。

项目一:Timber,章节 1 至 5

第 1 章搭建窗口与游戏循环;第 2 章用变量、运算符和决策动画化精灵;第 3 章加入 string、SFML Time、玩家输入和 HUD;第 4 章使用循环、数组、switch、枚举和函数实现树枝等机制;第 5 章加入碰撞、声音与终局条件。

这一段的目标不是背语法,而是理解实时程序每帧都按“事件、输入、update、draw”推进。变量是持续状态,KeyPressed 是边沿,dt 让速度与帧率解耦。

Chapter 1  window + loop
Chapter 2  state + decisions
Chapter 3  input + time + HUD
Chapter 4  arrays + functions + mechanics
Chapter 5  collision + sound + end state

项目二:Pong,章节 6 至 7

第 6 章把 Ball、Bat 等状态与行为放入类,建立构造、封装和对象生命周期;第 7 章用 AABB、速度反射和接触修正完成游戏。这里首次要求区分“检测重叠”和“解算运动”:碰撞结果必须修正位置和速度,不能只播放声音。

Pong 是后续 GameObject 架构的最小预演。若类只变成装全局变量的袋子,Zombie Arena 的对象数量一增加就会失控。

项目三:Zombie Arena,章节 8 至 14

第 8 章从 SFML Views 和玩家视野开始;第 9 章使用引用、sprite sheets 与 vertex arrays;第 10 章引入指针、STL 和纹理管理;第 11 章实现 TextureHolder 并构建僵尸群;第 12 章加入碰撞、Pickup 和 Bullet;第 13 章分层 world/HUD View;第 14 章完成音效、文件 I/O、最高分、升级、波次与重启。

World View       terrain -> zombies -> bullets -> effects
HUD View         health -> ammo -> score -> wave
Screen Overlay   home -> level-up -> game-over

是这一项目的关键边界。资源所有者必须比 Sprite 长寿,HUD 只投影玩法快照,文件保存采用验证和安全发布,而不是把磁盘内容当可信输入。

项目四:Run! 架构,章节 15 至 16

第 15 章启动 Run!,以继承与多态定义 Update/Graphics 行为,用 Factory 组装 GameObject,并辨析组件对象与 ECS;第 16 章实现 SoundEngine、游戏逻辑、对象间通信和 Player。

这一阶段把“谁能修改世界”说清楚:update 追加命令,世界在安全点提交,声音与 HUD 消费事实,不保存易失裸指针。

Run! 行动系统,章节 17 至 19

第 17 章实现 Graphics draw calls、Camera 类、main/radar view 与 timer text;第 18 章编码可达平台、Player controls、Animator 和 player animations;第 19 章构建 interactive menu,并用 GameObject 的 Graphics 与 Update 组合制造雨效。

三章共同证明分阶段设计:逻辑先提交;Camera 和 Animator 读取提交状态;菜单决定是否推进逻辑时间;雨效作为可降级表现不能阻塞玩法。

Run! 完成阶段,章节 20 至 21

第 20 章加入 Fireball、SFML audio Listener、声音空间化、SoundEngine voice 与 HUD class;第 21 章用 CameraGraphics 实现 parallax backgrounds,通过 OpenGL 上下文运行 GLSL shaders,并执行 completed game 门禁。

视觉与音频可以降级,玩法事实不能变化。固定回放在开关 shader 后必须得到相同平台、伤害、得分和 GameOver。

知识依赖:为什么不能任意跳章

贯穿 TextureHolder、Factory、SoundBuffer、voice 和 shader。跳过指针/STL 直接做 Run!,常见结果是组件互相持有裸指针、资源先析构、容器遍历中删除对象。

types/flow/functions
  -> classes/references/STL/RAII
  -> game loop/collision/commands
  -> camera/animation/audio/HUD
  -> particles/shaders/release gate

若某章卡住,按依赖向前追一层:Animator 错误先检查 dt 与状态边沿;SoundEngine 错误先检查事件事实与 Buffer 生命周期;shader 错误先确认普通 RenderStates 路径正确。

每章怎样才算掌握

不是“读完”或“编译过”。先预测输入后的状态变化,再实现最小切片;记录帧号、对象 id、命令与事件;覆盖暂停、重启、极端 dt、资源缺失;测量对象、draw calls、voice;最后固定 seed 重放。

Given   fixed config + seed + initial world
When    recorded intents + fixed logical steps
Then    same commands + events + snapshots
And     clean build runs without hidden local assets

推荐学习节奏

每章分三轮:第一轮只看目标与图,先写预测;第二轮运行代码并用日志跟踪一条事实链;第三轮完成练习和失败注入。每个项目结束做一次纵向复盘,不能把四个项目当 21 个互不相关的示例。 章节编号只是阅读顺序,真正决定能否继续的是前置事实、所有权和时间协议是否已经用测试证明。

Timber 复盘实时循环;Pong 复盘对象与碰撞;Zombie Arena 复盘资源、容器和分层 View;Run! 复盘 Factory、命令事件、Camera、Animator、音频、shader 与发布门禁。

小结

  • 第三版是 21 章、四个项目,不是旧版十章摘要
  • Timber 建立实时循环,Pong 建立 OOP 与碰撞,Zombie Arena 放大资源与世界管理
  • Run! 用 Factory、组件行为、事件命令、Camera、Animator、空间音频和 shader 完成工程闭环
  • 学习顺序沿语言、所有权、实时规则、表现和发布逐层递进
  • 每章必须有预测、日志、边界测试、测量与干净复现证据

名词解释

本章出现的专业名词,用大白话再讲一遍。

第三版路线

以 21 个官方章节和四个递进项目组织的学习路线。

垂直切片

输入、规则、提交与表现都可运行验证的一小段完整功能。

Timber 项目

覆盖基础 C++、SFML 循环、碰撞和声音的首个项目。

实时循环

按固定顺序反复执行输入、更新和绘制的结构。

Pong 项目

用类、AABB 和物理解算完成的第二个项目。

AABB

通过轴对齐矩形范围相交检测接触的方法。

Zombie Arena

整合 View、STL、资源、对象群、HUD 和文件的项目。

TextureHolder

集中拥有并按键提供纹理长寿命引用的组件。

分层 View

世界与固定界面使用独立坐标映射的绘制结构。

Run! 项目

以组件式对象、Factory 和事件命令构建的跑酷项目。

Factory

验证并组装完整对象后交给世界的创建边界。

对象通信协议

稳定 id、过去式事件、延迟命令与只读查询的协作协议。

Camera

封装 View、可见范围和跟随策略的观察对象。

Animator

按 dt 采样动画片段但不决定玩法的组件。

GamePhase

Home、Playing、Paused、GameOver 与合法转换。

空间音频

按声源与 Listener 相对位置计算方向和衰减。

视差背景

背景层以不同相机位移比例移动产生深度感。

shader
运行在 GPU 顶点或片段阶段的程序。
RAII 所有权

由明确所有者和作用域管理资源生命周期的策略。

章节证据

预测、日志、测试、测量和干净复现材料。

项目复盘

项目结束后重新追踪完整事实链的纵向复习。

练习

  1. 问题 1:恢复第三版路线。 不看页面,写出四个项目的章节范围、核心能力和最终产物。
  1. 问题 2:诊断跳章失败。 学习者在 Run! 中遇到悬空指针、暂停跳帧和 HUD 改坏生命,分别应回补哪条依赖?
  1. 问题 3:设计章节验收。 为“火球与空间音频”写出预测、日志、边界测试、测量和干净复现证据。

讨论

评论区加载中…