一个游戏程序员的学习资料
想 起写这篇文章是在看侯杰先生的《深入浅出MFC》时,突然觉得自己在大学这几年关于游戏编程方面还算是有些心得,因此写出这篇小文,介绍我眼中的游戏程序 员的书单与源代码参考。一则是作为自己今后两年学习目标的备忘录,二来没准对别人也有点参考价值。我的原则是只写自己研究过或准备研究的资料,所以内容无 疑会带上强烈的个人喜好色彩,比如对网络,数据库等重要方面完全没有涉及。因为自己主要对三维图形引擎,人工智能算法,脚本系统,反外挂(反反外挂? ^-^)等方面感兴趣。这学期电脑都没联网了,在岳麓山闭关修炼中(^-^),连这篇文章都得在学校图书馆电子阅览室(电影放映室?)上传,内容很多凭记 忆写出,如有误差敬请订正。程序员应该在理论学习与实践编程中反复迭代,所以学习资料是一回事,须知尽信书不如无书。
一、书籍:
算法与数据结构:
《数据结构(C语言版)》——严蔚敏、吴伟民 清华出版社
我觉得其配套习题集甚至比原书更有价值,每个较难的题都值得做一下。
《Introduction to Algorithms》第二版 中文名《算法导论》
关 于算法的标准学习教材与工程参考手册,在去年CSDN网站上其翻译版竟然评为年度二十大技术畅销书,同时《程序员》杂志上开设了“算法擂台”栏目,这些溯 源固本的举动,不由得使人对中国现今浮躁不堪的所谓“IT”业又产生了一线希望。这本厚厚的书,幸亏打折我才买得起。虽然厚达千页,但其英文通俗晓畅,内 容深入浅出,可见经典之作往往比一般水准的书还耐读。还能找到MIT的视频教程,第一节课那个老教授嘻皮笑脸的,后面就是一长发助教上课了。
《C语言名题精选百则 技巧篇》——冼镜光 机械工业出版社
作 者花费一年时间搜集了各种常见C程序段的极具技巧性的编程法,其内容都是大有来头的,而且给出了详细的参考资料。如一个普通的Fibonacci数就给出 了非递归解、快速算法、扩充算法等,步步深入,直至几无油水可榨。对于视速度如生命,连一个普通的浮点数转化为整数都另辟蹊径以减少CPU cycle的游戏程序员,怎可不看?
《计算机算法基础(第二版)》—— 佘祥宣等 华中科大出版社
我看到几个学校的研究生拿它作教材(研究生才开算法,太开玩笑了吧)。这本书薄是薄了点,用作者的话来说,倒也“精辟”。其实此书是《Fundamentals of Computer Algorithms》的缩写版,不过原书出版太久了,反正我是没找到。
《The Art of Computer Programming》Volume 1-3
作 者Donald E. Knuth是我心目中与冯.诺依曼、Dijkstra、Shannon并列的四位大师。这本书作者从读大学本科时开始写,一直写到博士时,十年磨一剑,足 见其下足了功夫。可作为计算机技术的核心——算法与数据结构的终极参考手册。创新处也颇多,譬如常见的Shell排序他在书中提出可用(3i-1)/2的 间隔,这使其稍快于O(n1. 5)。当然这套书描述高度数学化,为此恐怕一般的人(我?)最好还得先看一本数学预备书《Concrete Mathematics》(直译为混凝土数学?^-^)再说。可惜的是这套书才出到第三卷,并没有覆盖全部常见的算法内容。不过好在对于游戏程序员来说, 越常见的算法用得越多,这也不算是什么要命的损失。
《STL源码剖析》—— 侯捷 华中科大出版社
侯 捷不用介绍了,华人技术作家中的旗舰,说其有世界级水准也不为过。这本书我以为是C++与数据结构的葵花宝典(欲练此功,必先自宫)。也就是说,不下几层 地狱很难看懂,因为它要求的预备知识太多了,如STL、数据结构、泛型编程、内存管理都要很扎实(为此是不是还要看看有内存管理设计模式之称的 《Small Memory Software》这本书呢?),但是一旦看懂,真会是所向披靡。
《Data Structures for Game Programmers》
每个数据结构的例程都是一个小游戏,还用SDL库实现了一个算法演示系统。虽然内容失之于浅,但起码让人了解了数据结构在游戏中的作用。
其 实游戏程序并不比其它程序特殊,甚至要求基本功更加扎实,所以花时间做一些看似与实际应用不甚相干的习题,对今后的工作是大有裨益的。而且有些应用很广的 算法,如常被人津津乐道的A*算法及其变种,牵涉到图的检索周游与分枝-限界法,恐怕还得读一些艰深的论文才能充分明白运用,如Donald E. Knuth的《An analysis of alpha-beta cutoffs》。其实还有不少此类的好书,如《Data Structures and Algorithms in C++》、《Programming Pearls》、《More Programming Pearls》(算法珠玑)等,我却以为要先看严谨一点的著作,再看内容随笔一点的书。
汇编:
《IBM-PC 汇编语言程序设计》第二版
国内经典教材。
《The Art of Assembly Language》
这本书足有1600页,噢!
C语言:
《The C Programming Language》第二版
虽然篇幅短小,但每个例程都很经典。(我们老师开始拿它作教材,后面换为谭小强的C语言书,理由为:例子尽是些文本处理。我就纳了闷了,难道现代的计算机程序不是将大量时间消耗在字符串与文本的处理上吗?)