-
我的编程感悟:游戏之旅【附目录】
资源介绍
本版本与网上其他资源不同之处在于,此版本可进行编辑,搜索,已进行内容识别扫描。可全选,可编辑,可剪切文字。 部分目录如下:
第1 章计算机,游戏,我_
我,云风,从二十年前的计
算机游戏萌芽阶段一路走来。计
算机,并不神秘。程序,也只是
表达计算机控制逻辑的符号而
巳。
第2 章算法,程序的灵魂
算法,先千计算机存在于世,
比编程语言本身更为蜇要C 语言
只是工具,算法才是灵魂。这里
简单介绍了数据结构的基本知
识、算法放率的评估方法、几种
NP 问题的定义。
这里对游戏中最常用的搜索
算法问题之一寻路问题做了些许
探讨,并展开介绍了在以后可能
被广泛使用的智能算法。最后用
几个实例探讨了优化问题。
1.1 计算机...................................................................... 2
1.2 计算机游戏............................................................., 3
1.3 计算机与我......................, ... , ................................... 7
1.3 .1 启蒙............................................................... 7
1.3 .2 编程..... , .................................... , .......... , ......... 9
13
2.1 程序=算法+数据结构............................................ 14
2.1.1 算法,.......................................................... ,, 15
2.1.2 数据结构,.................................................... 17
2.2 搜索算法,.............. . ............ .... ..................... . .. . ....... 23
2.2.l 地图寻路问题................................................ 23
2.2.2 博弈问题,...................................................... 27
2.2.3 更为广泛的运用............................................ 28
2.3 智能算法,............................................................... 29
2.3.1 遗传算法(Genetic Algorithm) .... ·........ …... 29
2.3.2 模拟退火算法(Simulated Annealing) ....... 31
2.3.3 禁忌搜索(Tabu Search) ............................. 33
2.3.4 人工神经网络
(Artificial Neural Network) …..... ….............. 34
2.4 优化,....................................................................... 36
2.4.1 质数问题....................................................... 36
1.4.2 俄罗斯方块竞赛............................................ 37
2.5 Apple II 上的编程之路.......................................... 39
XIII
第1 章计算机,游戏,我_
我,云风,从二十年前的计
算机游戏萌芽阶段一路走来。计
算机,并不神秘。程序,也只是
表达计算机控制逻辑的符号而
巳。
第2 章算法,程序的灵魂
算法,先千计算机存在于世,
比编程语言本身更为蜇要C 语言
只是工具,算法才是灵魂。这里
简单介绍了数据结构的基本知
识、算法放率的评估方法、几种
NP 问题的定义。
这里对游戏中最常用的搜索
算法问题之一寻路问题做了些许
探讨,并展开介绍了在以后可能
被广泛使用的智能算法。最后用
几个实例探讨了优化问题。
1.1 计算机...................................................................... 2
1.2 计算机游戏............................................................., 3
1.3 计算机与我......................, ... , ................................... 7
1.3 .1 启蒙............................................................... 7
1.3 .2 编程..... , .................................... , .......... , ......... 9
13
2.1 程序=算法+数据结构............................................ 14
2.1.1 算法,.......................................................... ,, 15
2.1.2 数据结构,.................................................... 17
2.2 搜索算法,.............. . ............ .... ..................... . .. . ....... 23
2.2.l 地图寻路问题................................................ 23
2.2.2 博弈问题,...................................................... 27
2.2.3 更为广泛的运用............................................ 28
2.3 智能算法,............................................................... 29
2.3.1 遗传算法(Genetic Algorithm) .... ·........ …... 29
2.3.2 模拟退火算法(Simulated Annealing) ....... 31
2.3.3 禁忌搜索(Tabu Search) ............................. 33
2.3.4 人工神经网络
(Artificial Neural Network) …..... ….............. 34
2.4 优化,....................................................................... 36
2.4.1 质数问题....................................................... 36
1.4.2 俄罗斯方块竞赛............................................ 37
2.5 Apple II 上的编程之路.......................................... 39
XIII
第3 章编程语言
至少要学会一种编程语言,
才可能编写游戏软件。流传于世
的编程语言数以百计,但真正流
行的却不多。各种编程语言之间
有它们的共通性,但也并非能够
一通百通,甚至也不存在一种适
合娇决所有问题的语言。
我认为大部分游戏程序员都
应该掌握工作平台的汇编语言。
这对理解硬件, 写出更好的代码,
还有软件调试都有莫大的帮助。
第4 章前Windows 时代
现在, Win d ows 一统*,
它帮我们稳藏了硬件的许多东西。
这一章是对1 0 年前知识的一个回
顾,它们如今已经沉寂在历史中,
或是被Windows 掩盖。但是, 作
为喜爱创根l河底的程序员,我们有
必要对Window s 之前的时代有一
些了解。
XIV
3.1 C 语言................................................, .. ,, .......... ,.,,. 46
3.2 BASIC ..................................................................... 50
3.3 Ct+ ......................................................................... 51
3 .4 汇编语言,............................................................... 54
3.4.1 概述.............................., ... , ....................... ,,, .. 55
3.4.2 程序的本质....., .. , ... , ...................................... 57
3.4.3 寄存器........................................................... 58
3.4.4 寻址方式....................................................... 60
3.4.5 汇编指令....................................................... 61
3.4.6 CIC++ 语言和汇编....................................... 62
3.4.7 ,J 、结... . .. .. . .. .. .... .... ....... .... .. . . .. ............ .. ........... 63
3.5 其他语言................................................................ 63
3.5.1 Forth .............................................................. 63
3.5.2 Lisp ................................................................ 64
3.5.3 Java····..................................................... ....... 64
3.5.4 Python 、Lua 、更多...................................... 65
4.1 386 保护模式......................................................... 68
4.2 VGA 至U VESA ...................................................... 70
4.2.1 超越BGI ...................................................... 70
4.2.2 VGA·....... ··· · ···............................................... 72
4.2.3 VESA 标准................................................... 72
4.2.4 花絮............................................................... 74
4.3 保护模式下的开发工具.... …... ……............. ………··75
4.4 闲话Allegro .......................................................... 81
4.4.1 用C 与汇编写成的程序库….... …·….............. 81
442 BITMAP···.....................................................8 2
4.4.3 Sprite···.. ·.. ·.... ·.. ·.. ··.. ·.. ·········.. ··.... ···············.. ··85
4.4.4 几何图形和3D··........................................... 89
4.4.5 数据文件............... .-....................................... 91
4.4.6 声音............................................................... 92
4.4.7 其他的部分................................................... 93
45
67
第5 章Windows 编程
如果我们在Window s 下开
发游戏,那么理惮Window s 系统
就是尤为重要的事情。Window s
只是一个操作系统的特例,不属
子计算机理论知识的范畴。这导
致了许多已经掌握了编程知识,
理论功底也很扎实的程序员, 面
对Window s 下的开发无可适从。
第6 章汇编优化
汇编优化, 是在高性能游戏
引擎设计中很难避免的一个环
节。虽然不用汇编去做优化依然
可以写出高性能的程序,但优化
却可以变得更好。
但是,这一章并非从汇编开
始谈起。相反,一开始我就花了
不少笔墨谈汇编之外的知识。即
使是一些技巧性的细节, 也并非
必须用汇编才可以做到。
这一章着重介绍了在CIC++
中和汇编进行混合编程的方法和
技巧,然后才具体谈到汇编指令
的高效使用策略。
4.4.8 ,J 、结............................................................... 94
4.5 cfido 中国惠多网.................................................. 94
5.1 Windows 编程入门............................, ................. 104
5.1.1 Windows 版本综述...... ,, ..... , ........................ 105
5.1.2 操作系统的核心................ ., ........................ 107
5.1.3 Windows API 和DLL.. ·······......................... 110
5.14 COM··........................................................... 111
5.1.5 Windows 的窗口和消息处理与传递........... 114
5.1.6 Windows GDI .................................. ............ 125
5.2 控制游戏的速度,................................................. 130
5 .3 浅谈M FC .................. .. ......................................... 132
5.4 小结,............................................................. . ....... 132
6.1 浅谈代码优化............................................... ..... .. 138
6.2 并不仅仅是汇编.................................................. 139
6.2.1 在算法实现时减少上下文的依赖关系.. ….. 139
6.2.2 低效的静态变量.................................... ... ... 140
6.2.3 数据的组织.................................... ... .......... 141
6.2.4 消除除法..................................................... 142
6.2.5 避免过大的循环.......................................... 144
6.3 汇编和CIC++ 的混合编程.................................. 146
6.3.1 使用外置的汇编编译器.. . ....... …............. …·146
6.3.2 使用内嵌汇编·· ·· · ··· ···········........................... 148
6.3.3 C++ 的函数调用规则........ ……..................... 150
6.3.4 寄存器的使用...................................... ........ 152
6.3.5 _declspec(naked)· ·· ·.... · · ·· · · ··... ·... ·.... · ·· · · ·· · ··.... 152
6.4 指令使用的技巧.................................................. 153
6.4.1 LEA: 别样的内存寻址指令................……·153
6.4.2 BSWAP: 扩展寄存器的个数......... ….... …··154
101
135
XV
第7 章S-I M D 指令
单指令多数据(SIMD , Single Instructio
n-Mu l tiple- D ata) 编程是
现代CP U 高速处理多媒体数据
的发展方向。好的工具摆在一边
不去用就是一种浪费。
这里介绍得多的是MMX 使
用技巧,这方而也是我用得比较
多的,勉强算得上经验丰富。
第8 章引擎中的优化
单从内容来看,这一章是本
书的独家内容。我得以成名的开
源游戏引擎“风魂”的几乎所有
优化策略都在这章公开出来。虽
然引擎源码一直都是公开的, 想
研究的人自然可以通过阅读代码
来学习,但是,由作者本人来解
释其中的优化策略,这是第一次
的文字记录。
XVI
6.4.3 缩短指令的宇节数............ . .... . .................…155
6.4.4 避免跳转指令............................................. 159
6.5 Pentium 的汇编优化策略...... ….......................... 161
6.5.1 UV 流水线................................................... 163
6.5.2 AGI 地址生成互锁
( Address Generation Interlock)· · ………... 167
6.5.3 Pentium Pro, Pentium II 和Pentium III
的汇编优化策略......................................... 168
6.5.4 Pentium 4 的汇编优化策略…...... …............. 178
6.5.5 如何测试代码的速度…............................... 181
6.5.6 汇编能干的事情.......................................... 183
7.1 单指令多数据编程...... .. ..... ...... .. .. . .. .. ..... ... .. .. ...... 186
7.1.1 Alpha 混合.................................................. 187
7.2 MMX .................................................................... 191
7.2.1 MMX 的指令概况....................................... 192
7.2.2 SSE 及其对MMX 的扩展,......................... 194
7.2.3 SIMD 技术在C 语言环境下的使用...…….. 196
7.2.4 MMX 编码技巧.......................................... 197
7.2.5 SIMD 的应用举例...................................... 201
7.2.6 SIMD 编程注意要点. .................................. 203
7.2.7 SIMD 的性能检测....................................... 204
8.1 Blit 的优化........................................................... 207
8.2 脏矩形优化............................ . ............................. 209
8.2.1 "风魂”中改进的脏矩形算法...........…..... 215
8.2.2 滚动优化..................................................... 219
8.2.3 覆盖优化............................................. . ....... 222
8.2.4 脏矩形在3D 游戏界面中的运用....... .. .. . .... 224
8.2.5 时间和空间的权衡...................................... 229
8.2.6 关于估算..................................................... 230
185
205
- 上一篇: 最新VESA SVGA图形图像编程秘技
- 下一篇: VESA 电脑图像标准