游戏始于一个好的构想 尽管现在发布的游戏越来越倾向于图形化,但是游戏的主要特点“可娱乐性”,却在有些时候被遗忘了。 尽管游戏中那些惊险的图形画面、精彩的情景切换和3-D图形世界简直让我们眼花缭乱,但是它们有很多内容其实都不适合用户。有时候,即使一个游戏得到的反响很好,但游戏的可娱乐性却是不明确的或者是比较失败的。 您觉得旧版本的Pac-Man游戏怎么样呢?凭借其华丽的游戏环境,Pac-Man游戏以及早期版本的Mario Brothers on Nintendo游戏在孩子们中间仍然大受欢迎。 这里,我们的目的不是让您忘记所有的事情而过分地关注这些基本点。相反,我们希望您能够牢记:一个好的游戏总是始于一个好的构想,有时候,仅这一点就已经足够了。 引用最为普遍的一个游戏是Tetris(俄罗斯方块),它是由一个俄国编程人员单独开发的。这些年过去了,这个程序依然非常有意义,而且,我们也在本书的第1章复制了一个Tetris游戏程序—— 我们的“Hello World”程序。 当然,您可能会说“Tetris”只是成千上万个游戏程序中的一个,这一点我们也同意。但是如果您说“只有像Tetris那样简单的游戏,才可能只需一个人就可以较好地单独创建完成”,那么我们将不同意您的这种观点。年长一些的人们可能还记得Another World游戏,此游戏具有一个续集,称为FlashBack。该游戏具有的图形界面和音效对于那个时代而言非常好,并且它还具有漂亮的人物动画,以及各种各样的情景切换,这些情景切换通过“在不同视角显示游戏人物和奇异的世界”来完成游戏情节,而这个游戏也是由一个人单独设计的,设计者就是法国的一个程序员。 今天,我们可以找到很多关于业余程序员创建的游戏的网站。这些游戏中有些确实还不错,它们具有高质量的图形处理界面和音效;而且更重要的是,它们几乎都具有很好的可娱乐性,当然,这也许是因为他们只是喜欢创建和玩这些游戏,而不是为了赚钱。 本书将介绍很多提示和技巧来帮助开发人员单独设计自己的游戏。然而,如果您可以找到一些人来帮助您开发游戏的话,那还是请他(她)和您一起工作吧。 当然,除了一个好的构想之外,还有很多内容与游戏开发有关。 游戏并不仅仅是一个好的构想 尽管一个游戏必须始于一个好的构想,但是还有很多其他内容与游戏编程有关,而这些内容又往往超出我们的想象。现在,让我们来看一看在创建一个游戏项目时必须牢记的几点要求,即: ● 音效:尽管您也可以总是使用“嘟嘟”声等简单的音效来创建一个游戏,但是如果使用优美的背景音乐以及恰当的音效为游戏行为(射击、死亡、获取游戏得分,等)配音的话,则游戏效果会更好。即使您不打算在开发团队配备一个音乐方面的专家,但也不应该忘记,必须花大量的时间来寻找合适的环境音乐,以及在Internet或CD库的成千上万个音效中寻找最为合适的一个。 ● 绘图:关于这一点,有一种不好的做法是:从别人的游戏中剪切下一些图像,然后把它们用到自己的游戏中。这种做法将使游戏缺乏原创性,并且常常造成侵权事件。因为不是每个人都可以绘制精美图像的,所以最好还是在开发团队里配备一位(或者几位)艺术工作者。 ● 色彩:在计算机上着色不同于在纸张上着色。因此,如果您的艺术工作者不会使用作图工具着色的话,则需要聘请一位会使用作图工具的艺术工作者。 ● 动画:动画图形的创建与静态图形的创建有所不同。比如,任何人都可以绘制一棵效果逼真的树,但是如果想要绘制一个正在行走的人或者一只正在飞翔的小鸟的话,则需要那些具有动画制作经验的人来完成。即使您的游戏没有使用动画sprite,但是也不要忘记:您可能还需要一个动态的游戏简介界面或者动态的情景切换。 ● 代码:当然,如果没有这个内容,看到的将是关于游戏的书籍。 ● 游戏级别设计:游戏级别的设计者是那些“确保游戏者能够选择到最优的可娱乐性和最好玩的游戏经历的”人。 ● 质量保证:如果付不起钱聘请一个非常好的质量保证团队的话,那么最好还是不要进行游戏开发。对于一个游戏开发公司来说,最糟糕的事情莫过于一个错误众多的游戏程序。 ● 项目管理:众多具有不同技术、不同性格的人在一起工作必需有一种有效的管理方式来保证他们中的每个人都保持最佳状态。即使是您自己单独开发一个项目,也千万不要轻视了好的项目管理方法的重要性。例如:如果没有为项目设置一些“里程碑事件”来控制项目开发进度的话,则可能永远都在为该项目而工作,并且永远也看不到任何好的结果。关于如何管理项目,这方面的内容已经远远超出了本书的范围,但是,如果您从来没有在一个团队工作过的话,我们强烈建议您查看一下这方面的资料。最重要的是,您应该学会一些好的、有助于使您成为团队一部分的项目开发原则。 ● 其他:还有很多有意义的内容,通常而言,必须做好准备以便解决所有难以预料的新问题。 如今,开发一个商业游戏绝不是一件简单的事情。那种“单凭一个程序员就可以成功开发新游戏并因此而发财的”时代基本上已经过去了。然而,我们还是要切记:本书面向的对象是那些喜欢游戏设计的人、那些喜欢开发游戏并且以“让别人一起分享自己的思想”为乐的人。如果您希望创建一些专业性比较强的游戏,或者希望学习Managed DirectX技术的话,则这本书对于您而言确实只是一本较好的入门教程,但是,如果您真正想进入“游戏”这个领域工作的话,还必须学习更多的内容。 正如我们已经看到的那样,如今,要想开发一个一鸣惊人的游戏必须付出巨大的努力才可以做得到,但是不要被这些困难吓倒。记住:也许,您的游戏就是下一个“吃豆”、“俄罗斯方块”或者“飞行模拟器”游戏。 切记:一个成功的游戏始于一个好的构想! 如何阅读本书 本书是针对游戏编程具体实践的指导性书籍,为了从中获取最重要、最有用的价值,我们建议通过运行每一章的示例程序来学习该章的内容,这些示例程序的代码可以从本书合作网站http://www.tupwk.com.cn下载。使用Visual Studio .NET打开项目,然后编译并运行它。体验一下游戏,并仔细观察游戏的细节,从而使得您在阅读每一章内容之前,可以提前知道该章将要介绍的内容。 本书内容 本书中,我们创建了4个不同的游戏,这4个游戏跨越了好几章内容,另外在本书接近尾声的地方增加了一章附加内容。本书的代码也是按章节组织的,并且很多情况下是按照操作步骤递增的方式进行组织的。程序是采用DirectX9.0(它是2003年夏季更新的DirectX版本)和Visual Studio 2003进行编写和测试的。还需要从独下载DirectX SDK,并且如果决定使用不同的编辑工具的话,则必须使用“该工具能够支持的格式”来创建项目文件。完全可以使用.NET和DirectX SDK,以及一个简单的文本编辑器,如记事本(Notepad),来编辑/运行所有这些游戏程序。但是,如果有可能的话,我们还是推荐使用Visual Studio或者其他更智能化的编辑器。 接下来的部分中,我们将对每一章的内容给出简短的描述。 第1章:.Nettrix:GDI+和冲突检测 在第1章内容中,我们引入了游戏中的冲突检测概念,介绍了一些简单的算法来管理游戏对象之间的冲突检测,然后引入了GDI+的一些基本概念,以及一些图形库,这些图形库可以被.NET Framework用来执行简单的图形操作。 本章,我们创建了一个Tetris克隆版的游戏.Nettrix,藉此来说明上述这些概念的使用。 第2章:.Netterpillars:人工智能和Sprite 在本章中,我们回顾了面向对象编程的概念,并把相关的术语组织成一个术语表。还介绍了“创建游戏类库”的思想,这些类将在进一步的游戏开发工作中得到应用,以此来提高游戏程序的质量和推进游戏项目的开发进度。 在本章中,我们也对游戏中涉及到的人工智能进行了简要的介绍,说明了一些必须在游戏程序中进行处理的典型问题,并提出了一些如何解决这些问题的建议。本章的游戏示例是.Netterpillars,它是一个Snake克隆版的游戏程序,我们使用它来讨论本章介绍的这些概念。这里,我们介绍了如何创建一个可重用的类—— 一个基于GDI+的Sprite,它是本书中第一个可重用的类。 第3章:Managed DirectX基础知识:Direct3D基本概念、DirectX与GDI+ 第3章介绍了Managed DirectX 9.0,讨论了一些基本概念,如矩阵变换的使用、透明纹理的处理、有色光的处理等。这里,我们还讨论了如何基于游戏类型来选择图形库(DirectX或者GDI+)的问题。 本章没有任何游戏程序,只是包含一些简单的应用程序,我们将通过这些应用程序来说明本章所介绍的每个概念。 第4章:Space Donuts游戏 在第4章中,我们讨论了如何使用Managed DirectX中的一个特殊类来创建Sprite。还介绍了DirectSound和DirectInput的基本概念。 我们将使用本章所讨论的类和概念来引导读者创建一个Asteroids克隆版的游戏,即Space Donuts。 第5章:Spacewar 这里,我们讨论了DirectX早期版本中所使用的“代码重写”技术,特别关注了DirectDraw库。另外,我们还介绍了DirectPlay的概念,它可以使您能够编写基于网络的多人游戏。 本章创建了Spacewar游戏的一个实现版本,Spacewar游戏是第一个在计算机上开发成功的游戏,并且它至今仍具有很好的娱乐性。 第6章:Spacewar3D:网格、缓冲区和纹理 截止到本章内容之前,我们已经创建了Spacewar游戏,并进入了Direct3D世界。本章不但涵盖了许多新的3-D概念,而且还介绍了如何扩展Spacewar游戏的2-D版本程序代码。 第7章:为Spacewar3D添加视觉效果 本章深入讨论了如何使用point sprite编写游戏程序,这是一个相对高级的专题知识,但它也是一种可以产生特殊视觉效果的技术。 第8章:进一步学习游戏编程 第9章:附加内容:把.Nettrix游戏移植到Pocket PC上 本章,我们讨论了程序员在“把游戏程序移植到不同的设备上”时所面临的问题,同时介绍了.NET Compact Framework。 使用这些知识,我们介绍了如何“通过将第1章创建的示例程序移植到Pocket PC系统上”来创建Tetris游戏的第二版本。 附录 为了让读者对“专业游戏开发人员如何考虑游戏的设计问题”有一个认识,我们在本书末尾附加了四个附录,其中三个附录取自三个专业人士所撰写的文章,他们都是在游戏领域长期工作的技术人员,另外一个附录是建议阅读的书籍。这四个附录是: ● 附录A 参考文献 ● 附录B 游戏的动机 ● 附录C 我是如何设计游戏的 ● 附录D 开发成功游戏的指导方针