作者:Dave Astle
译者:Room3rd@hotmail.com
1. 作者简介
从1984年开始,Dave Astle就做着游戏开发工作。日间,他是ROI System,Inc的一名软件工程师,夜间,引领Myopic Rhino游戏开发小组。只要有时间,他就会帮助GameDev.net成为最好的游戏开发资源网站。当然,他也需要偶尔的休息。
2. 译者序
3. 正文
很多刚接触开发或没什么编程经验的人经常会问:我该如何开始游戏编程。即便直到现在,我也只是帮助回答我所知道一个又一个的基本问题。然而,最近这种类似问题太多了,多的有些难以接受了,所以,我决定还是把所有建议写下来,分享给大家吧。
本文试图帮助那些想实现自己的游戏,但又没什么编程经验的人。事实上,在这里我将假定您根本不懂编程,我主要针对游戏开发的编程与设计进行阐述,而不会涉及设计艺术。我也不大算对这个行业展开长篇赘论(毕竟到处可以找到大量的资源),但我将指出在制作你自己的游戏时需要注意的某些事情。最后,这里展示的途径不是唯一的——也不一定是最好的 ——只是指出了该怎样制作游戏的学习途径,但对我和另外一些人来说,它已经足够好了。
选择一门语言
首先,你应该选择一门编程语言,可能会有很多选择:Basic,Pascal,C,C++,Java等等,并且还会有许多许多争论:对于一个新手来说,到底应该(最好)使用哪种语言呢?对于若干流行语言的讨论,可以看John Hattan的精彩文章“What Language Do I Use?”(http://www.gamedev.net/reference/design/features/whatlang)。
我会建议使用C/C++,可能有人会说“对于新手来说太深奥了吧”,起码我就是从C++开始的,所以对大家也应该没有问题。另外,C/C++应用很广泛,所以你可以找到大量的资源及帮助。先学C还是C++并不关键,毕竟只要学了一门,另一门也会触类旁通。然而,如果你决定先学习C++的话,还是应该在学习面向对象编程前首先要了解并掌握面向过程的开发。(也就是说,学习使用类前,你完全可以不用它们而很好进行开发)
如果采用C/C++的话,可能发觉深入会越发的困难,当然,重新开始再选择学习一门更为简单的语言,如Basic或者Pascal,也未尝不可,但我还是要告诉你,只要坚持下去,找到所需的资源,逐步深入,C/C++开发也会越来越得心应手。
接着你应该会问“那我该如何学习C/C++呢?”,很高兴你会这么问。最好的办法是上一个培训班(课),有老师或助教回答你的问题,能使你迅速提高,而留下的作业也会确认你是否真的掌握了你所学的知识点。(译者注:呵呵,在国内很难碰到这么好的教师吧)
如果上培训班对你来说不现实的话,那最好的办法就是找一些好的书籍。不要过于专注“精通”之类的书籍,否则,最后你可能会买上一大摞。我的建议是到最近的图书市场,在那里花些时间来浏览那些关于C/C++介绍(入门)的书籍,直到你确定你能读懂并能从那本书学到一些东西。然后,等你需要一些高级编程的书籍,或者是一本参考时,由于你对于这门语言有了些许了解,那时你就会知道你更需要什么。我们的“books section”中给了一些建议,地址为:http://www.gamedev.net/columns/books/。
在此,我还想费些口舌来提醒众多的编程新手,尤其是那些年轻人:没有钱买书或者干其他的事情。首先,你可以找到很多编程资源,其中包括本地库文件,还有Macmillan Computer出版物,通过http://www.mcp.com/personal可以找到成千上百的编程书籍。但是,其次,如果你真的想成为一名出色的程序员,有时脑筋不得不转个弯儿,使用任何东西(合法的;<)都意味着你不得不数数口袋里的钞票然后掏出来。
通过Web完全可以找到大量的C/C++学习指南,但我觉得这些指南最好作为你学习书籍的补充,而不是作为单独的资源使用。
选择合适的编译器
你写的程序或者说是源代码,被存储为文本文件,你完全可以使用Notepad来写一个C/C++程序,但你还是需要“某些东西”来把源代码转化成可执行文件。在C/C++中,这个“某些东西”指的就是编译器。
编译器有很多,有些还是免费的,选择一个适合你的很重要,免费的更方便你去尝试,并选择一个你觉得最好的。然而,免费也通常意味着功能不全或者支持不够。幸运的是,大多数商业编译器也有入门及学术版本(introductory or academic versions),这样你就会花更少的钱而获得全部功能,唯一的限制是:你不能把用它编译的程序发布出去(毕竟在某段时间你不会发布……)。
最后,你选择的编译器应该取决于你的花费及开发所处于的操作系统或平台。如果打算在Windows下开发,强烈建议使用Microsoft Visual C++,它拥有一个强大的开发环境,使得开发变得更容易,并且毫无疑问开发Windows应用程序也没有其他更适合的编译器。(译者注:应该是针对C++而言,不过使用BC或者其他编译器的肯定不同意,但我也推荐使用VC,因为开发资料确实很多,虽然我也不太会:))如果你是学生,那太好了,你会以不错的折价得到一个拷贝,如果在DOS下编程,最好赌注DJGPP(http://www.delorie.com/djgpp),它是免费的。(译者注:的确真的确实非常好奇地问“DOS下开发的人还有么?”)
目标平台
尽管你最终可能发布到若干不同平台下,但你还是需要一种来重点学习。一旦学习一门语言,在进入开发前(包括图形开发),你可能需要使用一个非GUI的操作系统,如DOS或者UNIX,这会避免一些前置问题(the overhead involved with),例如,Windows编程中,你就可以仅专注于语言的学习,(而不用担心界面部分)。
一旦你准备好开始游戏编程了,你还是应该确定你的目标平台。还是让我们看看更多的(需要注意的)重要环节吧:
Windows:如果你想在游戏行业中做的很专业,或者更多的人能玩你的游戏,那就选择Windows吧。重要的是你的用户在使用Windows — 至少现在看来是这样的。Windows大量主流游戏使用了一种开发技术 — DirectX,你可能听到过。DirectX是一个开发库,可以使你直接访问硬件层,也就意味着你可以开发高性能的游戏。
DOS:DOS曾经是主流的游戏开发平台,但那些日子已经一去不复返了。尽管还有一些嗜好者仍在开发DOS游戏,但不再有商业游戏开发了,毕竟Microsoft不再给予更多的支持了。如果你刚开始做游戏,不要选择DOS,否则,不要执着于此。注意:由于还是有些DOS游戏编程的书籍,需要注意学习的话,可能会跟实际有所不同了。现在Windows游戏开发的书籍越来越多,这方面的争论也会越来越少。
Linux:Linux作为一种UNIX变体,基于某些原因,近来变得很流行,这些因素包括稳定性、价格还有反Microsoft情绪在内。尽管Linux的用户数还相对较少,但由于对它的极度热衷和潜在市场的增长,使得可以作为目标平台的另一种选择。
Macintosh:Mac有着大量的不容忽视的热衷者,而且我所了解得每个热衷者都极度渴望Macintosh下能有更多更好的游戏。虽然我没有看到过在Mac下开发的资源,但我还是确信肯定在某处存在着,因此这也是一种有理由选择的平台。
控制器(Consoles):控制器(也就是PS、N64、DC等等)游戏市场是巨大的,开发控制器游戏当然有前途,但是,非商业开发有很多因素使得有很大的不确定性。如果你在开发控制器游戏,可能是正在被一个商业游戏工作室所雇用吧。
备足原料(On to good stuff)
现在可以开始讨论实际的游戏开发了,简单起见,我将假定你已经选择了C/C++语言并在Windows下开发,但我所说的对其他条件同样适用。
首先,开发游戏前,你应该熟练掌握C/C++。你需要了解指针、数组、结构、函数,可能还有类,应该是很精通了。如果这样的话,那你就已经准备好了。
本文不可能教会游戏开发中的所有事情,幸运的是,也没有必要,Web上完全可以找到大量的相关书籍及指南。GameDev.net应该有你所需要的。下面就是我的一些建议:
一本或更多的书籍。Windows中,开始开发游戏的话,“Windows游戏开发诀窍”(http://www.amazon.com/exec/obidos/ASIN/0672313618/gamedev)很适合你看。另外Books section也会找到其他一些书籍。通读整本书,尝试所有的范例,然后重新阅读你不能理解的部分。
以在线指南作补充。除了阐明你所读过的知识外,他们同样包含书中没有的知识点(主题)。
问专家。书中或指南中都找不到答案的话,那就充分利用留言板和聊天室(译者注:感觉国内的聊天室没有太好的氛围,还是找些BBS或者论坛问吧),会有很多人愿意帮你解决的。
实际中,不应该是一个固定不变的过程,而应该是一个相似过程的不断重复。
仅仅学习是不够的,还需要把学到的东西应用,首先开始一个简单的游戏,然后逐步发展。可以看看Geoff Howland的文章:“我是怎样开发游戏的?一条游戏开发的途径”(http://www.gamedev.net/reference/design/features/makegames)。
起初,还是打算自己干吧,不要急于加入一个开发组,因为那只会让你的学习过程变得缓慢。一旦你自行完成了数个游戏,那对于一个开发组来说你也会起到更大的作用。
关于书籍我还是愿意多说两句:除游戏开发的书籍外,你需要阅读更多的书籍。为了能创建各式各样的游戏 — 如售货架上的那些 — 你将不得不钻研那些更高级的主题。有些你是可以在指南中找到的,但还是会需要更多的书籍:图形、人工智能、网络、物理等等。所以你需要上这些培训(课) — 虽然你觉得这些对于游戏编程没有用 — 这简直够的上一个计算机科学专业的学位。
总结(Wrapping up)
这里还有些重要的提示:
不要仅仅积累知识,去应用。你绝对不会真正懂得或者理解一个事物,除非你使用它。用自己所学,实现些小的demo程序吧。可以做一下书中每章节后的练习题。
玩大量的游戏。这样做可以给你些启发,帮你实现更好游戏,同样也给你很好的理念(a welcome relief from programming)。
帮助他人。通过帮助他人解决问题,你也会了解这个知识点,并学会更多东西。
完成你所开始的。不要陷入到你的思维陷阱中:“我知道我可以完成这个游戏,但我有了更好的主意,我要实现这个更好的(而不是原来的)。”如果坚持完成你所开始的,你会懂得更多东西,而且你拥有了一个事物可以证明你并不是夸夸其谈。要想实现简单些的话,就不要在更多经验前尝试实际上很大、很复杂的游戏。
开始吧!现在你肯定陶醉于制作Quake 4中,好的,虽然不见得如此,但至少你能沿着这条路走下去,并找到更多的信息,夜以继日的辛勤工作后,必定有收获。