C++博客-luqingfei@C++-随笔分类-游戏开发http://www.cppblog.com/luqingfei/category/19311.html<font color='gray'>为中华之崛起而崛起!</font><br/> 兼听则明,偏听则暗。 zh-cnWed, 30 May 2012 05:09:13 GMTWed, 30 May 2012 05:09:13 GMT60一个简单的游戏服务器框架http://www.cppblog.com/luqingfei/archive/2012/05/29/176587.html路青飞路青飞Tue, 29 May 2012 02:18:00 GMThttp://www.cppblog.com/luqingfei/archive/2012/05/29/176587.htmlhttp://www.cppblog.com/luqingfei/comments/176587.htmlhttp://www.cppblog.com/luqingfei/archive/2012/05/29/176587.html#Feedback0http://www.cppblog.com/luqingfei/comments/commentRss/176587.htmlhttp://www.cppblog.com/luqingfei/services/trackbacks/176587.htmlhttp://software.intel.com/zh-cn/blogs/2012/03/22/400010056/?cid=sw:prccsdn2203

最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写什么。

第一部分 服务器逻辑

服务器这边简单的分为三个部分,客户端的连接首先到达网关服务器,网关这里有个线程用来监听来自与客户端的连接,然后在将这些数据发送到游戏逻辑服务器上,这个逻辑游戏服务器上,数据的交互就是通过与数据服务器进行交互。RecordServer专门用来处理与数据库的连接,查询这些事情。当然为了游戏服务器能够最大程度的不卡,肯定就得规定好网关服务器上的连接数量,免得像我们号称流畅的铁道部订票网络一样做个卡B,想想玩一局dota被卡的悲剧吧。当我们要做一个大型网游时,这三个服务器显然不够。当然在自己写的小游戏的时候就无所谓了,几个服务器全部架设在自己的破笔记本上,不就是启动几个程序而已。

这个感觉写得就差不多了,到细节吧。

第二部分 实现细节

这个就比较乱了,零零散散的,随便写了。这里很多都是对各种工具的封装,以便于自己 在项目的使用

1.make

项目这么多目录,这么多子目录,肯定得用工具去编译了,使用aclocal,automake,autoconf,make,就把我们的程序编译好了,编写自己configure.in文件,定义编译选项、链接库等等一系列乱七八糟的东西,然后对每个需要编译的子项目编写Makefile.am,有的需要要编译成库的,比如base等基类这些,其他的都编译成可执行文件了,GatewayServer,LogicalServer,RecordServer。

2.套接字封装,epoll使用

linux里,我们使用socket来读写网络上的数据,这个很简单了,gateway上一个客户端连接过来,我们就为它分配一个socket 描述符了,在网关上,一个线程用来accept,一个线程用来做数据的处理,当accept一个连接请求后,放到数据处理的线程,接受到一个数据,然后直接转发到logical server上,我们使用epoll_wait,来处理套接上的读写处理。每n ms处理一次循环,每次循环中使用一次epoll_wait,一次把这些有事件的socket取出来。

3.数据加密解密,压缩解压

对网络上的数据,为了保证安全性,必须对它们进行加密解密处理,这个简单了,网上各种内容,这里就不说了(全部写完了,有时间再写)。对数据进行压缩,能减少带宽吞吐,就是简单的调用几个zlib函数的调用,不细说,在前面转发的《zlib使用》中有讲,发现自己太懒,实在是懒得打字了。

4.线程封装,互斥量,读写锁

这些都是简单的使用RAII或其他方式,对这些东西进行一次本地封装。(应该得写一个线程池去管理这些线程,todo)

5.数据库封装

使用mysql,使用mysql的C API函数,这个必须得封装一下,不是每次数据的处理,都得去做很多事情,实现一个本地的数据的Field(列),Record(记录),Table(表),DataBase(数据库),RecordSet(查询结果集)。制作一个数据库连接句柄MysqlHandle,处理对数据库的连接,处理等,实现一个HandlerPool,,每次从Pool中取出一个句柄来对数据库进行查询,免得每次都去重新连接,什么的。

6.自己的内存池

在之前分享的文章中《内存池技术详解》《编写自己的内存分配器》,自己的《内存池应用》,已经很详细的说明了,内存池的制作,当然我在这里还是有一些改动的,但是大概思路就是这些了。

7.有一个状态机的实现

这个也在自己之前写的那个状态机相关的文章里,也做记录了。哈哈,实在是不想继续码字了,但是还是坚持下去。

8.lua与c++交互框架

这个暂时写了一半,等全部完成了,再来弄,反正就是像npc处理这些,脚本处理这些,使用tolua++。

9.tinyxml封装,正则表达式封装

tinyxml一个轻量级的xml解析器,很简单,反正是把这些现成的东西拿来自己用。正则表达式没有进入c++标准,但是还是很多现成的正则表达式的处理,直接用linux库下的regex.h,就是编译正则表达式,匹配结果这些,

10.log系统

一个项目怎么能没有自己的日志系统呢,反正就是打日志,往文件里面写东西,用std::fstream轻松搞定,定义好日志级别:error / debug / fatel / info这些

11.时间封装

这个必须有,否则自己还每次去调用get_clocktime,gmtime,time各种函数呀。

12.使用boost库里的,Noncopyable,Singleton这些设计方法,来写我们的代码

13.定义好各种信号句柄,信号发生时采用什么策略,如SIGPIPE,做忽略处理

待续。。。。。。。。(睡觉了)

