第1章 计算机和编程概论 1
1.1 概述 1
1.2 硬件 1
1.2.1 CPU 2
1.2.2 主内存 3
1.2.3 辅助存储设备 4
1.2.4 输入设备 4
1.2.5 输出设备 4
1.3 计算机如何存储数据 5
1.3.1 存储数字 6
1.3.2 存储字符 8
1.3.3 负整数 8
1.3.4 实数 9
1.3.5 其他类型的数据 9
1.4 程序如何工作 10
1.4.1 从机器语言到汇编语言 12
1.4.2 高级语言 13
1.4.3 关键字、运算符和语法:概述 14
1.4.4 编译器和解释器 15
1.5 C++和Dark GDK库 17
综合测验 26
编程练习 28
第2章 用C+和Dark GDK库进行图形编程 31
2.1 体验C++和Dark GDK库 31
2.1.1 注释 34
2.1.2 编程风格:增强代码的可读性 35
2.2 屏幕坐标系统 36
2.2.1 用dbDot函数画点 37
2.2.2 dbWait函数 38
2.3 基本的二维图形 39
2.3.1 画线:dbLine函数 40
2.3.2 画矩形:dbBox函数 43
2.3.3 画圆:dbCircle函数 45
2.3.4 画椭圆:dbEllipse函数 46
2.3.5 在Dark GDK窗口外部画图 48
2.4 显示文本 49
2.4.1 在Dark GDK窗口中显示文本 49
2.4.2 在窗口标题栏中显示文本 52
2.5 程序开发周期 59
综合测验 61
编程练习 63
第3章 变量、计算和颜色 65
3.1 概述 65
3.2 文字常量 65
3.3 变量 67
3.3.1 数据类型 68
3.3.2 变量名称 69
3.3.3 声明变量 70
3.4 计算 74
3.4.1 运算顺序 77
3.4.2 用圆括号分组 78
3.4.3 整数除法 81
3.4.4 复合赋值运算符 81
3.5 从函数获取值 87
3.5.1 获取随机数 89
3.5.2 为随机数生成器提供种子值 90
3.5.3 嵌套函数调用 92
3.5.4 数学函数 93
3.5.5 其他会返回值的函数 94
3.6 从键盘读取数值输入 94
3.6.1 atoi和atof函数如何处理无效字符 96
3.6.2 将数值转换成字符串 97
3.7 颜色 98
3.7.1 将RGB颜色存储到内存 100
3.7.2 用彩色描绘 101
3.8 具名常量 105
3.9 更改程序窗口的大小 107
综合测验 109
编程练习 111
第4章 void函数 113
4.1 使用函数来模块化程序 113
4.2 定义并调用void函数 115
4.2.1 函数名 115
4.2.2 定义void函数 115
4.2.3 调用函数 116
4.2.4 函数原型 120
4.3 设计程序来使用函数 121
层次图 123
4.4 局部变量 124
作用域和局部变量 126
4.5 向函数传递实参 127
4.5.1 形参变量的作用域 130
4.5.2 传递多个实参 131
4.5.3 以传值方式传递实参 134
4.5.4 以传引用方式传递实参 135
4.6 全局变量和常量 138
综合测验 142
编程练习 144
第5章 处理图像 147
5.1 概述 147
5.2 位图 147
5.2.1 加载位图图像 147
5.2.2 位图文件位置 148
5.2.3 从用户处获得文件名 152
5.2.4 加载多幅位图 153
5.2.5 获取位图的大小和颜色深度 156
5.2.6 从内存中删除位图 157
5.2.7 位图的翻转、镜像、褪色和模糊 157
5.3 色键透明 159
5.3.1 用dbLoadImage函数加载图像 160
5.3.2 用dbPasteImage显示图像 160
5.3.3 用dbSetImageColorKey函数更改键色 161
5.3.4 从内存中删除图像 170
综合测验 171
编程练习 172
第6章 控制结构 175
6.1 概述 175
6.2 用if语句写选择结构 177
6.2.1 布尔表达式和关系运算符 179
6.2.2 综合运用 180
6.2.3 测试颜色 182
6.3 if-else语句 183
6.4 嵌套选择结构和if-else-if语句 187
6.4.1 编程风格和嵌套选择结构 191
6.4.2 if-else-if语句 192
6.5 重复结构:while和do-while循环 194
6.5.1 条件控制和计数控制的循环 195
6.5.2 while循环 195
6.5.3 while循环是先测试循环 199
6.5.4 无限循环 201
6.5.5 do-while循环:后测试循环 201
6.6 递增运算符和递减运算符 203
6.7 重复结构:for循环 204
6.7.1 在初始化表达式中声明计数器变量 207
6.7.2 在循环主体中使用计数器变量 207
6.7.3 递增不止1 208
6.7.4 递减计数器变量来倒数 209
6.8 用for循环处理图像中的像素 209
6.9 逻辑运算符 214
6.9.1 &&运算符 214
6.9.2 ‖运算符 215
6.9.3 短路求值 215
6.9.4 !运算符 216
6.9.5 逻辑运算符的优先级 216
6.10 switch语句 219
6.11 数值真假、标志和bool变量 223
综合测验 225
编程练习 228
第7章 游戏循环和动画 231
7.1 游戏循环 231
7.1.1 游戏循环 233
7.1.2 将控制交还给Dark GDK 234
7.2 简单动画 235
7.3 用键盘控制物体 238
7.3.1 移动屏幕上的物体 240
7.3.2 用键盘执行其他操作 241
7.4 有关sprite 243
7.4.1 创建sprite 243
7.4.2 移动sprite 244
7.4.3 获取sprite的X和Y坐标 247
7.4.4 获取sprite的宽度和高度 247
7.4.5 旋转sprite 248
7.4.6 偏移sprite的插入点 250
7.4.7 显示和隐藏sprite 251
7.4.8 改变sprite的大小 252
7.4.9 设置sprite的优先级 253
7.4.10 判断sprite是否存在 253
7.4.11 更改sprite图像 254
7.4.12 翻转和镜像sprite 254
7.4.13 设置back save和透明功能 255
7.4.14 使用sprite的alpha值来更改透明度 256
7.4.15 从内存中删除sprite 257
7.4.16 显示sprite、图像和基本图形 257
7.4.17 粘贴和克隆sprite 261
7.5 胶片动画和sprite sheet 265
7.5.1 使用sprite sheet简化动画 268
7.5.2 用Dark GDK播放sprite动画 269
7.6 sprite碰撞检测 271
综合测验 281
编程练习 282
第8章 Vulture Trouble游戏:引入声音、物理和文本效果 285
8.1 概述 285
8.2 播放音效和音乐 285
8.2.1 声音文件 286
8.2.2 音乐文件 295
8.3 模拟下落物体 301
8.4 文本效果 309
8.4.1 更改字号 310
8.4.2 更改字体 310
8.4.3 使用加粗和倾斜字形 310
8.4.4 文本背景透明 312
8.4.5 获取文本宽度和高度 313
8.4.6 设置光标位置 314
8.5 Vulture Trouble游戏 316
综合测验 336
编程练习 338
第9章 返回值的函数和鼠标输入 341
9.1 返回值的函数 341
9.1.1 自己动手写能返回值的函数 342
9.1.2 充分利用return语句 344
9.1.3 返回布尔值 350
9.2 使用鼠标 366
9.2.1 获取鼠标坐标 366
9.2.2 显示、隐藏和定位鼠标 367
9.2.3 检测鼠标按钮操作 368
9.2.4 显示系统的沙漏指针 369
9.2.5 获取鼠标移动距离 369
9.3 Bug Zapper游戏 378
综合测验 389
编程练习 390
第10章 数组和tile map 393
10.1 数组基础 393
10.1.1 数组元素和下标 394
10.1.2 向数组元素赋值 395
10.1.3 C++不执行数组边界检查 397
10.1.4 使用循环来遍历数组 397
10.1.5 数组初始化 399
10.1.6 DWORD类型的颜色数组 401
10.1.7 隐式指定数组的大小 402
10.1.8 复制数组 402
10.1.9 将数组作为实参传给函数 403
10.1.10 比较两个数组 406
10.1.11 交换数组元素 417
10.1.12 部分填充的数组 417
10.2 数组排序 424
10.3 二维数组 432
10.3.1 声明二维数组 433
10.3.2 访问二维数组中的元素 433
10.3.3 初始化二维数组 435
10.3.4 向函数传递二维数组 436
10.4 tile map 438
综合测验 458
编程练习 460
第11章 字符串和文件 463
11.1 字符串处理 463
11.1.1 char数据类型 463
11.1.2 字符串在内存中的存储方式 464
11.1.3 用char数组存储字符串 464
11.1.4 显示char数组存储的字符串 465
11.1.5 使用标准C++库函数进行字符串处理 465
11.1.6 字符串数组 475
11.2 文件输入和输出 478
11.2.1 文件名 479
11.2.2 文件编号 480
11.2.3 打开输出文件 480
11.2.4 向输出文件写入数据 481
11.2.5 关闭输出文件 482
11.2.6 打开输入文件 482
11.2.7 从输入文件读取数据 483
11.2.8 关闭输出文件 483
11.2.9 判断文件是否打开 484
11.2.10 使用循环处理文件 489
11.2.11 检测文件尾 489
11.3 保存游戏的最高分 492
综合测验 500
编程练习 503
第12章 面向对象编程 505
12.1 过程式编程和面向对象编程 505
12.1.1 对象重用 506
12.1.2 日常生活中的一个对象的例子 506
12.1.3 OOP术语 507
12.2 类和对象 507
12.2.1 声明类 509
12.2.2 赋值函数和取值函数 511
12.2.3 定义成员函数 511
12.2.4 创建对象 513
12.2.5 构造器 516
12.2.6 从同一个类创建多个对象 519
12.2.7 重载成员函数 520
12.2.8 重载构造器 523
12.2.9 创建对象数组 526
12.2.10 对象作为实参传给函数 530
12.2.11 析构器 531
12.3 继承 537
12.3.1 常规化和和特殊化 537
12.3.2 继承和“属于”关系 537
12.3.3 向基类构造器传递实参 543
12.4 面向对象的游戏:Balloon Target 550
综合测验 557
编程练习 558
附录A 下载和安装必要的软件 561
附录B ASCII字符集 567