第1篇 Windows编程基础 2
第1章 引言 2
1.1 电子游戏产业 2
1.1.1 概述 3
1.1.2 游戏产业价值链 3
1.1.3 电子游戏的历史 4
1.1.4 电子游戏产业的游戏分类 5
1.2 Windows的发展历史 7
1.3 Windows应用程序开发 9
1.4 一些说明 11
1.5 习题 12
第2章 学习使用Visual C++ 13
2.1 Visual C++安装和使用 13
2.1.1 Visual C++的版本信息 13
2.1.2 创建Win32应用程序 14
2.2 Win32控制台应用程序设计 17
2.2.1 预编译头文件 17
2.2.2 Unicode编码 18
2.2.3 TCHAR 19
2.2.4 Debug和Release 20
2.2.5 基本的调试方法 21
2.3 良好的编程习惯 21
2.3.1 使用正确的代码格式 21
2.3.2 采用匈牙利命名法 22
2.4 Win32 API中的常见数据类型 22
2.5 习题 24
第3章 创建窗口与消息响应 25
3.1 Windows应用程序的基本概念 25
3.1.1 窗口 25
3.1.2 入口函数 26
3.1.3 消息和窗口函数 28
3.1.4 进队消息与不进队消息 29
3.1.5 使用MSDN来学习窗口消息 30
3.2 创建窗口 30
3.2.1 包含头文件 33
3.2.2 定义类名和标题字符串 33
3.2.3 注册窗口 33
3.2.4 窗口类的风格 34
3.2.5 创建窗口 35
3.2.6 窗口风格 35
3.2.7 显示窗口 36
3.2.8 更新窗口 37
3.2.9 消息循环 37
3.2.10 窗口函数 38
3.2.11 应用程序的退出 40
3.3 关键在于应用 41
3.4 习题 42
第4章 Windows程序设计基础 43
4.1 GDI的各种概念 43
4.1.1 什么是GDI 43
4.1.2 图形设备上下文 43
4.1.3 WM PAINT消息 44
4.2 GDI版本的Hello,World! 44
4.2.1 BeginPaint和EndPaint 45
4.2.2 输出文本 45
4.3 打字程序 47
4.3.1 按键消息 47
4.3.2 字符消息 49
4.3.3 强制刷新 49
4.3.4 简陋的打字程序 50
4.4 涂鸦程序 51
4.4.1 GDI函数 51
4.4.2 涂鸦程序1.0 52
4.4.3 鼠标消息 55
4.4.4 GetDC与ReleaseDC 56
4.4.5 设置字符串 56
4.4.6 画线与填充 57
4.4.7 涂鸦程序2.0 60
4.5 时钟 62
4.5.1 获取系统时间 64
4.5.2 生成和销毁定时器 65
4.5.3 获取按键的输入状态 67
4.5.4 WM_NCHITTEST 67
4.5.5 使用右键菜单 68
4.6 使用资源 70
4.6.1 使用图标资源 72
4.6.2 使用鼠标指针 73
4.6.3 使用菜单 74
4.6.4 加速键 77
4.7 文件内核对象 80
4.7.1 CreateFile 80
4.7.2 文件大小和文件位置 81
4.7.3 读/写文件 82
4.7.4 与文件相关的通用对话框 83
4.7.5 实现涂鸦文件读/写 85
4.8 习题 88
第5章 进一步提高Windows编程 89
5.1 图像文件的格式 89
5.2 位图 91
5.2.1 位图的概念 91
5.2.2 加载位图 92
5.2.3 设备DC与内存DC 92
5.2.4 BitBlt 93
5.2.5 绘制位图文件的基本流程 94
5.2.6 完整的代码 95
5.2.7 改变窗口的位置与尺寸 96
5.3 内存DC的应用 98
5.3.1 镂空图 98
5.3.2 一个小程序 100
5.3.3 为什么会有屏闪 103
5.3.4 背景滚动 105
5.4 俄罗斯方块 107
5.4.1 设计思路 107
5.4.2 设计BLOCK 110
5.4.3 CGame的设计 111
5.4.4 CGame的实现 113
5.5 习题 121
第2篇 游戏编程基础 124
第6章 库与Cxlmage库 124
6.1 库的基本概念 124
6.2 编译、链接、执行 125
6.3 静态库的基本编程 126
6.4 动态库编程 128
6.4.1 动态库基本编程过程 128
6.4.2 使用统一的头文件 130
6.4.3 再次审视编译链接执行 130
6.5 使用CxImage库 131
6.5.1 生成CxImage 132
6.5.2 通过DLL使用CxImage 133
6.5.3 使用CxImage显示图片 133
6.5.4 旋转图片 134
6.5.5 封装CxImage 135
6.6 习题 136
第7章 常用设计模式的介绍 137
7.1 面向对象程序设计 137
7.1.1 面向对象程序设计的三大机制 137
7.1.2 面向对象程序设计的原则 137
7.2 设计模式概论 139
7.3 模板方法模式 139
7.4 策略模式 141
7.5 习题 144
第8章 搭建Windows游戏程序框架 145
8.1 分析Win32项目的基本代码 145
8.2 游戏循环 147
8.3 “糟糕”的消息机制 148
8.3.1 同步函数与异步函数 148
8.3.2 实现游戏循环 149
8.4 利用模板方法模式搭建Windows游戏程序框架 150
8.5 使用并完善框架类 155
8.5.1 使用cApplication 155
8.5.2 实现双缓冲技术避免屏闪 156
8.5.3 计算并显示帧率 157
8.6 查询按键及退出游戏的实现 159
8.6.1 获取按键状态 159
8.6.2 Escape退出 160
8.7 游戏暂停功能的实现 160
8.7.1 单击空格键暂停游戏 161
8.7.2 是否当前窗口判断游戏暂停 161
8.8 六字真言:输入、计算、输出 163
8.9 习题 163
第3篇 射击游戏 166
第9章 图像显示与背景 166
9.1 必要的数学运算 166
9.1.1 坐标和角度运算 166
9.1.2 敌机的旋转角度 167
9.1.3 边界检测 168
9.2 管理器的概念 168
9.2.1 怪物 169
9.2.2 怪物管理器 169
9.2.3 怪物仿真程序的逻辑 171
9.3 图片资源的管理 172
9.4 实现背景的滚动 173
9.4.1 背景类cBackground的声明 174
9.4.2 背景类cBackground的实现 174
9.4.3 背景类cBackground的使用 175
9.5 可移动对象接口类IMovable 176
9.5.1 可移动对象 176
9.5.2 可移动对象管理器 178
9.6 实现云彩 180
9.7 习题 181
第10章 飞机和子弹 182
10.1 总体设计 182
10.2 飞机 182
10.3 实现战机 183
10.4 敌机 184
10.4.1 整体设计 184
10.4.2 敌机类cEnemy 186
10.4.3 敌机管理器 186
10.4.4 敌机与战机的碰撞 189
10.4.5 使用敌机管理器类 189
10.5 敌机飞起来 190
10.5.1 敌机与策略 190
10.5.2 匀速策略类 192
10.5.3 策略管理器 192
10.5.4 直线型策略 194
10.5.5 让敌机具备跟踪功能 195
10.6 子弹 196
10.6.1 总体思路 196
10.6.2 子弹管理器 196
10.6.3 碰撞检测 198
10.6.4 发射 199
10.7 习题 204
第11章 实现关卡 205
11.1 XML编程基础 205
11.1.1 XML的基本概念 205
11.1.2 XML文件示例 207
11.1.3 使用XML Notepad 208
11.2 通过XML实现关卡 208
11.2.1 使用TinyXML 208
11.2.2 XML实现敌机类型 209
11.2.3 XML实现子弹类型 210
11.2.4 XML实现战机子弹 211
11.2.5 XML实现关卡脚本 212
11.3 习题 214
第4篇 知识拓展 216
第12章 Windows体系结构 216
12.1 多任务的操作系统 216
12.2 Windows的体系结构 216
12.2.1 核心态 217
12.2.2 用户态 218
12.3 抢先式多任务工作方式 219
12.4 Windows内存管理机制 221
12.5 多线程 223
12.6 习题 223
第13章 Windows高级编程 224
13.1 内核对象与内核对象句柄 224
13.1.1 内核对象 224
13.1.2 创建内核对象 225
13.1.3 使用计数 226
13.1.4 进程间共享内核对象 226
13.1.5 触发/未触发状态 226
13.2 进程 228
13.2.1 进程与线程 228
13.2.2 通过任务管理器查看程序的信息 229
13.2.3 创建子进程 230
13.2.4 终止进程 233
13.3 多线程编程 233
13.3.1 进程与线程 233
13.3.2 引入线程的好处 234
13.3.3 如何使用多线程 234
13.3.4 创建线程 235
13.3.5 多个线程使用同一个线程函数 237
13.3.6 线程的调度 238
13.4 互斥访问共享资源 239
13.4.1 提出问题 239
13.4.2 互锁函数 241
13.4.3 关键段操作 242
13.4.4 使用内核对象保证互斥访问 243
13.5 线程同步 248
13.5.1 单向的同步关系 249
13.5.2 循环的同步关系 250
13.6 习题 253
第14章 使用DirectX完成二维游戏绘制 254
14.1 DirectX概述 254
14.2 初始化Direct3D 255
14.2.1 获取IDirect3D9接口 256
14.2.2 构造D3DPRESENT_PARAMETERS结构体 256
14.2.3 创建IDirect3DDevice9对象 258
14.2.4 创建Direct3D窗口 258
14.3 显示图形 260
14.3.1 页面切换 260
14.3.2 在响应WM_PAINT消息的代码中进行绘制 261
14.3.3 顶点与FVF(灵活顶点格式) 263
14.3.4 三角形 264
14.3.5 绘制二维三角形 265
14.4 使用DirectGraphics进行2D图像处理 268
14.4.1 纹理 268
14.4.2 创建并使用纹理 269
14.4.3 常用渲染状态 271
14.5 把Direct3D融入框架中 272
14.5.1 纹理类 272
14.5.2 渲染系统类 274
14.5.3 使用渲染系统 276
14.6 习题 276
附录A Visual C++编译常见错误 277
附录B ASCII码表 281
附录C 标准模板库的使用 285
C.1 STL概述 285
C.1.1 要点 285
C.1.2 头文件 286
C.1.3 名字空间 286
C.1.4 迭代器 286
C.2 常用数据容器与数据结构 287
C.3 vector 288
C.3.1 插入数据 288
C.3.2 遍历 288
C.4 list 288
C.4.1 list的迭代器 289
C.4.2 遍历 289
C.4.3 删除元素 289
C.5 map 290
C.5.1 数据的插入和修改 291
C.5.2 数据的遍历 291
C.5.3 数据的查找 292
C.5.4 数据的清空与判空 292
C.6 使用标准模板库(STL) 292
参考文献 293