游戏服务器技术应该算来已经很成熟了,相比客户端,它的技术更新速度很慢了。客户端这边,技术很多,各种游戏引擎比如3D的虚幻这些,什么粒子引擎,声音这些,页游的flash, html5,utility,,太多了,搞不过来呀。我先把服务器这边好好专专,其他的等以后再说吧。



路青飞 2012-05-29 10:18 发表评论
]]>
[转]一个游戏程序员的学习资料http://www.cppblog.com/luqingfei/archive/2012/05/29/176586.html路青飞路青飞Tue, 29 May 2012 02:17:00 GMThttp://www.cppblog.com/luqingfei/archive/2012/05/29/176586.htmlhttp://www.cppblog.com/luqingfei/comments/176586.htmlhttp://www.cppblog.com/luqingfei/archive/2012/05/29/176586.html#Feedback0http://www.cppblog.com/luqingfei/comments/commentRss/176586.htmlhttp://www.cppblog.com/luqingfei/services/trackbacks/176586.htmlhttp://software.intel.com/zh-cn/blogs/2012/03/20/400010004/?cid=sw:prccsdn2194

想起写这篇文章是在看侯杰先生的《深入浅出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语言书,理由为:例子尽是些文本处理。我就纳了闷了,难道现代的计算机程序不是将大量时间消耗在字符串与文本的处理上吗?)

C++:

学过C语言,再学C++,先看这本《C++ Primer》的缩写版:

《Essential C++》

对C++有个入门了解,再看

《C++ Common Knowledge: Essential Intermediate Programming》

就不会有什么重要的知识点完全不知所措了,接下来是

《The C++ Standard Library : A Tutorial and Reference》

标准库,当然主要是标准模板库的标准学习参考手册,然后最好平时边写程序边参悟。

《Effective C++》等

我是说书名以形容词 + C++的那些书,计有七八本,慢慢看吧,罗马不是一日建成的。

(《Essential C++》、《Effective C++》、《More Effective C++》、《Accelerated C++》、《Effective STL》、《Exceptional C++》、《More Exceptional C++》、《Imperfect C++》,虽然书名格式相似,但每一本都绝非马虎之作。)

谁说C++程序比C程序要慢?那就请看下面:

《The Design and Evolution of C++》

知其过去才能知其未来,才能应用。

《Inside the C++ Object Model》

揭露C++的编译器模型。

《Efficient C++ Performance Programming Techniques》

当算法优化已到极致,在运用汇编之前,最后还可看看此书,有时高级和低阶都能做成相同的事情。

还有两本特别的书:

《Modern C++ Design : Generic Programming and Design Patterns Applied》

作者想把设计模式和泛型编程结合起来,并写了个尝试提供一切的Loki库来实作,不过其观点并未得到C++社区的普遍响应。尽管如此,本书仍称得上思想前沿性与技术实用性结合的典范。

《C++ Template Metaprogramming》

把 编译器当作计算器?本书介绍了Boost库的MPL模板元编程库。当然提到Boost库,对于游戏程序员不能不提到其中的Graph库,有《The Boost Graph Library》一书可看。还有其中Python库,号称国内首款商业三维图形引擎的起点引擎就用了Boost-Python库。说实话我觉得起点引擎还 是蛮不错的,那个自制的三维编辑器虽然界面简陋,但功能还算蛮完善,给游戏学院用作教学内容也不错。另有一个号称中国首款自主研发的全套网游解决方案。我 看到它那个三维编辑器,心想这不就是国外一个叫freeworld3D的编辑器吗?虽然有点偏门,但我以前还较劲尝试破解过呢。还把英文界面汉化了,大概 用exescope这样的资源修改软件就能搞定吧。我又心想为什么要找freeworld3D这个功能并不太强大的编辑器呢?仅仅是因为它便宜到几十美 金?它唯一特别一点的地方就是支持导出OGRE图形引擎的场景格式,这样一想不由得使人对它图形引擎的“自主”性也产生怀疑了。这样的“自主”研发真让人 汗颜,只要中国还没封sourceforge这个网站(据说以前和freeBSD网站一起被封过?),国人就能“自主”研发。

有人还会推荐《C++ Primer》《Thinking in C++》《The C++ Programming Language》等书吧,诚然这些书也很好,但我总觉得它们太大部头了。还不如多花点时间看看国外好的源代码。

Windows编程

《Operating System Concepts》第五版

国内有些操作系统的教程其实就是它的缩写版。

《Windows 95 System Programming Secrets》

深入剖析了Windows操作系统的种种种种,有人爱看《Linux内核完全注释》,有人爱看《自己动手写操作系统》这样煽情的书,但我想作为商业的操作系统,把Windows内核剖析到这地步也高山仰止了。

《Programming Applications for Microsoft Windows》第四版

先进程线程,再虚存管理,再动态链接库,最多讲到消息机制。作者在序言中说:“我不讲什么ActiveX, COM等等,因为当你了解了这些基础后,那些东西很快就会明白!”可以作为《Programming Windows》的先修课。

计算机体系:

《Computer Systems : A Programmer’s Perspective》

和《The Art of Computer Programming》在我心中是计算机史上两本称得上伟大的书,计算机组成原理,操作系统,汇编,编译原理,计算机网络等等课程汇成这本千页的大书,因为计算机在作者眼中就是一个整体。

开源阅读:

《Code Reading : The Open Source Perspective》

张大千临摹了几百张明代石涛的山水,画出的画以假乱真,后来他去敦煌潜心临摹几年,回来画风大变,终成大家。程序员其实有4 0%的时间是在读别人的源代码,侯捷先生说:“源码面前,了无秘密”,又说“天下大事,必作于细”,可以与他的《上穷碧落下黄泉,源码追踪经验谈》参看。

