游戏编程十年总结(上)
自敲第一行代码起已经十年多了今天既不是十年整的日子也不是一个有特定意义的日子本来像这种大总结的文章当择良辰吉日斋戒沐浴三日方可动笔。一开始计划是写一篇五年总结的但各种原因一拖再拖于是就变成了十年总结。光阴似箭时不我待转眼已经在奔三的路上了离大叔的称呼很近了但离大神的称呼还很远在此谨以此文总结反思这十年技术生涯的点滴与诸君共勉。编程之前大概是读初一的时候家中有幸让我得到了一台二手电脑那时的心情比现在让我得到一堆苹果电脑更加兴奋。但这是一台不能连网也没有任何游戏和软件的电脑扫雷、纸牌接龙等内置程序除外这样的电脑能有什么用呢只能瞎折腾很快电脑被折腾坏了。去电脑店修了几次之后被宰了几次决定自学电脑维修。跑了很多书店才买到跟电脑维修相关的书籍也就是在这时建立了对计算机的初步认识并掌握了屡试不爽拔插内存条、重装系统大法。还从帮我修电脑的大叔身上学到了修电脑的装逼套路在帮别人修电脑时不论如何一定要进一下BIOS捣腾一下一定要在DOS的黑窗口下快速地敲几条命令让旁人看不懂以彰显我的技术高超。在2002年左右像老家那种小地方估计会重装系统的人都不多。之后从修电脑的大叔那买了不少游戏碟如CS、红警、帝国、炎龙骑士团等等安装游戏是一个隐藏天赋只要把游戏碟插入光驱中这个隐藏天赋就会被自动激活自己摸索着把游戏装上去。从此电脑上的内容开始丰富了起来获得了近视成就。玩游戏的同时也对游戏和游戏的背后产生了浓厚的兴趣那时候经常会思考游戏是怎么做出来的实际上更多的同学比我接触电脑和游戏更早但他们对游戏的背后并没有什么兴趣所以他们现在很多都成了小老板而我成为了苦逼的程序员。初学编程2005年的某日应该是在信息技术或数学课上第一次接触到了编程语言Basic一开始用的并不是VB6.0而是一个蓝底黄字的命令行IDE虽然只能倒腾出HelloWorld和一些简单的数学程序但对此仍然有着浓厚的兴趣因为我知道了游戏是通过编程来实现出来的那时候满脑子都是游戏是怎么做的但没人告诉我我只能自己探索。这时候对程序的了解也只是最简单的一些语法而已直到一个亲戚送了一套VCD是开天辟地的视频教程里面介绍了VB6.0在我看来那是非常适合新手培养程序思维的一套教程在大叔那买了3块钱一张的VB碟子装上VB6.0之后就跟着视频中的示例操作起来了。于是我写出了人生中的第一个游戏一个猜数字的小游戏并尝试着改变游戏的规则制作类似石头剪刀布这样的游戏。视频教程中的东西很少很快就学完了但这远远不够我只能写出一些简单的数字游戏寻找新的资料成了当务之急但骑着单车翻遍了老家周围方圆十几公里的新旧书店都没能找到合适的资料如果是在广州深圳这样的城市或者是像现在这样的网络环境应该可以很快地找到合适的资料最后通过学校的上机课上网找到了一本《Visual Basic游戏编程21天自学通》的书学校的网速经常只有几KB寻找以及下载这本书都相当不易实际上这本书也不是最适合我的中间存在严重的知识断层但是最终我硬着头皮挺过去了。书中的第二个例子是一个模拟细胞生存的游戏里面用到了一些简单的数据结构和算法但在这时候我还不知道什么是数据结构对书中的代码尽是问号大约经过了一周的死磕在炎炎夏日昏暗闷热的小房间里汗水不断流进眼中不为所动因为完全沉浸在代码中了全神贯注地做一件事情这是一种奇妙的感觉这段回忆很是深刻。最后终于将细胞生存的游戏跑起来了这是我到目前为止写过最酷的东西了并且在这个例子中领悟了简单的数据结构与算法贪吃蛇怎么写飞机游戏怎么写俄罗斯方块怎么写五子棋怎么写似乎都能从脑海中模拟出来了应该用怎样的结构怎样的逻辑我想这就是初步的程序思维了。接下来的时间里我将脑海中想到的游戏都一个一个地实现了虽然实现的效果看上去惨不忍睹使用Windows自带的画图工具绘制。但依然是很有成就感的。细胞生存小游戏用的大概是一个简单的图结构在做贪吃蛇的时候依葫芦画瓢写出了一个链表结构然而直到后面学习c语言的时候我才知道这是数据结构、是链表......虽然写出了一些简单的游戏但我想写的远不止这些我想变强啊啊啊我想写出更好玩更炫酷的游戏就像当时非常火的游戏《大话西游》什么代码可以写出这么炫酷的画面什么代码可以让两个人的屏幕同步出现这么炫酷的画面呢后来在云大组织的广州skynet大聚会上面讨论实时同步方案时提到过在高中时就有在思考大话西游的实时同步大家都笑了这是一句缓解个人紧张情绪的话但并不是信口开河。《Visual Basic游戏编程21天自学通》介绍了DirectX看上去使用它就可以写出更酷的游戏但书中的代码片段无法编译而且并不是循序渐进地介绍DirectX挣扎了很久只能放弃。在这之后又学习了一下ASP、Html以及JavaScript这一方面是因为对网页开发也略有兴趣另外一方面主要还是没有好的学习资料有什么资料就学什么。当我知道做游戏应该用C/C语言的时候就开始寻找C/C的资料那时候没有找到合适的入门书籍不知从哪里找来一本VC的编程书一上来就是MFC框架的消息映射各种控件等等让我觉得C真的好难啊。学校的上机课我都用来找资料下载资料。在网上找到了一些简单的C语言资料开始自学C语言那时候最最让我头疼的就是指针了听很多人说指针很难所以在这方面下了不少功夫。初步掌握了C语言之后接下来开始学习一本《C语言游戏编程从入门到精通》虽然没让我精通但还是跟着写了一些简单的小东西出来学到了不少古董级的知识例如如何用图形模式调用哪些系统中断来绘图这些大概是最古老的像素游戏的开发技术了。学生的时间是最多的上课的时间脑海里想的都是游戏编程偷偷地看着编程书籍。高中三年过得很快转眼就到了高考。像我这种不爱学习不认真上课的人自然考不出好的分数那时候对未来的憧憬大概就是如果考得不好那就在一家小网吧里面当当网管修修电脑继续这种自学编程的日子。最后高考虽然没考好但还是考上了位于韶关的一所没有什么名气的大专学院在那里由于佛祖的庇佑我的技术迎来了一个飞跃并结识了不少益友。大学之路高考之后的暑假决定系统地学一下C由于家里拉上了宽带所以极大方便了我找资料在网上找到了孙鑫老师的C视频通过这套视频对C、面向对象和MFC都有了一个初步的了解但对很多概念都还是一知半解。暑假很快就过了2008年的九月份来到了学校报到饱受了缺乏资料之苦后看到大学图书馆中海量的计算机书籍仿佛几年没吃肉的人看到一盘美味的红烧牛肉这次的兴奋仅次于得到生命中的第一台电脑。在图书馆中找了一些VC21天自学通之类的书籍巩固了一下C基础以及如何使用C来开发游戏的《VC游戏开发》一书读完后尝试着用了GDI写了一些游戏例如《坦克大战》这个应该是第二学期做的。另外也巩固了一下VB的基础使用VB做了一个简单的系统管理工具有点类似优化大师。由于高中阶段的努力让我自认为在同龄人中的技术已经是很不错开始有些骄傲膨胀的时候蚊子和志仔的出现狠狠地打击了我的“嚣张气焰”学无止境一旦满足于当前的技术那便是逆水行舟不进则退。蚊子并不是我们学校的是一位大学同学的高中同学同他一见如故其实那时候尚未见面但相似的经历对技术的热爱让我们有很多的共同语言。蚊子和志仔都是从高中便开始自学编程并且学得比我好得多大一时蚊子已经制作了不少看上去还不错的软件作品对游戏外挂也略有研究蚊子推荐给我的《Windows游戏编程大师技巧》让我受益匪浅后来此书成为了少数几本我反复翻阅多次的书。《CPrimer》和《EffectiveC》是另外的两本通过这些比较经典的书我慢慢理解了C和VC的区别面向对象、泛型。志仔是一个超级邋遢的人发型杂乱每次见他都穿着拖鞋和大棉袄然后挂着一条鼻涕。但很多时候看上去越邋遢的程序员越牛逼大一的时候他就已经在研究木马之类的东西了不是简单地使用工具而是开发木马终端控制屏幕传输视频压缩等等都是他自己做的。对于php等网页编程他也颇为擅长对于OpenGL和一些图形学算法也有研究这两个家伙都自己写过操作系统当然不是大一的时候毕业之后他们变得更牛逼了。受志仔和凯文米特尼克的影响那时候花了一段时间玩了玩黑客但仅仅只是停留在表面玩了一段时间发现编程才是王道于是丢下手上的黑客工具包继续回到编程的正道上有牛逼的对手一起前进路上才有意思这种相互竞争相互追赶的感觉非常地美妙。大学前期基本都是围绕着C游戏开发学习的。在大一的第二个学期接触了汇编语言这是一种与之前的语言完全截然不同的语言需要运用新的思维方式应该算面向寄存器编程看了一些汇编教程之后自己调用各种中断用汇编写了一个打飞机的小游戏。在后面接触了面向对象的思想之后就渐渐把汇编忘干净了。在五一的3天假期中准备了泡面在宿舍闷了3天时间把之前没看完的孙鑫视频看完了初步理解了C的类、MFC、多线程、网络编程。并制作了一个内网聊天工具在网上断网之后可以和其他宿舍的同学聊聊天。从大学开始就总是给自己制定着一堆完不成的学习计划因为不想让自己有借口停止学习。特别是寒暑假回家的行囊中总是塞满了计算机的书。