目录 1
第1章 .Nettrix:GDI+与冲突检测 1
1.1 GDI+基本概念 1
1.1.1 路径梯度 1
1.1.2 α混合 2
1.1.3 基数样条函数 2
1.2 使用Graphics对象执行图形操作 3
1.2.1 使用PaintEventArgs参数创建Graphics对象 3
1.2.3 从图像中创建Graphics对象 4
1.2.2 使用窗口句柄创建Graphics对象 4
1.2.4 从一个指向设备上下文的特定句柄创建Graphics对象 5
1.3 创建梯度 5
1.4 冲突检测 6
1.4.1 限定框算法 7
1.4.2 邻近性检测算法 10
1.5 优化计算量 13
1.5.1 平铺游戏区域 14
1.5.2 位分区 14
1.5.3 位数组分区 16
1.6 把算法扩展到三维图形情况下 17
1.7 游戏开发方案 18
1.8 游戏项目开发 19
1.8.1 类图:最初设计 19
1.8.2 游戏引擎 21
1.8.3 类图:最终设计 22
1.9 编码阶段 23
1.9.1 概略设计:编写Square类 23
1.9.2 第二阶段设计:编写Block类 27
1.10 最终设计:编写GameField类和游戏引擎 39
1.11.1 关于如何显示下一个方块的编码设计 46
1.11 添加最终修饰 46
1.11.2 关于游戏暂停方式的编码设计 47
1.11.3 关于窗口重绘的编码设计 47
1.11.4 进一步改进 48
1.12 小结 48
1.13 参考文献 49
第2章 .Netterpillars:人工智能和Sprite 50
2.1 面向对象编程 51
2.2 人工智能 53
2.2.1 AI的类型 53
2.2.3 AI的一般技术 54
2.2.2 对AI的一般考虑 54
2.2.4 发挥您的想象力 58
2.2.5 保持可重用的图形库和对象库 58
2.3 Sprite和性能提高技巧 58
2.3.1 Sprite:快速的和透明的 59
2.3.2 编写Sprite类的属性代码 60
2.3.3 Sprite类的Constructor方法 61
2.3.4 Sprite类的Draw方法和Erase方法 62
2.4 游戏开发方案 64
2.5.1 定义游戏程序中的类以及Game Engine 65
2.5 游戏项目规范 65
2.5.2 主程序结构 71
2.5.3 定义游戏界面 72
2.5.4 优化游戏规范 73
2.6 编码阶段 74
2.6.1 第一阶段:对静态对象进行编码 74
2.6.2 第二阶段:对游戏角色进行编码 80
2.6.3 第三阶段:对游戏引擎和冲突检测进行编码 87
2.6.4 第四阶段:对配置界面和游戏终止过程进行编码 91
2.6.5 第五阶段:对Netterpillar AI类进行编码 97
2.7.1 编写游戏暂停过程的代码 101
2.7 为游戏添加最后的修饰 101
2.7.2 改进游戏终止界面 102
2.7.3 编写垃圾收集代码 103
2.7.4 进一步改进 104
2.8 小结 104
第3章 Managed DirectX基础知识:Direct3D基本概念、DirectX与GDI+ 105
3.1 DirectX 106
3.1.1 DirectX的顶层对象 106
3.1.2 理解适配器 107
3.1.3 理解设备 108
3.1.4 理解显示模式 111
3.1.5 创建一个简单的Direct3D程序 112
3.2 3-D坐标系和3-D投影 113
3.2.1 理解矩阵和3-D变换 116
3.2.2 定位camera 117
3.3 Drawing Primitives和Texture 118
3.4 应用程序开发方案 124
3.5 应用程序规范说明 124
3.6 编码阶段 125
3.6.1 第一步:编写主窗口 126
3.6.2 第二步:编写第一个测试窗口 131
3.6.3 第三步:创建一个全屏模式下运行的程序示例 137
3.6.4 第四步:使用透明的纹理图像 139
3.6.5 第五步:改变漫射光色彩 142
3.6.6 第六步:测试矩阵变换 145
3.7 添加最终修饰 151
3.8 关于DirectX和GDI+的更多内容 152
3.9 小结 152
第4章 Space Donuts游戏 154
4.1 sprite 155
4.1.1 显示sprite 156
4.1.2 使sprite动起来 158
4.1.3 移动和旋转 160
4.1.4 输入和音效 162
4.2 Space Donuts 165
4.2.1 游戏开发方案 166
4.2.2 游戏规范 166
4.2.3 控制sprite 167
4.2.4 Main事件 173
4.2.5 游戏循环过程 174
4.2.6 进一步改进 180
4.3 小结 180
5.1 Spacewar 181
第5章 Spacewar 181
5.2 方法论:使用别人所编写的代码所面临的挑战 183
5.3 使用Application Wizard 183
5.3.1 Main类 185
5.3.2 GameClass类 186
5.3.3 初始化GameClass类 187
5.3.4 游戏的主循环过程 188
5.4 Direct Play 193
5.5 小结 200
6.1 DirectX基本知识:Application Wizard 201
第6章 Spacewar3D:网格、缓冲区和纹理 201
6.2 Spacewar3D 211
6.3 游戏开发方案 211
6.4 游戏规范 212
6.4.1 第1步:为Direct3D游戏创建一个简单的shell 212
6.4.2 第2步:创建游戏进入界面 213
6.4.3 第3步:创建游戏环境 216
6.4.4 第4步:行进到外部空间 217
6.4.5 第5步:在空间中移动 224
6.4.6 第6步:为游戏添加ship和音效 228
6.4.7 第7步:为单人游戏添加一个简单的对手形象 235
6.4.8 第8步:添加一个显示窗口来帮助游戏者寻找对手 237
6.4.9 第9步:完成游戏设计 240
6.5 小结 242
第7章 为Spacewar3D添加视觉效果 243
7.1 point sprite 243
7.2 第10步:为Spacewar3D添加推进效果 244
7.2.1 定义point sprite的数据 245
7.2.2 处理设备事件 245
7.2.3 更新效果 246
7.2.4 显示效果 248
7.3 第11步:为Spacewar3D添加爆炸效果 250
7.4 第12步:为Spacewar3D添加冲击波效果 252
7.5 小结 253
第8章 进一步学习游戏编程 254
8.1 继续学习 254
8.2 编程风格 254
8.2.1 风格一:必须使用源代码管理 255
8.2.2 风格二:当程序失败时知道应该做些什么 256
8.2.3 风格三:知道怎样避免程序失败 256
8.3 补充说明一些内容 257
8.2.5 风格五:知道什么能够使游戏更加有趣 257
8.2.4 风格四:寻求网络支持 257
8.4 愉快的学习历程 259
第9章 附加内容:把.Nettrix游戏移植到Pocket PC 260
9.1 为移动设备创建程序 260
9.1.1 使用.NET创建智能设备应用程序 261
9.1.2 选择运行平台和项目类型 261
9.1.3 把应用程序部署给Emulator 262
9.2 在移动设备上运行桌面PC程序及其操作系统 264
9.3 游戏开发方案 264
9.4 游戏项目规范 265
9.5.1 为Pocket PC修改游戏代码 266
9.5 编码阶段 266
9.5.2 更新Square类 268
9.5.3 更新Block类 270
9.5.4 更新游戏窗体 270
9.6 添加最终修饰 273
9.7 小结 274
附录A 参考文献 275
附录B 游戏的动机 278
附录C 我是如何设计游戏的 283
附录D 开发成功游戏的指导方针 290