MFC:

《深入浅出MFC》

我 实在以为没有看过侯捷先生的《深入浅出MFC》的人多半不会懂得MFC编程。其实我是打算用一年多的时间写一个给游戏美工用的三维编辑器,顺便作为毕业设 计。图形库就用MFC吧,反正也没得选择。如果要用wxWidgets无非是猎奇而已,还不是MFC的翻版,当然它跨平台了。就象阻击手对自己枪械的零件 了如指掌一样,要想用MFC写出非玩具程序的人一定要了解其内部构造。还有一本书叫《MFC深入浅出》,并不是同一本。

IDE:

《Microsoft Visual Studio 2005 Unleashed》

工欲善其事,必先利其器。当然我认为与其用形如Source Insight、Slick Edit、Code Visualizer之类的代码阅读器、图形化工具,还不如用自己的大脑。但如果你嫌打源代码慢的话,可以用Visual AssistX。如果嫌老是写重复相似的代码的话,可以用Code Smith。单元测试可以用CppUnit,Boost库中的测试框架也不错。有心情可以吧Visual Studio外接Intel的Compiler,内嵌STLport,但不是大工程,性能分析没必要动不动就用下VTune吧。

程序员之路:

《游戏之旅——我的编程感悟》(#add不怎么样)

云 风大哥。在我心目中游戏程序员国外首推卡马克,国内首推云风。也许过两年我会到网易当云风大哥的助理程序员吧。It’s my dream.(^-^)他写这本书的时候本着只有透彻理解的东西才写出来,因此内容不会很酷新,但是相信我,每读一遍都有新的收获,主要还不是知识上的, 因为知识是学无止境的,授人以鱼不如授人以渔,精神上的启迪才是长久的。诚如经典游戏《 仙剑 奇侠传》的主力程序员兼美术指导姚壮宪(人称姚仙)在序言中所说的“云风得到的只是一些稿费,而整个中国民族游戏产业得到的将是一次知识的推动”,此言不虚矣。

《编程高手箴言》(#add差)

梁 肇新是豪杰超级解霸的作者,本来每个合格的程序员(Programmer , 而非Coder)都应该掌握的东西,现在变成了编程高手的独家箴言。不知是作者的幸运还是中国IT业的悲哀。知识点还是讲得蛮多的,不过对MFC的地位颇 有微词。我实在认为MFC的名声就是那些不懂得用它的人搞臭的。不过作者的牢骚也情有可原,每个具有创造力的程序员都应该不太喜欢framework。

《Masters of DOOM: How Two Guys Created an Empire and Transformed Pop Culture》中文名《DOOM启世录》

卡 马克,罗洛斯,这些游戏史上如雷贯耳的名字。(现在卡马克已专注于火箭制造上,罗洛斯则携妻回乡隐居)要不是没上过大学的卡马克和图形学大师亚伯拉罕的功 勋,可能到现在游戏中还不知三维为何物。勿庸置疑,在计算机界历史是英雄们所推动的。这本书真实的记录了这些尘世英雄的所为所思。

作为程序员的我对这几本策划与美工的书也产生了浓厚兴趣,以前搞过一两年的3DS MAX插件编程,觉得用maxscript还是好过MaxSDK,毕竟游戏开发中所多的是模型场景数据的导入导出,大可不必大动干戈。

策划:

《Creating Emotion in Games : The Craft and Art of Emotioneering》

在壮丽煊目的宏伟三维世界背后,在残酷的杀戮,动人心魄的情节背后,我们还需要什么来抓住玩家的心?答对了,就是emotion.真正打动人心的,才是深入骨髓的。

《Ultimate Game Design : Building Game Worlds》

从名字可以看出,写给关卡设计师的,特别是讲室外自然场景的构建颇有可取之处。

《Developing Online Games : An Insider’s Guide》

就象名为反模式的书讲软件团队运营一样,这本书讲商业运作多过技术。一个历经艰难,现在盛大的游戏程序员,翻译了这本书。
美工:

《Digital Cinematography & Directing》

数字摄影导演术,每当你在3DS MAX或者Maya等三维创作软件中摆放摄影机,设计其运动轨迹时,你可曾想过你也站在导演的位置上了?

《The Animator’s Survival Kit》

看 着这本讲卡通角色运动规律的书,一边产生温习《猫和老鼠》的念头,一边继续对前不久新闻联播中关于中国产生了某计算机自动卡通动画生成软件报道的蔑视,这 条报道称此举可大大加快中国卡通动画的产量。我且不从技术上探讨其是否是在放卫星(其实我知道得很清楚,前文已表,本人搞过一两年的卡通动画辅助软件编 程),但计算机机械生成的动画怎可代替人类充满灵性的创作?

《The Dark Side of Game Texturing》

用Photoshop制作材质贴图,还真有些学问。

三维图形学:

搞三维图形学首先还是要扎扎实实的先看解析几何、线性代数、计算几何的教材,后面的习题一个都不能少。国内数学书还是蛮好的。苏步青大师的《计算几何》称得上具有世界级水准,可惜中国CAD的宏图被盗版给击垮了。现在是我们接过接力棒的时候了。It’s time!

《Computer Graphics Geometrical Tools》

《计算机图形学几何工具算法详解》算法很多,纰漏处也不少。

《3D Math Primer for Graphics and Game Development》

浅易,可作为三维数学的“速食“。

《Mathematics for 3D Game Programming & Computer Graphics》第二版

比上面那本深入一些,证明推理的数学气也浓一些,可作为专业的数学书与编程实践一个过渡的桥梁吧。内容涉猎也广,射线追踪,光照计算,可视裁剪,碰撞检测,多边形技术,阴影算法,刚体物理,流体水波,数值方法,曲线曲面,还真够丰富。

《Vector Game Math Processors》

想学MMX,SSE吗,那就看它吧,不过从基础讲起的,要耐心哦。

DirectX:

《Introduction to 3D Game Programming with DirectX 9.0》

DirectX入门的龙书,作者自己写的简单示例框架,后面我干脆用State模式,把所有例子绑到一块儿去了。

《Beginning Direct3D Game Programming》

作 者取得律师学位后变成了游戏程序员,真是怪也哉。本书虽定位为入门级书,内容颇有独特可取之处。它用到的示例框架是DXSDK Sample Framework,而不是现在通行的DXUT。要想编译有两种办法吧,一是自己改写成用DXUT的。二是找旧的Sample Framework。我又懒得为了一个示例框架下载整个早期版本的DirectX,后面在Nvidia SDK 9.5中发现了。

《Advanced Animation with DirectX》

DirectX 高级动画技术。骨骼系统,渐变关键帧动画,偶人技术,表情变形,粒子系统,布料柔体,动态材质,不一而足。我常常在想,从三维创作软件导出的种种效果,变 成一堆text或binary,先加密压缩打包再解包解压解密,再用游戏程序重建一个Lite动画系统,游戏程序员也真是辛苦。

OpenGL:

《NeHe OpenGL Tutorials》

虽是网络教程,不比正式的书逊,本来学OpenGL就不过是看百来条C函数文档的工夫吧,如果图形学基础知识扎实的话。

《OpenGL Shading Language》

OpenGL支持最新显卡技术要靠修修补补的插件扩展,所以还要配合

《Nvidia OpenGL Extension Specifications》

来看为上。

《Focus on 3D Models》

《Focus on 3D Terrain Programming》

《Focus on Curves and Surfaces》

顾名思义,三本专论,虽然都很不深,但要对未知三维模型格式作反向工程前,研读Geomipmapping地形算法论文前,CAD前,还是要看看它们为上,如果没从别处得过到基础的话。

脚本:

先看

《Game Scripting Mastery》

等自己了解了虚拟机的构造,可以设计出简单的脚本解释执行系统了。

再去查Python , Lua ,Ruby的手册吧,会事半半功倍倍的。

《Programming Role Playing Games with DirectX 8.0》

一边教学一边用DirectX写出了一个GameCore库,初具引擎稚形。

《Isometric Game Programming with DirectX 7.0》

三维也是建立在二维的基础上,这就是这本书现在还值得看的原因。

《Visual C++网络游戏建模与实现》

联众的程序员写的,功力很扎实,讲棋牌类游戏编程,特别讲了UML建模和Rotional Rose。

《Object-Oriented Game Development》

套用某人的话:“I like this book.”

Shader:

要入门可先看

《Shaders for Game Programmers and Artists》

讲在RenderMonkey中用HLSL高级着色语言写Shader.

再看

《Direct3D ShaderX : Vertex and Pixel Shander Tips and Tricks》

用汇编着色语言,纯银赤金。

三大宝库:

《Game Programming Gems》

我只见到1-6本,据说第7、8本也出来了?附带的源代码常有bug,不过瑕不掩瑜,这套世界顶级游戏程序员每年一度的技术文集,涉及游戏开发的各个方面,我觉得富有开发经验的人更能在其中找到共鸣。

《Graphics Gems》全五本

图形学编程Bible,看了这套书你会明白计算机领域的科学家和工程师区别之所在。科学家总是说,这个东西在理论上可行。工程师会说,要使问题在logN的时限内解决我只能忍痛割爱,舍繁趋简。

《GPU Gems》出了二本

Nvidia公司召集图形学Gurus写的,等到看懂的那一天,我也有心情跑去Siggraph国际图形学大会上投文章碰运气。

游戏引擎编程:

《3D Game Engine Programming》

是ZFXEngine引擎的设计思路阐释,很平实,冇太多惊喜。

《3D Game Engine Design》

数学物理的理论知识讲解较多,本来这样就够了,还能期待更多吗?

人工智能:

《AI Techniques for Game Programming》

讲遗传算法,人工神经网络,主要用到位数组,图算法。书的原型是根据作者发表到GameDev.net论坛上的内容整理出来的,还比较切中实际。

《AI Game Programming Wisdom》

相当于AI编程的Gems。

《PC游戏编程(人机博弈)》

以 象棋程序为蓝本,介绍了很多种搜索算法,除了常见的极大极小值算法及其改进--负极大值算法,还有深度优先搜索以外。更提供了多种改进算法, 如:Alpha-Beta,Fail-soft alpha-beta,Aspiration Search, Minimal Window Search,Zobrist Hash,Iterative Deepening,History Heuristic,Killer Heuristic,SSS*,DUAL*,MFD and more.琳琅满目,实属难得。

反外挂:

《加密与解密(第二版)》 看雪论坛站长 段钢

破解序列号与反外挂有关系么?不过,世上哪两件事情之间又没有关系呢?

《UML Distilled》 Martin Fowler

很多人直到看了这本书才真正学懂UML。

Martin Fowler是真正的大师,从早期的分析模式,到这本UML精粹,革命性的重构都是他提出的,后来又写了企业模式一书。现在领导一个软件开发咨询公司,去年JavaOne中国大会他作为专家来华了吧。个人网站:MartinFowler.com

设计模式三剑客:

《Design Patterns Elements of Reusable Object-Oriented Software》

《Design Patterns Explained》

《Head First Design Patterns》

重构三板斧:

《Refactoring : Improving the Design of Existing Code》

《Refactoring to Patterns》

《Refactoring Workbook》

软件工程:

《Extreme Programming Explained : Embrace Change》第二版

其中Simplicity的Value真是振聋发聩,这就是我什么都喜欢轻量级的原因。

《Agile Software Development Principles,Patterns,and Practices》

敏捷真是炒得够火的,连企业都有敏捷一说,不过大师是不会这么advertising的。

《Code Complete》第二版

名著。

数学:

《数学,确定性的丧失》M.克莱因

原来数学也只不过是人类的发明与臆造,用不着供入神殿,想起历史上那么多不食人间烟火的科学家(多半是数学家),自以为发现了宇宙运作的奥秘,是时候走下神坛了。

物理:

《普通物理学》第一册 += 《Physics for Game Developers》

物理我想就到此为此吧,再复杂我可要用Newton Engine,ODE了,等待物理卡PPU普及的那天,就可充分发挥PhysX的功效了,看过最新的《细胞分裂》游戏Demo演示,成千上万个Box疯狂Collide,骨灰级玩家该一边摸钱包一边流口水了。

二、开源代码:

Irrlicht

著 名的鬼火引擎,从两年前第一眼看到它,这个轻量级的三维图形引擎,就喜欢上了它。源代码优雅,高效,且不故弄玄虚。值得每个C++程序员一读,并不限于图 形编程者。它的周边中也有不少轻量级的东西。如Lightfeather扩展引擎,ICE、IrrlichtRPG、IrrWizard.还有 IrrEdit、IrrKlang、IrrXML可用。(可能是为了效率原因,很多开源作者往往喜欢自己写XML解析库,如以上的IrrXML库,即使有现成的tinyXML库可用。这真会让tomcat里面塞Axis,Axis里面塞JUDDI,弄得像俄罗斯套娃玩具的Java Web Service Coder们汗颜。)

OGRE

排 名第一的开源图形引擎,当然规模是很大的,周边也很多。除了以C#写就的OgreStudio ,ofusion嵌入3DS MAX作为WYSWYG式的三维编辑器也是棒棒的,特别是其几个场景、地形插件值得研究。以至于《Pro OGRE 3D Programming》一书专论其用法。搜狐的《天龙八部》游戏就是以其作为图形引擎,当然还另外开发了引擎插块啦。我早知道OGRE开发组中有一个中 国人谢程序员,他以前做了很多年的传统软件编程。有一次天龙八部游戏的图形模块的出错信息中包含了一串某程序员的工作目录,有一个文件夹名即是谢程序员的 英文名,我据此推断谢程序员即是搜狐北京的主程。看来中国对开源事业还是有所贡献的嘛,王开源哥哥的努力看来不会白费!(^-^)不过我侦测的手法也有些 像网站数据库爆库了,非君子之所为作。

RakNet

基于UDI的网络库,竟还支持声音传输,以后和OpenVision结合起来做个视聊程序试试。

Blender

声誉最盛的开源三维动画软件,竟还带一个游戏引擎。虽然操作以快捷键驱动,也就是说要背上百来个快捷键才能熟练使用。但是作为从商业代码变为开源之作,威胁三维商业巨头的轻骑兵,历经十年锤炼,代码达百万行,此代码只应天上有,人间哪得几回看,怎可不作为长期的源码参考?

风魂

二维图形库。云风大哥的成名之作。虽然不代表其最高水平(最高水平作为商业代码保存在广州网易互动的SVN里呢),但是也可以一仰风采了。

圣剑英雄传

二 维RPG。几个作者已成为成都锦天的主力程序员。锦天的老总从一百万发家,三年时间身价过亿,也是一代枭雄了。这份代码作为几年前的学生作品也算可以了, 因为一个工程讲究的是四平八稳,并不一定要哪个模块多么出彩。反正我是没有时间写这么一个东东,连个美工都找不到,只能整天想着破解别人的资源(^- ^)。

Boost

C++准标准库,我想更多的时候可以参考学习其源代码。

Yake

我 遇到的最好的轻量级游戏框架了。在以前把一个工程中的图形引擎从Irrlicht换成OGRE的尝试中,遇到了它。OGRE的周边工程在我看来都很庸肿, 没有完善文档的情况下看起来和Linux内核差不多。不过这个Yake引擎倒是很喜欢。它以一个FSM有限状态机作为实时程序的调度核心,然后每个模块: 物理、图形、网络、脚本、GUI、输入等等都提供一个接口,接口之下再提供到每种具体开源引擎的接口,然后再接具体引擎。通过这样层层抽象,此时你是接 Newton Engine,ODE还是PysX都可以;是接OGRE,Crystal Space还是Irrlicht都可以;是接RakNet还是LibCurl都可以;是接Python,Lua还是Ruby都可以,是接CEGUI还是 others,是接OIS还是others(呵呵,记不起来others)都可以。所以Yake本质上不是OGRE的周边。虽然用Neoengine的人 都倒向了它,但是现在版本还很早。特别是我认为,学习研究时一定要有这种抽象之抽象,接口之接口的东西把思维从具体的绑定打开,而开发时抽象要有限度的, 就像蔡学镛在《Java夜未眠》中讲的,面向对象用得过滥也会得OOOO症(面向对象过敏强迫症)。

Quake Doom系列

据说很经典,卡马克这种开源的黑客精神就值得赞许。把商业源代码放出来,走自己的创新之路,让别人追去吧。不过Quake与Unreal引擎的三维编辑器是现在所有编辑器的鼻祖,看来要好好看看了。

Nvidia SDK 9.X

三 维图形编程的大宝库,这些Diret3D与OpenGL的示例程序都是用来展示其最新的显卡技术的。硬件厂商往往对软件产品不甚在意,源代码给你看,东西 给你用去吧,学完了还得买我的硬件。Intel的编译器,PhysX物理引擎大概也都是这样。Havok会把它的Havok物理引擎免费给别人用吗?别说 试用版,连个Demo都看不到。所以这套SDK的内容可比MS DirectX SDK里面那些入门级的示例酷多了,反正我是如获至宝,三月不知愁滋味。不过显卡要so-so哦。我的GeForce 6600有两三个跑不过去,差强人意。

三、网站:

www.CSDN.net

程序员大本营吧,软文与“新技术秀”讨厌了点,blog和社区是精华之所在。

www.GameRes.com

游戏程序员基地,文档库中还有点东西。投稿的接收者Seabug与圣剑英雄传的主程Seabug会是同一个人吗?一个在成都锦天担当技术重担的高手还有时间维护网站吗?我不得而知。

“何苦做游戏”网站

名字很个性,站长也是历尽几年前产业发展初期的艰难才出此名字。

www.66rpg.com

二维游戏图片资源很多,站长柳柳主推的RPGMaker 软件也可以玩一玩吧,但对于专业开发者来说不可当真。

www.GameDev.net

论坛中有不少热心的国外高手在活动。

www.SourceForge.net

不用说了,世界最大的开源代码库,入金山怎可空手而返?看到国外那些学生项目动不动就像模像样的。(DirectX的稚形就是英国的学生项目,在学校还被判为不合格。)

www.koders.com

源 代码搜索引擎,支持正则表达式,google Lab中也有。当你某种功能写不出来时,可以看一下开源代码怎么写的,当然不过是仅供参考,开源代码未必都有产品级的强度。说到google,可看 《Google Power Tools Bible》一书,你会发现,google的众多产品原来也有这么多使用门道。

这篇小文足足写了一天半的时间,不由得使我对侯捷一样的技术作家长期伏案辛勤劳作深深敬佩了。看来对于书籍或者软件,都应该尊重作者或者programmer的才智劳动。



路青飞 2012-05-29 10:17 发表评论
]]>
[转]游戏行业进入&生存指南(一)http://www.cppblog.com/luqingfei/archive/2012/05/13/174726.html路青飞路青飞Sun, 13 May 2012 00:27:00 GMThttp://www.cppblog.com/luqingfei/archive/2012/05/13/174726.htmlhttp://www.cppblog.com/luqingfei/comments/174726.htmlhttp://www.cppblog.com/luqingfei/archive/2012/05/13/174726.html#Feedback0http://www.cppblog.com/luqingfei/comments/commentRss/174726.htmlhttp://www.cppblog.com/luqingfei/services/trackbacks/174726.html游戏行业进入&生存指南(一)

