我的游戏开发之路

其实我很早就想步入游戏开发的领域了,因为这是我小时候的梦想——记得我第一次邂逅计算机这个玩意的时候,我跟它玩了一局纸牌游戏。那时候我才7岁,对于从农村到城里的小孩来说,这体验实在是太神奇了!后来知道这东西叫电脑游戏后,冥冥之中有了想要自己开发游戏的念头。

中学的时候有幸接触了 Flash,当时对程序开发的理解还不是很成熟,更不用说游戏开发了。在互联网的帮助下我不断学习,同时尝试做了一些 Flash 小游戏。从那时候起,我渐渐地理解了一个游戏从无到有的过程。这得感谢 Flash 领域的大师们写的不少游戏开发启蒙系列文章。虽然现在 Flash 已经快完成它的使命了,但这些文章仍然值得一读,毕竟程序的思想是永恒的。

Tile based Game http://www.tonypa.pri.ee/tbw/
Vectors for Flash http://www.tonypa.pri.ee/vectors/index.html

可惜我能报考的大学没有“游戏开发”专业。我想即使有的话也许是艺术系的子专业吧。而我已经走上了程序员的道路。大学里面跌跌撞撞学了一些相关的东西,也做过一些不成熟的实验项目,例如 Randroid 。这是一个基于 Box2D 的小作品,也是我开发的第一个 Android 程序。在学习的过程中我了解到了所谓的“游戏引擎”,如 Cocos2D,Unity3D 等,这些为了简化游戏开发过程而制作的游戏框架。而且有幸在上学期的人机交互课程中与艺术系的同学合作用 Unity3D 制作了一款叫做“纸鱼大冒险”的概念游戏。

回顾起学习的过程真的是十分艰辛。因为身边没有擅长游戏开发的前辈指导,所以一切只能靠自己。幸运的是图书馆的资源非常丰富,但这同时也是一个很头脑的问题——有太多太多想知道想学的东西了!在此列举一些我看过的相关书籍(以时间为序):

Flash游戏编程教程

由于高三一年忙于复习,所以几乎快把 Actionscript 抛之脑后。出于对 Flash 开发的回顾借了这本书,却发现 Flash 已经是面向对象的世界。Actionscript 3.0 这种完全面向对象程序的出现对我实在是一计重重的打击。由于大一上学期没有专业课,所以我把大部分的闲暇时间用花在面向对象编程的学习上,弥补了这一领域知识的空缺。

游戏开发物理学

这是一本相当不错的游戏开发书籍,用详尽的例子介绍了物理学在游戏中的运动。代码是用 c++ 编写的,基于 .net framework 所以只能运行于 windows 环境。由于当时已经在用 ubuntu 系统,所以没有实际测试过这些代码。这本书带给我的最大影响就是让我知道中学学到的数学和物理知识并不是没有用的,而且相当不够用!

Android 2.0游戏开发实战宝典

不知从什么时候开始 Android 手机开始在国内火热起来,而这又是时下非常流行的开发平台。为了了解一下 Android 平台,所以借了这本书。当时正在学习 JAVA 的课程,想开发一个小游戏作为课程设计。正巧 Android 也是使用 JAVA 作为开发语言,所以有了学习的欲望,可惜自己没有 Android 手机,少了动力。

Java 5游戏编程

这是一本相当不错的游戏开发入门的书籍,以 JAVA 语言编写。书中从无到有实现了一个简单的游戏框架,而且有一个很简单的2D物理引擎,和精灵渲染引擎。我用这个框架实现了一个类似“是男人就撑20秒”的 JAVA Applet 游戏。这是我第一次理解“游戏引擎”这个概念。

J2ME手机游戏开发详解:快速入门、难点剖析、商业案例

J2ME 是早期 JAVA 平台的手机程序开发环境。这本书介绍了很多早期较为成功的手机游戏,以及当时的技术限制。这更让我感受到现在智能手机平台游戏开发无限的潜力。

网络游戏安全揭密

这本书阐述了网络游戏发展以来各种“外挂”的技术原理,实在是大开眼界。中学时期对WPE之类的封包编辑器略有研究,也用 AutoHotkey 写过一些键盘辅助类的工具。但这本书讲了更精湛的技术,甚至包括装备复制以及伪随机数破解等原理。

Android 2.0游戏开发实战宝典

第二次借这本书。这时候我已经有自己的 Android 手机了。同期 Google 正在举办第二届大学生 Android 应用开发大赛,只要提交作品就能得到一个印有Google Logo 的背包。我确实得到了~我在暑假快要结束的时候开发了一个摇骰子的程序,就是之前提到的那个 Randroid ,麻雀虽小五脏具全!我把重力感应、多点触摸、数据库、多语言等功能都应用到这样简单的一个小程序上了。狠狠地体验了一把 Android 程序开发。

