第1章 .Nettrix:GDI+与冲突检测 1
1.1 GDI+基本概念 1
1.1.1 路径梯度 2
1.1.2 α混合 2
1.1.3 基数样条函数 2
1.2 使用Graphics对象执行图形操作 3
1.2.1 使用PaintEventArgs参数创建Graphics对象 4
1.2.2 使用窗口句柄创建Graphics对象 4
1.3 创建梯度 5
1.2.4 从一个指向设备上下文的特定句柄创建Graphics对象 5
1.2.3 从图像中创建Graphics对象 5
1.4 冲突检测 7
1.4.1 限定框算法 7
1.4.2 邻近性检测算法 11
1.5 优化计算量 15
1.5.1 平铺游戏区域 16
1.5.2 位分区 16
1.5.3 位数组分区 18
1.6 把算法扩展到三维图形情况下 19
1.7 游戏开发方案 20
1.8 游戏项目开发 21
1.8.1 类图:最初设计 22
1.8.2 游戏引擎 23
1.8.3 类图:最终设计 24
1.9 编码阶段 25
1.9.1 概略设计:编写Square类 26
1.9.2 第二阶段设计:编写Block类 29
1.10 最终设计:编写GameField类和游戏引擎 43
1.11 添加最终修饰 50
1.11.1 关于如何显示下一个方块的编码设计 50
1.11.2 关于游戏暂停方式的编码设计 51
1.11.4 进一步改进 52
1.11.3 关于窗口重绘的编码设计 52
1.12 本章小结 53
1.13 参考文献 54
第2章 .Netterpillars:人工智能和Sprite 55
2.1 面向对象编程 56
2.2 人工智能 58
2.2.1 AI的类型 58
2.2.2 对AI的一般考虑 59
2.2.3 AI的一般技术 59
2.3 Sprite和性能提高技巧 63
2.2.4 发挥您的想象力 63
2.2.5 保持可重用的图形库和对象库 63
2.3.1 Sprite:快速的和透明的 65
2.3.2 编写Sprite类的属性代码 65
2.3.3 Sprite类的Constructor方法 66
2.3.4 Sprite类的Draw方法和Remove方法 68
2.4 游戏开发方案 69
2.5 游戏项目规范 70
2.5.1 定义游戏程序中的类以及Game Engine 71
2.5.2 主程序结构 77
2.5.3 定义游戏界面 78
2.5.4 优化游戏规范 80
2.6 编码阶段 80
2.6.1 第一阶段:对静态对象进行编码 81
2.6.2 第二阶段:对游戏角色进行编码 87
2.6.3 第三阶段:对游戏引擎和冲突检测进行编码 95
2.6.4 第四阶段:对配置界面和游戏终止过程进行编码 99
2.6.5 第五阶段:对Netterpillar AI类进行编码 106
2.7.1 编写游戏暂停过程的代码 111
2.7.2 使游戏速度维持在控制下 111
2.7 为游戏添加最后的修饰 111
2.7.3 改进游戏终止界面 112
2.7.4 编写垃圾收集代码 114
2.8 本章小结 114
第3章 Managed DirectX基础知识:Direct3D基本概念、DirectX与GDI+ 115
3.1 DirectX 116
3.1.1 DirectX的顶层对象 116
3.1.2 理解适配器 117
3.1.3 理解设备 118
3.1.5 创建一个简单的Direct3D程序 122
3.1.4 理解显示模式 122
3.2 3-D坐标系和3-D投影 124
3.2.1 理解矩阵和3-D变换 126
3.2.2 定位camera 128
3.3 Drawing Primitives和Texture 129
3.4 应用程序开发方案 135
3.5 应用程序规范说明 136
3.6 编码阶段 137
3.6.1 第一步:编写主窗口 137
3.6.2 第二步:编写第一个测试窗口 143
3.6.3 第三步:创建一个全屏模式下运行的程序示例 149
3.6.4 第四步:使用透明的纹理图像 151
3.6.5 第五步:改变漫射光色彩 154
3.6.6 第六步:测试矩阵变换 158
3.7 添加最终修饰 164
3.8 关于DirectX和GDI+的更多内容 166
3.9 本章小结 166
第4章 Space Donuts游戏 169
4.1 sprite 170
4.1.1 显示sprite 171
4.1.2 使sprite动起来 173
4.1.3 移动和旋转 176
4.1.4 输入和音效 178
4.2 Space Donuts 181
4.2.1 游戏开发方案 182
4.2.2 游戏规范 182
4.2.3 控制sprite 183
4.2.4 Main事件 190
4.2.5 游戏循环过程 191
4.2.6 进一步改进 197
4.3 本章小结 198
5.1 Spacewar 199
第5章 Spacewar 199
5.2 方法论:使用别人所编写的代码所面临的挑战 201
5.3 使用Application Wizard 201
5.3.1 Main类 203
5.3.2 GameClass类 204
5.3.3 初始化GameClass类 205
5.3.4 游戏的主循环过程 206
5.4 Direct Play 212
5.5 本章小结 219
6.1 DirectX基本知识:Application Wizard 221
第6章 Spacewar3D:网格、缓冲区和纹理 221
6.2 Spacewar3D 232
6.3 游戏开发方案 232
6.4 游戏规范 233
6.4.1 第1步:为Direct3D游戏创建一个简单的shell 233
6.4.2 第2步:创建游戏进入界面 234
6.4.3 第3步:创建游戏环境 237
6.4.4 第4步:行进到外部空间 239
6.4.5 第5步:在空间中移动 247
6.4.6 第6步:为游戏添加ship和音效 251
6.4.7 第7步:为单人游戏添加一个简单的对手形象 259
6.4.8 第8步:添加一个显示窗口来帮助游戏者寻找对手 260
6.4.9 第9步:完成游戏设计 264
6.5 本章小结 266
第7章 为Spacewar3D添加视觉效果 267
7.1 point sprite 267
7.2 第10步:为Spacewar3D添加推进效果 268
7.2.1 定义point sprite的数据 269
7.2.2 处理设备事件 270
7.2.3 更新效果 271
7.2.4 显示效果 272
7.3 第11步:为Spacewar3D添加爆炸效果 276
7.4 第12步:为Spacewar3D添加冲击波效果 277
7.5 本章小结 278
第8章 进一步学习游戏编程 281
8.1 继续学习 281
8.2 编程风格 282
8.2.1 风格一:必须使用源代码管理 282
8.2.2 风格二:当程序失败时知道应该做些什么 283
8.2.3 风格三:知道怎样避免程序失败 284
8.2.4 风格四:寻求网络支持 284
8.3 补充说明一些内容 285
8.2.5 风格五:知道什么能够使游戏更加有趣 285
8.4 愉快的学习历程 287
第9章 附加内容:把.Nettrix游戏移植到Pocket PC 289
9.1 为移动设备创建程序 289
9.1.1 使用.NET创建智能设备应用程序 290
9.1.2 选择运行平台和项目类型 290
9.1.3 把应用程序部署给Emulator 291
9.2 在移动设备上运行桌面PC程序及其操作系统 293
9.3 游戏开发方案 293
9.4 游戏项目规范 294
9.5.1 为Pocket PC修改游戏代码 295
9.5 编码阶段 295
9.5.2 更新GameEngine类 297
9.5.3 更新Square类 298
9.5.4 更新Block类 299
9.5.5 更新游戏窗体 300
9.6 添加最终修饰 304
9.7 本章小结 304
附录A 参考文献 305
附录B 游戏的动机 309
附录C 我是如何设计游戏的 315
附录D 开发成功游戏的指导方针 323