07年发表自电脑商情报,后来被各处转载,居然很多游戏学校还拿来当教材,迟早写一篇游戏学校篇。

上个世纪末的时候,我还是一名游戏制作爱好者,历经摸索、努力,进入了中国的游戏行业。众所周知,在历经了几近绝望的失败之后,网络游戏的曙光来临,中国游戏业获得了生存并发展下去的可能,越来越多的爱好者也有了闯荡这一行业的机会。
自我接触游戏业之初,就听到有许许多多的人在外面嚷嚷,说是多么的想进入游戏业,说进入游戏业是多么的艰难,还质问这个行业为什么总是不给新人以机会。当时我也有差不多的想法和情绪,但在若干年后的今天,当我和团队一起从事游戏研发,并且负责不断为团队补充新鲜血液之际,却发现彼时的声音依然存在,而且更加响亮。
我要说的事实是,所有的游戏公司都缺人,不管新兴的小工作室还是名声久远的大公司都需要人手。需要什么样的人呢?传说中的“千万年薪”的顶级策划?对今天我所讲内容感兴趣的你,显然不是他们要找的对象,或者说,你真的想做游戏吗?
在这里,我只是想告诉那些有志于做游戏的人如何进入这一行业,以及在入业初期应该注意的各个方面。而在具体职能划分上,我主要谈及的是游戏策划的入行和进阶。毕竟,游戏策划这份工作我们可以视之为游戏行业催生的新职业——一个门槛极低却异常难以入职,入职者绝大多数又都陷于平庸,或离开或湮灭的职业。
叙事必先立论,我今天的观点是:

