本书从游戏视角来介绍C++,既独具匠心又妙趣横生。即使读者初学C++,还没有任何编程经验,也可以在MichaelDawson的循循善诱下掌握C++的各种概念与技巧。书中每章涵盖一系列彼此相关的主题,并在结尾部分编写一个简单的文本游戏来巩固所学概念。随着学习的深入,读者将学会如何组织编程项目,如何将问题分解为可管理的子问题块,以及如何精炼代码。最后一章的游戏将综合运用《游戏开发经典丛书:通过游戏编程实战教新手学C++编程》介绍的概念与技巧,创建一个相对复杂的游戏。读完《游戏开发经典丛书:通过游戏编程实战教新手学C++编程》,您将为C++开发打下坚实的基础。
目录
- 第1章 类型、变量与标准
- i/o:lost fortune
- 1.1 c++简介
- 1.1.1 使用c++编写游戏
- 1.1.2 生成可执行文件
- 1.1.3 错误处理
- 1.1.4 理解iso标准
- 1.2 编写第一个c++程序
- 1.2.1 game over程序简介
- 1.2.2 注释
- 1.2.3 使用空白字符
- 1.2.4 包含其他文件
- 1.2.5 定义main()函数
- 1.2.6 通过标准输出显示文本
- 1.2.7 语句的终止
- 1.2.8 从main()函数返回值
- 1.3 使用std名称空间
- 1.3.1 game over 2.0程序简介
- 1.3.2 使用using指令
- .1.3.3 game over 3.0程序简介
- 1.3.4 使用using声明
- 1.3.5 使用using的时机
- 1.4 使用算术运算符
- 1.4.1 expensive calculator程序简介
- 1.4.2 加法、减法与乘法
- 1.4.3 理解整型与浮点型除法
- 1.4.4 使用取模运算符
- 1.4.5 运算符的优先级
- 1.5 声明和初始化变量
- 1.5.1 game stats程序简介
- 1.5.2 基本类型
- 1.5.3 类型修饰符
- 1.5.4 变量声明
- 1.5.5 变量命名
- 1.5.6 变量的赋值
- 1.5.7 变量初始化
- 1.5.8 显示变量值
- 1.5.9 获取用户输入
- 1.5.10 为类型定义新名称
- 1.5.11 类型的选择
- 1.6 使用变量进行算术运算
- 1.6.1 game stats 2.0程序简介
- 1.6.2 修改变量值
- 1.6.3 使用组合赋值运算符
- 1.6.4 递增运算符与递减运算符
- 1.6.5 整数的溢出处理
- 1.7 使用常量
- 1.7.1 game stats 3.0程序简介
- 1.7.2 使用常量
- 1.7.3 使用枚举类型
- 1.8 lost fortune简介
- 1.8.1 创建程序
- 1.8.2 从玩家获取信息
- 1.8.3 讲故事
- 1.9 本章小结
- 1.10 问与答
- 1.11 问题讨论
- 1.12 习题 第2章 真值、分支与游戏循环:
- guess my number
- 2.1 理解真值
- 2.2 使用if语句
- 2.2.1 score rater程序简介
- 2.2.2 验证真与假
- 2.2.3 值的真与假
- 2.2.4 使用关系运算符
- 2.2.5 if语句的嵌套
- 2.3 使用else子句
- 2.3.1 score rater 2.0程序简介
- 2.3.2 创建分支
- 2.4 使用带else子句的if语句序列
- 2.4.1 score rater 3.0程序简介
- 2.4.2 创建带else子句的if语句序列
- 2.5 使用switch语句
- 2.5.1 menu chooser程序简介
- 2.5.2 创建多路分支
- 2.6 使用while循环
- 2.6.1 play again游戏简介
- 2.6.2 使用while循环
- 2.7 使用do循环
- 2.7.1 play again 2.0程序简介
- 2.7.2 使用do循环
- 2.8 使用break和continue语句
- 2.8.1 finicky counter程序简介
- 2.8.2 创建while(true)循环
- 2.8.3 使用break语句退出循环
- 2.8.4 使用continue语句跳转到循环开始
- 2.8.5 使用break和continue的时机
- 2.9 使用逻辑运算符
- 2.9.1 designers network程序简介
- 2.9.2 使用逻辑与运算符
- 2.9.3 使用逻辑或运算符
- 2.9.4 使用逻辑非运算符
- 2.9.5 运算符的优先级
- 2.10 随机数的生成
- 2.10.1 die roller程序简介
- 2.10.2 调用rand()函数
- 2.10.3 为随机数生成器确定种子
- 2.10.4 在一定范围内计算
- 2.11 理解游戏主循环
- 2.12 guess my number游戏简介
- 2.12.1 采用游戏主循环
- 2.12.2 初始化游戏
- 2.12.3 创建游戏主循环
- 2.12.4 游戏结束
- 2.13 本章小结
- 2.14 问与答
- 2.15 问题讨论
- 2.16 习题 第3章 for循环、字符串与数组:
- word jumble
- 3.1 使用for循环
- 3.1.1 counter程序简介
- 3.1.2 使用for循环计数
- 3.1.3 在for循环中使用空语句
- 3.1.4 for循环的嵌套
- 3.2 理解对象
- 3.3 使用string对象
- 3.3.1 string tester程序简介
- 3.3.2 创建string对象
- 3.3.3 string对象的连接
- 3.3.4 使用size()成员函数
- 3.3.5 索引string对象
- 3.3.6 循环访问string对象
- 3.3.7 使用find()成员函数
- 3.3.8 使用erase()成员函数
- 3.3.9 使用empty()成员函数
- 3.4 使用数组
- 3.4.1 hero's inventory程序简介
- 3.4.2 创建数组
- 3.4.3 数组的索引
- 3.4.4 使用数组元素的成员函数
- 3.4.5 数组边界
- 3.5 理解c风格字符串
- 3.6 使用多维数组
- 3.6.1 tic-tac-toe board程序简介
- 3.6.2 创建多维数组
- 3.6.3 多维数组的索引
- 3.7 word jumble程序简介
- 3.7.1 创建程序
- 3.7.2 选择单词
- 3.7.3 单词乱序
- 3.7.4 欢迎界面
- 3.7.5 进入游戏主循环
- 3.7.6 游戏结束
- 3.8 本章小结
- 3.9 问与答
- 3.10 问题讨论
- 3.11 习题 第4章 标准模板库:hangman
- 4.1 标准模板库简介
- 4.2 使用vector
- 4.2.1 hero's inventory 2.0程序简介
- 4.2.2 使用向量的准备工作
- 4.2.3 向量的声明
- 4.2.4 使用push_back()成员函数
- 4.2.5 使用size()成员函数
- 4.2.6 向量的索引
- 4.2.7 调用元素的成员函数
- 4.2.8 使用pop_back()成员函数
- 4.2.9 使用clear()成员函数
- 4.2.10 使用empty()成员函数
- 4.3 使用迭代器
- 4.3.1 hero's inventory 3.0程序简介
- 4.3.2 迭代器的声明
- 4.3.3 循环访问向量
- 4.3.4 修改向量元素的值
- 4.3.5 访问向量元素的成员函数
- 4.3.6 使用向量的成员函数insert()
- 4.3.7 使用向量的成员函数erase()
- 4.4 使用算法
- 4.4.1 high scores程序简介
- 4.4.2 使用算法的准备工作
- 4.4.3 使用find()算法
- 4.4.4 使用random_shuffle()算法
- 4.4.5 使用sort()算法
- 4.5 理解向量的性能
- 4.5.1 向量的增长
- 4.5.2 元素的插入与删除
- 4.6 其他stl容器
- 4.7 对程序进行规划
- 4.7.1 使用伪代码
- 4.7.2 逐步细化
- 4.8 hangman简介
- 4.8.1 游戏规划
- 4.8.2 创建程序
- 4.8.3 变量与常量的初始化
- 4.8.4 进入游戏主循环
- 4.8.5 获取玩家的猜测
- 4.8.6 游戏结束
- 4.9 本章小结
- 4.10 问与答
- 4.11 问题讨论
- 4.12 习题 第5章 函数:mad lib
- 5.1 创建函数
- 5.1.1 instructions程序简介
- 5.1.2 函数声明
- 5.1.3 函数定义
- 5.1.4 函数调用
- 5.1.5 理解抽象
- 5.2 使用形参和返回值
- 5.2.1 yes or no程序简介
- 5.2.2 返回值
- 5.2.3 传递参数值
- 5.2.4 理解封装
- 5.3 理解软件重用
- 5.4 使用作用域
- 5.4.1 scoping程序简介
- 5.4.2 使用独立的作用域
- 5.4.3 使用嵌套作用域
- 5.5 使用全局变量
- 5.5.1 global reach程序简介
- 5.5.2 声明全局变量
- 5.5.3 访问全局变量
- 5.5.4 隐藏全局变量
- 5.5.5 修改全局变量
- 5.5.6 尽量少使用全局变量
- 5.6 使用全局常量
- 5.7 使用默认参数
- 5.7.1 give me a number程序简介
- 5.7.2 指定默认参数
- 5.7.3 为形参设置默认参数
- 5.7.4 重写默认参数
- 5.8 函数重载
- 5.8.1 triple程序简介
- 5.8.2 创建重载函数
- 5.8.3 调用重载函数
- 5.9 内联函数
- 5.9.1 taking damage程序简介
- 5.9.2 函数内联的指定
- 5.9.3 调用内联函数
- 5.10 mad lib游戏简介
- 5.10.1 创建程序
- 5.10.2 main()函数
- 5.10.3 asktext()函数
- 5.10.4 asknumber()函数
- 5.10.5 tellstory()函数
- 5.11 本章小结
- 5.12 问与答
- 5.13 问题讨论
- 5.14 习题 第6章 引用:tic-tac-toe
- 6.1 使用引用
- 6.1.1 referencing程序简介
- 6.1.2 创建引用
- 6.1.3 访问被引用的值
- 6.1.4 修改被引用的值
- 6.2 通过传递引用改变实参
- 6.2.1 swap程序简介
- 6.2.2 按值传递参数
- 6.2.3 按引用传递参数
- 6.3 传递引用以提高效率
- 6.3.1 inventory displayer程序简介
- 6.3.2 引用传递的陷阱
- 6.3.3 以常量引用声明参数
- 6.3.4 传递常量引用
- 6.4 如何传递实参
- 6.5 返回引用
- 6.5.1 inventory referencer程序简介
- 6.5.2 返回一个引用
- 6.5.3 显示返回的引用的值
- 6.5.4 将返回的引用赋值给引用
- 6.5.5 将返回的引用赋值给变量
- 6.5.6 通过返回的引用修改对象
- 6.6 tic-tac-toe游戏简介
- 6.6.1 游戏规划
- 6.6.2 创建程序
- 6.6.3 main()函数
- 6.6.4 instructions()函数
- 6.6.5 askyesno()函数
- 6.6.6 asknumber()函数
- 6.6.7 humanpiece()函数
- 6.6.8 opponent()函数
- 6.6.9 displayboard()函数
- 6.6.10 winner()函数
- 6.6.11 islegal()函数
- 6.6.12 humanmove()函数
- 6.6.13 computermove()函数
- 6.6.14 announcewinner()函数
- 6.7 本章小结
- 6.8 问与答
- 6.9 问题讨论
- 6.10 习题 第7章 指针:tic-tac-toe 2.0
- 7.1 指针基础
- 7.1.1 pointing程序简介
- 7.1.2 指针的声明
- 7.1.3 指针的初始化
- 7.1.4 将地址赋值给指针
- 7.1.5 指针的解引用
- 7.1.6 指针的重新赋值
- 7.1.7 使用对象的指针
- 7.2 指针和常量
- 7.2.1 使用常量指针
- 7.2.2 使用指向常量的指针
- 7.2.3 使用指向常量的常量指针
- 7.2.4 常量与指针小结
- 7.3 传递指针
- 7.3.1 swap pointer version程序简介
- 7.3.2 值传递
- 7.3.3 传递常量指针
- 7.4 返回指针
- 7.4.1 inventory pointer程序简介
- 7.4.2 返回指针
- 7.4.3 使用返回的指针显示值
- 7.4.4 将返回的指针赋值给指针
- 7.4.5 将返回的指针指向的值赋值给变量
- 7.4.6 通过返回的指针修改对象
- 7.5 理解指针与数组的关系
- 7.5.1 array passer程序简介
- 7.5.2 将数组名用作常量指针
- 7.5.3 数组的传递与返回
- 7.6 tic-tac-toe 2.0程序简介
- 7.7 本章小结
- 7.8 问与答
- 7.9 问题讨论
- 7.10 习题 第8章 类:critter caretaker
- 8.1 定义新类型
- 8.1.1 simple critter程序简介
- 8.1.2 类的定义
- 8.1.3 成员函数的定义
- 8.1.4 对象的实例化
- 8.1.5 数据成员的访问
- 8.1.6 成员函数的调用
- 8.2 使用构造函数
- 8.2.1 constructor critter程序简介
- 8.2.2 构造函数的声明与定义
- 8.2.3 构造函数的自动调用
- 8.3 设置成员访问级别
- 8.3.1 private critter程序简介
- 8.3.2 指定公有与私有访问级别
- 8.3.3 定义访问器成员函数
- 8.3.4 定义常量成员函数
- 8.4 使用静态数据成员与静态成员函数
- 8.4.1 static critter程序简介
- 8.4.2 声明与初始化静态数据成员
- 8.4.3 访问静态数据成员
- 8.4.4 声明与定义静态成员函数
- 8.4.5 调用静态成员函数
- 8.5 critter caretaker游戏简介
- 8.5.1 游戏规划
- 8.5.2 规划伪代码
- 8.5.3 critter类
- 8.5.4 main()函数
- 8.6 本章小结
- 8.7 问与答
- 8.8 问题讨论
- 8.9 习题 第9章 高级类与动态内存:
- game lobby
- 9.1 使用聚合体
- 9.1.1 critter farm程序简介
- 9.1.2 使用对象数据成员
- 9.1.3 使用容器数据成员
- 9.2 使用友元函数与运算符重载
- 9.2.1 friend critter程序简介
- 9.2.2 创建友元函数
- 9.2.3 运算符重载
- 9.3 动态分配内存
- 9.3.1 heap程序简介
- 9.3.2 使用new运算符
- 9.3.3 使用delete运算符
- 9.3.4 避免内存泄漏
- 9.4 使用数据成员与堆
- 9.4.1 heap data member程序简介
- 9.4.2 声明指向堆中值的指针数据成员
- 9.4.3 声明与定义析构函数
- 9.4.4 声明与定义拷贝构造函数
- 9.4.5 赋值运算符的重载
- 9.5 game lobby程序简介
- 9.5.1 player类
- 9.5.2 lobby类
- 9.5.3 lobby::addplayer()成员函数
- 9.5.4 lobby::removeplayer()成员函数
- 9.5.5 lobby::clear()成员函数
- 9.5.6 operator[[()成员函数
- 9.5.7 main()函数
- 9.6 本章小结
- 9.7 问与答
- 9.8 问题讨论
- 9.9 习题 第10章 继承与多态:blackjack
- 附录a 创建第一个c++程序
- 附录b 运算符优先级
- 附录c 关键字
- 附录d ascii字符表
-
附录e 转义序列