这个过程充满乐趣,但又让我看到了自己的种种不足——原本想自己实现一个简单的物理引擎,实现钢体碰撞运动。后来才发现自己连什么是力矩都不懂…短期内要做完这个是没戏了。于是想到了之前看过的IT资讯里提到的 Box2D 物理引擎,这是一个开源且免费的物理引擎,这可能是我第一次真正把开源项目应用到自己的程序里吧!我花了两三天把官方的 Box2D manual 看完了,虽然我只用到了里面很小的一部分,但是对作者精湛的构思迷住了。在离散程序里模拟现实界面要考虑如此之多的因素,解决问题的方法又是如此巧妙!

游戏设计原理

这是一本关于游戏策划的书籍,里面没有涉及编程,更像是一本心理学读物。毕竟游戏领域实在是非常广阔,仅仅会编程是完全不够的呀。

iPhone & iPad开发实战
iPhone开发创意火花集 

为了不把自己的眼界局限在 Android 的视野里,寒假的时候借了一些 iOS 相关的书籍。iOS 果真是游戏开发者的乐园,有相当多的优秀游戏值得学习。而 iOS 平台的友好性也使我对其更加有好感。虽然我很喜欢 Android 的开放性,但开放性却使大量的开发者牺牲了很多精力在应付各种各样的平台上。

游戏编程数学和物理基础

这本书详细地介绍了各种数学公式和物理公式在游戏中的应用,还介绍了很多游戏算法的优化技巧。很大程度上弥补了我在这方面的知识空缺。

游戏人工智能:计算机游戏中的人工智能
人工智能游戏开发:创造具有学习和反应能力的角色

在一次偶然的闲逛,发现微软中国正在举办2012编程之美全国挑战赛。这是一个由参赛者编写AI程序控制由5艘船组成的舰队与敌人PK的比赛。我是第一次听说如此有趣的编程比赛,于是情绪高昂下载的SDK,胡乱地写了一些代码。最后发现自己根本不知道AI是怎么一回事。于是跑到图书馆翻了一堆相关的书籍…

游戏人工智能是人工智能的子集,主要在于处理游戏是NPC的仿真控制。我发现即使没有受过这方面的训练,我脑海里已经有了和书里面提到的类似的解决相关问题的想法,后来知道那叫“有限状态机”,仿真运动,等等。图书馆里关于这个领域的书不够好,都是泛泛而谈。后来在网上寻得《游戏开发中的人工智能(O’REILLY)》一书。这本书真是太棒了,里面对区块游戏和物理仿真游戏分别介绍了游戏人工智能在其中的应用,代码也非常详细。印象最深的就是书中对 boids 模型的描述,这是一个用于控制群体运动的仿真模型,由于对这次比赛帮助很大,我在网上还搜索了大量相关文献。另外就是书中对 A-star 寻路算法的详细描述,终于解开了我心中的迷惑。

比赛的最后结果是落榜了。我在第一回合的小组赛就遇到了两个强劲对手,被打得落花流水。不过这次学习经历绝对让我受益非浅。

计算机视觉:算法与应用

游戏开发不得不接触的另一个领域就是计算机图书学。这本书介绍了图形学领域最前沿的应用——计算机视觉。里面大量的公式和算法让我倍感压力。但也是让了解到了当前很流行的虚拟现实(IR)以及增强现实(AR)在计算机领域的应用,这可能也是将来游戏的发展趋势。

基于Java的计算机图形学

很早就想学习计算机图形学了,但是我们学校软件工程专业课程里面居然没有这门课。跑去旁听了几节计算机专业的图形学入门,发现只是对 OpenGL API 的使用介绍而已,对基础算法只是泛泛而谈。暑假前在图书馆找了一些计算机图形学的书,有厚如砖头的图形学算法导论,看了就头大。而这本《基于JAVA的计算机图形学》用简短的文字描述配上JAVA程序实现,对学习计算机图形学的新手来说,是一份很好的入门教程。不过这是一本由日语翻译过来的书,翻译质量不敢恭维,所幸计算机程序是世界通用语言。边读边把程序敲到电脑上,终于理解了线段扫描算法、多边形扫描填充算法、裁剪原理、3D透视,棋盘填充算法等。实现了在平面上呈现一个网格描绘的3D球体。而后的光线追踪算法看起来就有些吃力了,需要再阅读一些书籍来补充实习。

iPhone游戏开发
iPhone & iPad cocos2d游戏开发实战

暑假给天猫做了一个微博营销小游戏“天猫来找茬”,赚了一些零花钱。现准备入手 the New iPad 。于是开始学习 iOS 游戏开发。之前已经学会了基本的 Obj-C 语法,当务之急是上手一款游戏引擎,于是选择了 Cocos2D 。

我会继续我的游戏开发之路,期待今后自己的游戏会出现在 App Store 上~