如果你想进入一个行业,那就努力的进去。
——“你呼唤山,山不向你走来,你便向山走去。”

不要思前想后,犹犹豫豫,婆婆妈妈。
——“你不知道远方有没有你的梦,但你首先要走到远方。”

如果你在一个行业过得不爽不开心,请走,不要在那里抱怨。抱怨改变不了环境,只能让你变得更加令人讨厌。
——“君子合则留,不合则走,绝交不出恶语。”

我不想讨论任何严肃的话题,譬如教育、政治、法律等;也不想讨论企业管理、员工福利、相关法规;更不想激起愤青、P孩们乐于反抗的态度和声音。如果依靠年青激烈的言辞就能改变周围,改变环境,改变世界,那么我求求你们,把精力花在更崇高的地方。
如果你对我的说法感到愤怒了,不满了,那么,请翻过此页。

今天我们要谈的是:在你做对之前,不要犯错误。

你因为如下原因进入游戏业——

A:玩了很多游戏想做;
B:认为自己是天才,充满创造力,想找个地方用;
C:这行能赚钱,试图名利双收;
D:感到现在的游戏都是**作品,想改变现状;
E:高薪就业与兴趣相结合;
F:当作一份工作。

于是,你想成为一名游戏策划,你开始设想怎样才能成为一名游戏策划、游戏企划,乃至游戏设计师之类的事情。最简单的方法是写一份简历投递出去。随便打开“前程无忧”、“智联招聘”、“中华英才网”什么的网站,上面的游戏公司还是很多的。——可是,为什么你发出去的信息就都石沉大海了呢?
在你准备花钱进某某游戏培训机构增加个人能力之前,或者在你准备到各大游戏论坛大骂:“为什么不给新人以机会?”之前,又或者在你意志消沉,准备于若干年后回忆“做游戏的梦”之前——请你先看看下面这篇游戏公司投递应聘材料须知,我想这对你应该有所帮助。说不定,这还会让你感到宽慰呢,因为你不是一个人在犯错,比你差得多的人遍地都是......
换言之,如果你的简历比以下的更出色,你的希望已经非常大了。

投递应聘材料须知:
符合以下条件的邮件会被直接删除,你有异议吗?看看写在后面的拒绝理由。

1、别人帮忙发的简历(别人帮你,会被视为中介,一律免谈。你托别人发,对自己没有信心嘛。当然,熟人推荐的例外);

2、给别家公司发的简历,抄送一份过来(这是一个最起码的礼貌问题,好比你要拿三份礼物送给三家,你只能拿一份跑一家,我很奇怪,分开发很麻烦吗?);

3、利用一些招聘网站的模版发过来的,或者是一些招聘网站自动发过来的(既然是一份愿意从事的职业,请认真对待,而不是发传单。你轻率,我也轻率);

4、邮件的内容只有一句话:“我是你们想找的人,请和我联系,留下qq或者手机号码”(公司招聘上有公司信息,你的邮件中没有你的信息,对话必须建立在双方对等的情况下);

5、邮件内部附一个网址链接,说“这个链接有我的介绍和作品”(对不起,陌生人给的链接从来不点,怕中毒,邮件附件为可执行文件的同样处理)。

此外,如果求职邮件有以下情况的,同样立即否决:

1、邮件里称自己为天纵英才,睿智博学,能力超群将是中国游戏业救世主的(第一,咱池小水浅,怕无法让您这条大龙翱翔;第二,在黑客帝国里,先知没说尼奥是救世主,谁也不会找到尼奥当他是,我们这行也没有先知说您是救世主;第三,尊驾这样德才兼备的人士,衷心希望您去从事更高尚、更伟大的职业);

2、邮件里称自己有天才想法、非凡设计、无以伦比的构思,期待共同成功的(委婉的说,有这种气魄和精神是好的,但是未经验证谁也不能保证成功,我不是说完全没有成功的可能,只是咱不能拿十数人到数十人好几年的劳作,几百上千万的资金投入来验证您的豪言壮语不是?坦白点讲,阁下何德何能,有何资历,如何服众啊?凭什么要众人受您驱策,以成就您的青天白日大头梦呢?);

3、邮件的简历与游戏业,游戏制作业毫无关系(这种简历经常发自刚毕业的大学生,上书姓名、性别、出生年月日,以及教育经历、获奖情况、个人爱好等。除此之外,既不谈对游戏的爱好,也不谈对游戏业的认识。所以,我只能诚恳的告诉你,这种简历发到任何游戏公司都是直接回收站),补充一点,似乎所有人都当过学生干部?也统统获得过奖学金?

4、邮件内容语无伦次,瞻前顾后,扭扭捏捏。
例句a:我叫XX,学生,我喜欢游戏。那个XX游戏很不错,我觉得应该改进一下,让XX的攻击力更强一点。我玩过很多游戏,有一次玩XX的时候......(自我介绍都不会的人,大概也不会和人相处);
例句b:游戏设计师这个职业是干什么的,不知道适不适合我......(你都不知道,我怎么知道?);
例句c:你们公司怎么样啊?我想来工作,又怕(待遇不高、没有发展前途、家庭反对),所以我很犹豫(您慢慢犹豫吧);

5、简历中错字连篇、重大常识性错误、信口胡说的。
(诸如在个人能力介绍中,不厌其烦的说有“教强”的XX能力,“教深”的XX修养,在个人薪金期望上写错位数达到年薪4亿的,写游戏名字中英文拼写都错误的,某某平台的游戏张冠李戴到另一个平台上的......);

6、简历制作及内容不合格的。譬如——
A:基本文档*作不过关,表格不整齐,内容不清晰,结构不美观,文字不对齐,字体不整洁(这样的简历中往往自称office软件使用熟练?让人怎么信!);
B:拷贝别人的简历修改而成(拷贝简历模板不是你的错,但把原模板上的超链接以及其他讯息都拷贝过来我就无话可说了,莫非当年抄卷子时也顺便抄了别人的名字?);
C:简历的附件作品名称为“新建文档”、“新建rar”的(对自己所附的作品尚且不够注意的人,不可能对所做的游戏负责任);
D:拿应聘其它公司的考题答卷作为自己作品的(保护考题的机密性,是笔试应该也必须遵循的规范,游戏研发是需要保密的行业);
E:有强烈的主观和敏感内容的简历(任意臧否其它公司的游戏,运营方式的。或者希望把游戏作为寄托自己政治成见,思想理念的载体)。

7、可能有潜在性麻烦的邮件。
A:说自己的创意非常独特,阅读者要遵守相关协议,不然阅读者所属公司未来开发的某款游戏可能成为起诉的对象......(不知道写这句话的人懂不懂这个基本道理:不能执行的创意就是狗屁!好比你预测出股票的涨跌,而你没钱买一样。你跟在一起股民说“假如明天谁按照我的预测买了股票赚钱,谁就是剽窃我的分析”试试看?);
B:说如果贵公司不招收他就是重大错误,会后悔一辈子,难逃破产倒闭命运的(武侠小说中看过这样的情节,某某少年才俊投靠名门大派而不得入,若干年后终成一方霸主,然后耀武扬威的前来兴师问罪。像这样以复仇还愿为目标的“潜在成功者”,还是不要为好);
C:讲自己的个人经历苦大仇深的,讲自己的目标生死不渝的,讲自己为了做游戏百折不挠的(人生在世,目标专一固然好,如果把希望只寄托在一件事情上,很危险);
D:说自己的家境非常优越,生活无比幸福,前途一片光明,即使不做游戏也会吃香喝辣,快活一生的。或说做游戏纯粹是爱好,今天不做了,明天就可以去更舒服、更有钱的地方享受生活的(其实我知道你是想表达一种强烈的愿望,可是你不觉得这种表达方式意味着你随时可能离开,从而导致团队的不稳定吗?)。

8、简历中有不切实际的要求的。
A:面对全职职位提出要兼职的(一般来说,游戏研发中没有兼职职位。对于部分音乐、美术、文案工作可以外包完成,这主要是考虑到研发进度的协调管理。);
B:要求按照自己的作息制度安排工作时间的(就算是一家可以根据实际情况需要执行整体或者局部弹性工作时间的公司,也绝不会允许个别人的不定时工作);
C:要求按照自己的生活需要提供薪水的(上海房价最高13万1平方米,通铺最便宜130一个月,你有什么样的能耐就吃什么样的饭,睡什么床是你的事情,无论哪家单位,都不会是你擦亮的阿拉丁神灯);
D:要求按照自己的理念组织公司结构和管理规章的(尚方宝剑、金牌令箭、总裁手令、皇上圣旨、锦衣卫都统腰牌、血滴子主管执照......您拿出一件来证明一下您的身份罢);
E:要求按照自己居住的地区成立分公司的(伊丽莎白泰勒当年拍片就要求过在另一个地方搭棚拍摄,你比她大牌吗?);
F:要求特定人,或指定级别的领导来才能面试的(经常在某些俗滥电视剧中看到某人气宇轩昂的走到某门口,大声说:“叫XXX、县令、总经理来见我!”现在我终于在简历中看到了......);
G:要求飞机往返面试并提供补贴的(摩根斯坦利的首席分析师离职后,有上百家金融公司找他做事,估计他是飞机往返面试的,google也进行这样的面试,不过呢,你有多大斤两,得飞机托运?);
H:没有提要求就咒骂的。有痛骂其它公司没有伯乐的,有痛骂游戏界黑暗的,有痛骂游戏开发运营商**的。总之必然是要灭亡的(虽说不是明着骂我们,可毕竟兔死狐悲,物伤其类呀!);
I:要求通过免费或者最低生活费来工作的(一家正规公司是不可能接受的,经常看到有爱好者说:“试试不行吗?不合适我就走?”但是你有没有想过,你不合适可以走,但公司对你的培养呢?团队的稳定呢?)。

9、接受过来自XX游戏培训机构的简历(这个部分将在下期予以说明)。

10、附有几十页乃至数百页不等的策划案(策划书)。
(这本来是一个加分选项,然而,几乎百分之百的所谓策划书都毫无新意,绝大多数是基于其他网上流传的策划书模板改写而来,经常是除了种族名、角色名,技能名不同之外,格式、玩法完全一样。特别是从一些游戏培训机构投递来的简历,与其说是作品,不如说是作业——拿了一份模板改出来的作业!我知道很多人写得很认真,而且在许多细节上用足了脑筋,煞费了苦心,然而这是毫无意义的。因为这份策划书除了你看,没有别人看!与其这样,不如试用1-2页讲述你设计的游戏的卖点和玩点,牢记——不要抄别人的话,不要说想当然的话!)。

以上,就是我今天所要讲的内容,不知你是否有所收获?是否你投递的简历也有着同样的问题?你可能会有很多的怨言,很多的不满,然而那是毫无益处的,在下一期里,我将会告诉你怎样去写一份应聘策划的简历。
结尾之际,请大家读读下面这篇“策划之野望”,如果你的思想和下面的内容有所吻合,那么你就要有所警醒咯!

策划之野望——

游戏策划这门职业,睡觉睡到自然醒,开着火红的法拉利前往工作室,路人,嗯...还有许多美女用艳羡的目光望着你行注目礼,看着你驶进所有玩家都尊称为神殿的公司大门。公司门廊上镶满了白金级作品的徽标。你踏入宽敞奢华,彷佛科幻电影一般的办公室,看到了游戏开发团队——他们都是各类技术方面的天才,随便在什么专业论坛露面都会被顶礼膜拜,而他们看你却像看着教皇一般。于是你发话——说出字字千金般的几句话,团队中人顿时感到醍醐灌顶,茅塞顿开,然后诚惶诚恐的按照你的设计去展开工作,一个个鞠躬尽瘁,竭尽全力,通宵达旦......
不久后,游戏上市,销量超人,横扫欧美日台韩各地游戏销售榜,各大游戏媒体毫不吝啬的把头版和彩图献给你和你的游戏。各大发行商也毫不犹豫的把分成的巨额收入打到你的帐上,争先恐后要以对外保密的高价签定下一个游戏的发行权,而你只是随便更换了一部跑车,非常谦虚的说:“游戏的成功,属于我们整个团队......”



路青飞 2012-05-13 08:27 发表评论
]]>