本来应该是 1998 年上市的《G档案》,拖延到了 1999 年上市,“由于前导退出游戏界,希望有热血玩家能通过完全公布的《赤壁》源代码来进入游戏制作的殿堂,为中国游戏尽心尽力”。但对于大多数玩家来说,真正的价值仅在于带单挑功能的完全版《赤壁》,后来有游戏制作者坦言:“里面真正有用的东西不超过三行。”
以下文章才是光盘最有价值的内容
---------------------------------
游戏程序理论
我做游戏的历史只有三年,我所写的内容都只是我在此期间的感觉和经验,还远远谈不上完整和正确,甚至有些内容我们自己也没有完全达到,我只是试图说明我们曾经是怎样做的和在最近的将来打算怎样做。
我读过一些关于如何制作游戏的文章和书籍,有外国的,也有国内的。有的过于难懂(那些专业技术有的我根本看不懂),有的过于简单,而且大都着重于程序编写技术。我在这里希望能够提供其它方面的帮助,比如游戏中的程序设计,项目管理和与我们中国人编写游戏相关联的一些问题。
我希望能够给那些想编写商业游戏和正在编写商业游戏的人们提供一个样本,这不是最好的样本,而是在中国内地游戏制作业的初级阶段中一个普通产品的制作方法和经验。如果是一个初学者,我希望给他一个编写游戏程序的完整印象,让他至少了解编游戏和玩游戏是有区别的。
我希望阅读本文的人应该是一个程序员,熟练使用C语言和C++语言,曾经编写的单个程序长度应该在5000行(150k)以上。因为我在这里不会介绍任何有关编程语言的语法,编译等内容,如果你连这些内容都还没有弄清楚,请先学习一下,否则将很难与本文引起共鸣。假如你是一位美术设计,游戏策划人员或游戏项目管理人员,虽然你无法看懂里面的大部分内容,但是我也希望你能够了解里面的有关内容,因为如果你能够了解程序员的工作,我们就能够更好地配合。
我更希望那些不了解游戏的人们能够看到本文,我希望他们能够了解编写游戏程序与编写其它程序是一样艰巨和复杂的,制作游戏并不等同于玩游戏。
1.1 技术基础
1.1.1 人员
作一个商业游戏所需要的程序员的水平,可以分成三个级别:系统分析员、主模块程序员和外围程序员。
·系统分析员:
这里的系统分析员也许比不上程序员资格考试中的系统分析员,因为我们制作的游戏程序到目前为止都属于中小型程序,长度一般在50000到200000行之间(1.5M到6M),经过压缩之后源代码可以轻松放在一张软盘上。工作量一般在20到60人月之间。所以游戏程序的复杂程度比一些大型应用程序要小。但是,游戏系统分析员的工作也一样是复杂繁重的。他的主要工作是需求分析,程序设计和进度管理。
在需求分析阶段,主要是根据游戏设计制定的游戏方案确定那些内容是可以实现的,那些是不能实现的;可以实现的部分如何实现,不能实现的部分该如何修改。最后制定一个可行的游戏程序制作方案。这个方案最后被系统分析员写在程序设计文档中。当设计定稿后,制定开发计划,组织人力开发,监督制作成果。
·主模块程序员:
过去我们的系统分析员和主模块程序员由同一人担任,但是到后来,我们发现,因为程序的管理设计人员也要担任繁重的程序制作任务,很难面面俱到。所以我建议把主模块程序员独立出来。由他来负责对游戏主要运行部分进行编程。这需要主模块程序员具有非常丰富的编程经验,至少应该具有完成一个游戏的经验。但是其实每个人都是从不会到会,从没有经验到经验丰富的,不能满足条件也没有关系,只要程序难度小一些就可以了。
·外围程序员:
游戏的程序一般都会被分割成若干个模块,如果该模块独立性比较大就可以交给其他人员完成。这些人只要有一定编程经验就可以胜任了。
1.1.2 编程平台
任何的计算机语言都可以被用来写游戏。游戏可以被运行在任何可能的计算机硬件设备上。但是,因为我的制作经验的局限,我无法向你们介绍用Cobal语言编写AppleII上运行的游戏。同样,我也不会教各位如何使用Visual Basic,Pascal或Java,任何形式的DOS程序也是我不会花时间讲解的。在我后面的讨论中将只涉及在windows95/98下的Visual C++编程。
现在,编写游戏时不能不提到Microsoft公司的DirectX。它是一套基于Windows95/NT的游戏底层接口,在我们的游戏中使用了它作为底层接口。关于它的使用想必大家已经很熟悉了,现在已经有中文的书籍出版,我不必赘述。
有的书上讲在编译和调试程序时最好使用Windows NT或双显示器,尤其因为DirectDraw中独占显示器。可是我试过之后发现都不实用。对于WindowsNT,它的4.0版只支持DirectX 3.0, 听说5.0版才支持DirectX 6.0,但我总不能等到NT5.0出了之后才开始编吧。对于双显示器,我一直耿耿于怀,外国人都很阔,每个人可以配备两台机器,可是,就算我找到两台计算机,程序装入的速度实在让我不耐烦,调试一遍时间太长,等不起。
我们应该重视的倒应该是计算机的兼容性问题。为我们提供测试的计算机是很少的,如何找到更多的条件才测试我们的程序是后期应该注意的问题,千万不要以为在Windows95时代计算机硬件的差别已经没有了,它们出起错来更危险。
1.1.3 语言
在任何一本写游戏编程的外文书籍里都会提到编程语言主要有两种,汇编和C。有的书里甚至不提倡使用C++。不使用C++的原因我猜有两个:第一,速度。据说C++代码比C代码慢10%。这个数字我没有测试过,但C++比C慢大概应该是对的。因为用C++比直接用C编写代码要方便和简单,所以速度应该会慢。第二,便于移植,移植这个词可很时髦,什么PC到PS啦,PS到Saturn啦,Saturn到N64啦,N64到Mac啦,Mac到PC啦之类,一个游戏必须要在所有地方出现才过瘾。如果使用C++就难了,因为象次世代游戏机上的开发环境,一般不支持C++,N64虽然说是支持但仍然建议使用C。
使用汇编的理由也是很简单的,那就是快!因为游戏编程中表现最明显的地方就是游戏的速度。汇编比C快的道理也是很明显的,那就是汇编要比C难写多了,速度自然快些。
那么速度就那么重要么?过去上学的时候,用汇编写出来的程序编译出来的一般十几k,后来用C写的小程序大的有几十k,而现在编译windows程序,一上来就有一百多k。过去的游戏就是绿色屏幕上几个字符,而现在都是真彩色的图象和实时三维。过去的游戏一个人就可以"搞定",而现在必须分工合作。这些给我的感觉就是游戏越做越大,程序越写越长。是不是有一些方面开始变得与游戏速度一样甚至更加重要了呢?
这其实就是大家经常谈论到的一个问题:程序的Bug。一个程序如果越来越复杂,越来越长,而且多个人共同编写,这时候就越容易出现程序中的臭虫。我认为,以我们目前的程序编写水平而言,程序的正确性要远远高于它的效率。实际上,我在后面的主要篇幅都在讲如何提高程序的正确性上,而只有很少的篇幅介绍程序的优化。
所以我选择编程语言主要是从其正确性和效率两个方面来考虑的。目前我选择C++。
这不仅仅因为我对这个语言最熟悉,更因为它的特点,对两个方面都符合得很好。程序是人写出来的,如果程序越容易写,就越容易正确,这方面汇编语言显然不是候选者,Pascal虽然好,但是那些Begin和End写起来也太累。 C语言要省事得多,C++更进一步,而且有了封装,继承,多态的概念。可是编写最方便的首选应该是Visual Basic,Delphi和Java了。程序的框架都已经被准备好,只要在里面填东西就可以了。只是因为它们的效率比较低,而不能成为游戏编写的最佳语言。
现在很难想象一个游戏整个都是用汇编写的,因为一个10000行的C程序改用汇编写至少需要50000行,那其中出错的机会至少要多出5倍,而且汇编代码太过抽象,很难读懂。所以应该只在非常需要效率的地方才需要使用汇编语言。
C语言与C++的差别不大,而且我认为C++所带来的封装的概念足以弥补它们的速度差异。关于移植,有消息说Sega最新一代的游戏机DreamCast要使用Windows CE作为操作系统,那么C++应该也会支持的了。大融合的时代总会到来,不用担心。我的C语言代码也主要用于程序的底层。
那么,现在大家对我所使用的语言应该有所了解了。使用C++作为主要语言,同时辅助以C和汇编。
1.1.4 编译环境
Microsoft Visual C++2.0/4.0/5.0/6.0是我一直使用的编译器。虽然Borland C++和Watcom C++也可以编译Windows程序,我仍然认为Visual C++是最好的。没有别的理由,就是因为习惯了。如果你已经习惯使用Watcom C或Free C什么的,也没必要改。如果从来没有编过Windows程序,倒是可以先从这里开始。
我听说谁如果不会使用SoftICE调试程序就没有达到编程的顶峰,我一直以此为遗憾。我不会使用SoftICE。我也远远没有达到编程的顶峰。"竟然这样的人也编起游戏来了",也许有的人会这样想,我想这没关系,因为本来谁都可以编游戏的嘛。
1.1.5 背景知识
编程序到底需不需要是专业人才,这也是个大家争论的话题。我还是那个观点,这只是一个起点的问题,它只表明入门时候的速度而已。但这并不是说你什么都不需要学。有许多东西需要我们学,甚至需要我们不停地学。
·硬件知识:
你总不能连自己的计算机是什么CPU都不知道吧。虽然我们不需要知道每个芯片的内部构造,但如果我们知道了Pentium CPU有两条并行流水线同时处理指令的话,我们就会特别注意这方面的优化了。
·操作系统:
我们的程序不一定需要多任务,多线程,但是了解我们的程序何时被调用是很重要的。
·数学:
数学是我最头痛的科目了。好在我们在这里所接触的大多是离散数学(我也很头痛!)。最基本的要算是数理逻辑,就是程序中最普通的判断语句中的那些"与","或","非"。其次是那些图论,概率。知道这些编写二维游戏就足够了。如果编写三维游戏,那就赶快复习一下线性代数吧。
·专业课:
这是计算机系中学到的有关课程。虽然数据库,网络的概念在游戏编写中都可能会用到,但是因为都是间接的,就不在这里说了。数据结构大概是最重要的课程了,这里所提到的数组,队列,堆栈,链表,表,树,图等概念在我们的程序中几乎都会或多或少地用到。另外,对于三维编程,还有一门叫计算机图形学,也是很重要的。
·文件:
与游戏密切相关的文件有图象文件,声音文件,视频文件等。这些知识越丰富对我们编写游戏就越有用。可是,这也并不是绝对的,我在刚开始写游戏时连BMP图的格式都不知道。
·美术:
大概每个游戏程序员都有过当"助美"(助理美工)的体验吧。当我们做程序测试,或美术师们没有时间完成裁图,切图等"体力"劳动时,自然由我们来做这些工作。但是,请记住,程序员永远是程序员,就算我们画得再好,也比不过他们的。
1.2 游戏底层
在我们编写每一个游戏时,都希望能有一部分代码可以重用,这样我们才能有更多的时间做更多的事情。这些重用的代码就慢慢形成了游戏底层。游戏底层多了,自然就形成了一些类别。
显示底层:
用于基本显示的函数。把常用的功能制作成函数,统一出错管理。对于Windows95/98下的游戏编程,我们一般使用DirectX作为大部分底层的底层。因为这部分是我们可以用于编程的最底层函数。对于二维显示,我们使用的是DirectDraw部分。为什么还需要在DirectDraw外面再包一层函数呢?原因有三:第一,DirectDraw提供的函数扩充性很强,函数参数较多,而我们使用时参数比较固定,包裹成类库后,参数更加可以封装起来;第二,DirectDraw提供的函数比较分散,而有许多操作是需要多个函数按照一定顺序执行的,包装起来后编写程序比较简单;第三,DirectDraw函数的返回值比较复杂,而且没有对错误进行系统的处理,我们需要自己制作一套错误处理函数,对错误代码进行解释。
显示底层有许多种做法,可以完全自己开发,也可以直接使用别人完成的函数库,比如Internet上比较流行的CDX类库就是对DirectDraw进行了很好封装的底层。
显示底层主要分成下面几个部分:
窗口处理:窗口的创建、管理、删除。
图形接口处理:图形设备的初始化、退出、显示模式的设定、主显示面、后缓冲区的建立。
二维图形处理:游戏使用的二维图象的装入、显示、剪裁、逻辑操作。
外围工具:游戏使用的鼠标,刷新率计算和显示,显示内存斟测,面丢失(Surface Lost)处理(在DirectX 6.0后据说可以不用),错误处理,调试函数。
关于显示底层还有两个问题需要说明:
第一,显示部分的调试。因为我们所做的游戏一般为独占模式,在游戏运行时不能跟踪(除非使用双显示器),所以我们只能另想办法,一个比较常用的办法是使用窗口模式和全屏模式切换。不一定在游戏运行中随时切换显示,在调试时事先指定也可以实现该功能。
第二,多媒体播放底层:
播放多种声音,音乐,视频等多媒体效果。比较古老的一种办法是使用Windows 3.1就开始使用的MCI调用。它是一种通用接口,使用不同的参数调用同一个函数就可以实现基本相同的功能。用MCI可以实现的主要媒体类型有MIDI,WAVE,CDAUDIO,和VIDEO。它的优点是使用简单。缺点则是缺乏交互性,而且同种类型的媒体不能同时播放。这样就很难实现多种音效的混合。
一个基于DirectX的调用是使用DirectSound。它是基于WAVE文件的一套播放函数。非常适合混音。缺点就是使用较复杂,而且如果想实现分段读取较长的WAVE文件,编程有些难度。
另外一个针对MIDI的DirectX是DirectMusic。它是DirectX系列中的一个新成员。
对于播放高质量的VIDEO(视频)文件,则有另外一套底层。比如Microsoft的ActiveMovie和Intel的Indeo Video。有了它们我们就可以放心地全屏播放AVI文件了。
对于这些底层,我们所做的只是简单地封装上一层函数,使我们在使用该功能时达到最简便。
但是假如你对这些现成的播放程序不满意,也可以完全自己开发。只要你知道这些文件的格式,再把它们存储成你需要的格式,用自己更加优化的算法将它显示出来就可以了。用这种方式你可以自己播放AVI VIDEO, MPEG, MPEG2或FLI/FLC。
文件封装底层:
对使用的文本,图象等数据进行封装。我们也常用这种方式把多媒体文件封装起来,防止别人事先查看。这种工作往往是循序渐进的,我们会根据自己的时间和实力,封装相应的部分。比如先封装比较简单的文本,图象。然后是较为复杂的声音文件,最后是最复杂的视频和动画文件。
有的时候封装也是为了压缩。不仅再安装时少占用硬盘,装入时也可以节省时间,有时在运行时也会减少内存占用而不会对速度有太大的影响。
根据文件类型的不同,我们可以这样分类:文本、图象、声音、视频、动画等。对于每种类型,我们还必须有打包函数和解包函数之分。
界面底层:
自己编制的类Windows风格的界面类库。我总有这样的习惯,希望在我的游戏里没有一点Windows的风格,于是我不会使用任何一点的有Windows风格的界面(游戏工具除外)。所以游戏的界面必须我们自己做。然而我又使用过MFC那一套界面类库函数,很佩服Microsoft的本事。也希望我们的游戏中有一套自己的界面系统。这套系统将会包含Windows用到的主要界面元素:位图(Bitmap)、按钮(Button)、检查框(Checkbox)、滚动条(Scrollbar)、滑块(Slider)等等。
虽然Windows允许我们在使用标准界面时自己画图,但是因为它只支持256色,是基于消息响应机制的显示,而且无法支持位图的封装,所以我们使用一套完全由自己制作的界面底层。这套底层建立在显示底层和文件封装底层之上,形成了一套比较完整的系统。
上面这些只是一般游戏所需要的底层,对于某些特殊类型的游戏,可能还会有战略游戏的显示,操作底层,RPG游戏的事件处理底层,战棋游戏的显示,智能底层,动作游戏的场景底层等。如果编写三维程序,则还会有三维显示和操作底层。这些底层都不需要也不可能在一开始就全部完成,而必然是在不断的修改和检验中完善的。它们也不可能一成不变,必然随着我们编程经验的积累和开发环境的改变而改变和完善。
每个编写游戏的程序员都会慢慢积累出符合自己游戏特点的底层函数库,这些函数库如果得到不断的发展和扩展将会越来越大,越来越好,这对于每个游戏制作公司和集体来讲都是一笔不可忽视的财富。
而这套函数库越来越复杂,再加上辅助的一整套工具,就可以被称之为游戏的引擎。有了引擎在手之后,不仅意味着我们有了一套低Bug的现成代码,程序员的工作量将会大幅度下降,而且他们可以把更多的精力放在游戏的优化、游戏的人工智能、游戏的操作、以及游戏性上面了。到了这个层次,我才可以想象一个好的游戏将会是什么样子。
1.3 编写规则
现在,只需要一个程序员编写的程序已经很少了,大部分的程序都需要多个程序员的协作才能完成。这期间必然需要程序员之间互相阅读代码。而代码的编写规则就是非常重要的环节。一段代码如果写的浅显易懂,不但在程序交流时非常方便,而且对于寻找程序错误也时很有帮助的。程序员也是人,是人就会犯错误,不管他多么地不愿意犯这个错误。所以我们也希望能制定下一个规则,使他们在一开始想犯错误也不行。于是就出现了程序的编写规则。
如果不按照这些规则编写代码编译程序是不会报出错误的。但是如果按照规则编写,则对我们的思路的整理、笔误的减少、错误的查找和代码的阅读都是极有好处的。
下面我只把规则中几个重要的部分加以简单的描述,在后面附录中会有一份我们已经使用了一段时间的完整规则。
命名规则:
程序中对变量和函数的命名看似简单,可是名字起得好与不好有很大的不同。对于变量我们一般采用匈牙利命名法和微软命名法的结合。对于函数我们一般要把模块名写在函数名的开始。对于类库我们一般要求类的成员和成员函数要紧密对应。
变量使用:
对于程序中所使用的所有变量,我们都需要其有明显的定义域。对于全局的变量要尽量封装。对于类库,所有成员必须封装。
函数使用:
我们对函数的参数和返回值做了要求。对于函数的使用范围也做了规定,要求范围越小越好。
注释:
对于程序注释,我们虽然不需要很多,但是在函数声明、变量声明、主要算法部分、源程序文件的开始都需要有注释。
调试:
我们的底层和Visual C++都提供了一些供调试用的代码,在我们的代码中需要适时地使用这些代码,以提高程序的纠错机会。
这里有几个问题需要特别说明:
第一,关于链表的使用。
我在编程中所遇到的所有死机错误中,有90%来自于指针,9%来自于字符串(其实也是指针的一种),1%来自死循环。而链表这种把指针的优势发挥到极限的方式我是不提倡使用的。有人讲如果不会使用链表就不是C程序员,那么现在我连个合格的程序员的资格都够不上了。的确,对许多人来讲,编写没有Bug的链表是很容易的事情,甚至对某些人而言,一个没有链表存在的程序几乎不能称得上是商业程序。我承认有许多天才的程序员在自己的链表程序中表现得十分出色,他的程序效率既高又没有Bug,但是我也知道还有更多的程序员并不是天才。就算是天才的程序员如果在他的十万行代码中有五万行于某些链表有关,这其中的某个指针出了一个错误,而这个错误又不是每运行一次都出现的时候,他又有多大的把握很迅速地找到这个错误呢?链表的复杂性在于它的地址的随机性,这使我们在调试跟踪时非常困难,我们很难随时观察每一个节点的信息,尤其当节点多的时候。所以我把链表的使用完全限制在算法的需要和该代码被某个独立模块完全封装的情况下。
实际上我在设计程序时,要求尽量减少指针在主要模块之间的传递,而使用效率较低但是不易出错的句柄ID的方式。
第二,关于类库的成员。
既然我们使用了类库,其中一个主要目的就是要把其中的成员完全封装起来。首先把它设置为私有,然后定义标准的一套Set和Get函数。这虽然使我们在写代码时比较烦琐,但是只有这样我们才可以严格规定该成员的只读属性和可写属性,减少对某些重要变量的无意修改。
第三,关于变量和操作符之间的间隔
许多人对于变量和操作符之间的距离并不在意,认为多个空格少个空格只是看起来好不好看而已。而实际上,这对我们是很重要的。因为如果我们把间隔固定下来,在查找某项操作时就可以使用带空格的字符串,而大大增加找到的机会。
1.4 程序设计
我们在编写自己第一个游戏时,往往是凭借自己的兴趣,想到哪就编到哪,有时连自己都没想到会编出这么大的程序来。那时侯我们对代码的修改往往是很随意和彻底的,因为本来都是自己的东西,而且更希望它更好。可是,程序越写越大,有一个问题就会越来越明显,那就是程序的错误。为了减少错误的产生,我们必须采取一些办法,所以也就产生了程序设计。程序设计的必要性还表现在另一个方面,那就是程序员间的合作。为了让每个程序员对我们所要做的事和我们将如何做这件事有个明确的了解,也为了让管理人员能够从量的角度了解任务的完成状况和进度,我们也必须有程序设计。否则我们就只能象一群乌合之众一般,鬼才知道这游戏要做到什么时侯。
一般,我个人认为,当一个程序需要写到10000行以上时就应该有比较独立的程序设计文档了。可是程序设计文档应该是什么样子呢?很抱歉,我也一直在寻找这个问题的答案。在我刚开始做游戏的时侯,没有人教,于是我翻出上学用的课本,打算来个生搬硬套,写来写去,发现,不行。这样的写法太累了。比如在软件工程课上所讲的数据流图,我好不容易写满了一张八开的纸,马上就发现自己已经糊涂了。就算不马上糊涂,过一段时间我也会认不出那些条条框框是什么了。就算我能记得这些图表的意义,我能够保证所写的代码和图表上的一样么?我写完后,还需要和这些表对一下。就算程序和文档中的内容一样,那如果我的设计方案改了呢?又需要先改文档,再改程序,再对程序。这样对我来讲可太累了。
后来,我才发现,原来书上所写确实有道理,可是它并不是面向我们这些人的,它所面向的是写大型程序的人。这些程序大到需要专门有这样的人来写文档。这些人只要把文档写好再确认完成的程序是否符合要求就可以了,根本不用去写一句的代码。是啊,如果编游戏也有这样的工作就好了。可是很遗憾,目前我尚未遇到可以聘有专职程序设计人员的公司。所以程序设计者就是程序编写者的这个事实起码在我们的目前阶段是很难避免的了。
那么怎么设计文档对我们用处又大又比较节省时间呢?每个公司和每位程序设计人员的习惯都不一样,我只介绍一下我们曾经使用过的一些方法和文档的类型。
程序设计总纲:
无论我们做什么,最先要清楚的一个问题就是:我们做什么?很弱智是不是?但是我发现有些人在很多时侯都"不知道"自己在做什么。程序设计总纲就是要告诉自己和自己的伙伴们,我们要做的是什么样的游戏程序。它包括:
游戏概述:游戏的背景、类型、操作方法、特点等;
程序概述:游戏程序的编译平台、硬件运行需求、语言、编程重点和难点、技术能力分析等;
程序员概述:参与编程的人的能力和在整个程序制做中的作用和地位;
程序模块划分概述:有本游戏所需要的所有程序,和程序内部的功能模块的划分。这部分只要有比较概括的说明就可以了。
这篇文档的作用就是让所有人都能够了解本游戏的程序将会是什么样子,它的特点是什么,完成它的难点又是什么。以及我们为什么要这样做,有谁来做等这样基本的问题。它所面向的对象除了有自己和本组内的所有程序员以外,还应该有本游戏的游戏策划,美术设计、项目负责人、项目经理、制片人等。如果有可能也应该和本公司的市场、销售、广告公关、出版、甚至公司总经理充分接触,听取各个方面的意见,也充分表达自己的意见。如果能做到制做本游戏项目的所有人员从上到下对本游戏的程序制做都能有一个基本的了解,理解和信心那是最好的。
程序模块划分:
这是对程序设计总纲中最后一个部分的详细说明。说明的内容主要有:该模块的功能、接口、技术要点、所用到的软件底层等。它所面向的对象一般是所有的程序员,但是如果让与程序合作的人员(美术、策划、经理)也能了解则更好,这样可以加强我们之间的勾通,让不懂编程的人也能了解编程人员的苦衷。
一般而言,一个游戏按功能划分(我们很少用其它的分类方法)可以有下面几个部分:
工具部分:在游戏的制做过程之中,从游戏策划的文档,游戏美工的图片到游戏完成,中间必须经过游戏程序的转换和加工。这些数据在进入程序之前必须经过规整,排序等操作。这部分工作过去一般都是由程序员来做的。在人手紧张和工作量比较小的时侯这样做还是可行的。但是如果这样的工作过于复杂,工作量太大,就不行了,我们需要一种方法来提高工作效率。这种方法就是工具。其实我们在计算机所做的任何工作都是在使用工具,唯一的区别只是这些工具都不是我们自己做的。因为游戏本身的特殊性,我们不可能总能找到我们所需要的工具,自己制做就是十分必要的工作。
这些工具也可以分成三个级别:别人的工具,我们自己的可以重用的工具,我们自己的只在本游戏使用的工具。别人的工具是最好的工具。原因很简单,因为它不用我们再去编了,不仅程序Bug较少,操作界面友好和简单,而且开发时间是零。所以如果可能一定要使用别人做好的工具。如果实在没有满足要求的工具,或者我们还需要该工具所没有的功能,我们只能自己编。那么如果这个工具可以被以后用到也不错。所以我们在编写任何工具的时侯,其通用性是我们考虑的首要因素。
工具与游戏其它部分的程序有一个最大的区别,那就是工具程序是独立的可执行文件,它与游戏的唯一交互方式就是存在磁盘上的文件。所以它比较适合交给其他的程序员制做。另外一个特点就是它一般都是针对非程序员的,所以如果工具做好了,也可以很大程度上帮助他们提高工作效率。
底层部分:这部分程序代码的最大特点是可重用性。它是游戏本身与计算机通用系统之间的桥梁,它与游戏的具体细节关系并不大,可以被使用到多种游戏类型和多个游戏之上。这对我们是非常重要的。实际上,我们编写程序所积累的最直接的财富就是可重用的工具和游戏底层。
游戏底层从与游戏的相关性可以有大概三个层次:
最底层:它们向下直接调用系统函数和功能,向上与游戏几乎完全无关,是游戏程序与计算机系统的直接桥梁。它包括:
·显示底层:提供游戏显示所需要的所有函数;
·文件底层:提供对游戏所需的各种文件处理的接口;
·多媒体底层:提供游戏所需的多媒体效果,如声音,视频等;
·对于三维游戏有模型管理底层:专门保存,处理和显示三维数据;
中间层:它们向下调用最底层的游戏底层,向上为游戏提供函数。与游戏无关。它可能:
·界面底层:使用显示和文件底层,提供界面类库和操作函数;
最高层:它们向下调用中间层和最底层,向上为某种类型的游戏提供特殊的逻辑支持。它可能有:
·战略游戏的命令执行底层,显示底层,地图底层。
·RPG游戏的事件处理底层,场景底层。
这三个层次的制做难度是越来越难的。它往往需要我们在制作过几个游戏之后提炼和总结出来(实际上我们到现在也还没有发展出第三个层次的底层)。但同时,这三个层次是越来越重要的,因为它距离一个成品游戏更进一步。我们在写游戏时可重用的部分越多,重用的层次越高,我们的工作量就越少。我们也就越可能有时间研究和开发新的技术,好的算法,我们的游戏也就会越做越精。
相比之下,前面的两个底层都与计算机系统有关,与游戏本身无关;第三个底层与计算机系统无关,与某种类型的游戏有关。
底层部分与工具部分也是密切相关的。一般每一套底层都需要一些工具来与之对应。比如,我的显示底层需要某种格式的图片,我们就要制做一个格式转换和图片观察的工具。把工具和底层结合起来分类,然后把它较给独立的程序员去完成,是一种比较常见的模块划分方法。
当然,我们在做游戏以前也不一定非要什么工具和底层不可,这些东西完全都可以"自然"产生。假如你能够坚持制做几个游戏,把可以反复使用的程序归纳起来,修改一下,就是一套底层了。如果我们在编写程序时,每时每刻都在想:这段代码是否可以在以后使用,怎样的写法可以使我在以后使用,那么我们在后来的修改工作中就会轻松很多。而假如我们在编写程序以前多花一些时间,把想要做的东西设计清楚,在一开始就可以把它写成独立的底层代码。这样积少成多,我们的财富就会越来越丰富。
游戏本身:这才是我们每次都要做的游戏。所有体现游戏特色的内容全在这里。当然也有的人认为如果我们的经验足够丰富,想得足够全面,连这部分的程序也可以重用起来。以后我们编游戏只要改一下图片,换几个名字,编一段故事,一个新游戏就产生了。实事上,也有公司制做了一些类似游戏工具的东西,其中做得最好的应该是象Director, Autherware那样的多媒体编辑工具吧。但是,它们都有其局限。最明显的一点就是:它们必须针对某一个类型的游戏或只能是多媒体程序,不同类型游戏的制做是有很大区别的,几乎很难用一个固定的模式将其完全函盖。其次,它们创新困难,现在游戏几乎成了创新的代名词,哪一个游戏做出来没有它自己的特点呢?而使用一个固定的工具是很难做到这一点的。第三,难以对它们进行优化。程序的优化往往和程序本身的特点有关,优化的程度越高,它的特殊性也会越大,所以,通用工具只能牺牲一些性能。我到目前还没有看到一个游戏制做工具可以达到商业效果,而多媒体工具之所以流行正因为制作多媒体产品所需的模式比较单一,对速度要求也不高。
所以,制作一个完全可以通用的游戏工具到目前仍然还只是一个梦想。但是,我想这是一个很美的梦,如果真的到那个时侯,我们制做游戏将会和拍电影一样简单(我指的只是制做的过程),只需要一个程序员根据策划的意思把图片和声音放在一起就可以了。
每个游戏都是不一样的,但它们都有一些相似的地方,比如:
游戏的操作:游戏者如何操作和控制游戏中的一个或多个主角;
游戏的显示:不是游戏的底层,而是与具体游戏有关的显示部分;
游戏的运动:游戏中有的内容是要不断变化的,包括位置变化,图片变化和形式变化;
游戏的智能;能够与人对抗的思考;
游戏的存储;把所有当前游戏需要的数据保存在磁盘上,然后再重新装入游戏;
游戏状态的转换:从界面到游戏,从游戏到动画,在不同的时侯有不同的操作和显示管理。
我们通常也会按照这样的规律对游戏进行模块划分。
游戏数据结构和算法:
有人讲程序就等于数据结构加算法。这句话很有道理。我们所编的程序其实就是把某种格式的数据(图片,主角的参数)经过一系列的转换,成为计算机屏幕上的数据(游戏本身)。所有的数据都需要以某种方式存储,这就是数据结构。而算法因为是与数据结构密切相关的,所以虽然它们不属于同一个概念,我把它们放在一起设计。
我们通常所使用的数据一般可以分成两个部分:数据库结构和当前结构。
这里的数据库不是什么商业数据库软件,而是游戏中所使用到的所有数据的集合。我还没有见到有哪个游戏在存储这些数据时使用商业数据库软件(比如FoxBase)。也许它们都被隐藏起来了吧,我猜想。但不管怎样,其意义是一样的,我们需要把所有在游戏中用到的数据都以一定的形式储存起来。同商业数据库一样,数据库的组成也是由字段组成,即数据元素。每个数据元素一般是一个类库或结构,有若干的成员。数据元素所组成的数组就是数据库结构中最主要的组成部分。
数据库的内容很多,而且按照一定的规则排列,而真正需要显示和当前需要计算的数据却很少,有些数据还是计算的中间结果,比如主角的位置,主角的动作等,这时侯就需要我们另外存储一些数据。它往往是数据库中的某个字段(数据元素),或一些数据的组合。
如果把数据结构按照功能分类,我们还可以把它分成主数据结构,模块数据结构。它们的定义域是不一样的。
在我们的游戏中,会有许多数据结构的类库,它们之间也必然有数据结构之间的数据传递和保存。如何处理好这些数据之间的关系是编写这部分内容最重要的考虑。
首先是数据结构定义域的问题。在无数的教学课本上都在不断提醒大家,要尽量避免使用全局量。为什么要这样做呢?第一个原因显然是因为这样做的人太多了,我们使用全局量直接,方便,快捷,有什么理由不用呢?而答案也很简单,因为它暗含了错误,因为它不易于阅读和修改。于是我们用两个规则来限止全局量的使用:第一,尽量使用局部全局量,使该全局量的定义域最小,比如基于源程序文件的全局量,只有整个游戏的核心结构是全局范围内有效。第二,对于所有的全局量都对其内容进行全面的封装,如果是类库则使用成员函数,如果是结构,则定义专门的函数对其内容进行处理。
其次是数据的传递。我们经常遇到数据结构之间的互相调用和嵌套,很多人都喜欢使用指针(又是指针)做这项工作,因为它象全局量一样:直接、方便、快捷。但是我因为个人水平的问题在使用指针时总遇到一些不便,比如,易于出错,而且一旦出错就是很严重的当机,程序非法退出。要知道现在每启动一次计算机仍然是很耗费时间的。还有另外一个问题,那就是指针不能存盘,我必须另外制作一套程序对结构的存盘做特殊处理。所以我一般使用索引ID号来代替指针。具体的使用是这样的:数据库结构是以数据元素为单位的数组,数据元素的索引(ID)就是它在数据库数组中的下标。所有其它结构对该数据元素的保存都只保存了该元素的ID号。指针只在从数据库根据索引得到元素时使用。这样的好处很明显,ID号是整型数据,可以通过该值的范围判断出是否有效,只要在其有效范围内,再通过指针取值肯定是有效的,几乎跟本不会出现非法指针的现象。
程序开发计划
有了要做什么和怎么做,下面也就是需要什么时侯做和由谁来做了。
一般我们都会制定一系列的里程碑。比如演示版,原型版(体验版),测试版和正式版等。在这之间也可能会有其它什么版本。然后制定完成每一个版本所需要的时间,主要内容和验收标准。除此之外,我们还有:
程序中每个模块的制作时间的表格,
每个程序员分工的说明,工作量说明。
编程过程中可能出现的风险和问题的说明。
在写完总计划以后,我们还会有更加详细的月计划,阶段性计划,我们还会写程序进度表。我们所做的一切都是为了游戏程序可以按时完成。
影响开发时间的主要因素有很多:
·资金因素:这些钱至少应该支持到我们可以把游戏做完,而且能够把我们的游戏向市场推出;
·市场因素:是否是销售旺季,是否有同类产品产生竞争,本类型,题材的游戏是否还受欢迎;
·策划因素:游戏的复杂性有多大,内容有多少,策划的进度是怎样的;
·美术因素:美术的制作进度是怎样的,何时可以提供需要的内容;
·技术因素:用户的计算机硬件是否已经准备好。我们的技术是否会过时,开发新技术的风险会有多大。还需要制作哪些外围工具;
·人员因素:程序员水平如何,配合状况如何。
程序设计人员需要仔细考虑这些因素,才能根据具体情况制定比较完善的程序制作计划。
但是,很不幸,我从没有按时完成一个游戏,所以我目前尚不知道妨碍我们按时完成进度的到底是计划不够好还是执行的人不够努力。总之,在做计划时一定要留有余地,而且我的经验是我们完成游戏的时间一般比计划的要多20%到30%。可是如果按照这样的计划去做游戏的话,一定会把投资人吓跑的。于是在现实生活中这种状况就变成了"先斩后奏",写报告的时侯说时间很短,而到时侯我们就因为某些原因不得不拖期,反正钱也花了这么多了,必须再增加投资而把它做完。所以无论是直接制作游戏的人或者投资制作游戏的人,我都希望他们可以对这件事有个比较客观的了解。也许在将来制作游戏可以不必再加班,制作计划也可以按时完成,但是至少在我们这里,还必须随时面对它们,依靠我们顽强的毅力和坚忍不拔的精神把游戏做出来。
1.5 制作流程
等到游戏计划写完,并得到通过之后,我们便开始进入游戏制作的时间。其实游戏的制作可能从很早就开始了,比如早期的技术探讨和准备。而我在这里想再说得稍微远一些,远离现在的题目:程序,而转向整个游戏的制作。
整个游戏的制作过程一般可以分成三个阶段。策划阶段,制作阶段和调试阶段。它们之间的关系一般应该是在策划阶段后期,开始程序和美术的制作,在制作后期开始游戏的调试。它们三者的时间比应该是3:4:3。我认为这是一个理想状态,但是我们往往达不到理想状态,典型的情况是游戏策划迟迟不能定稿,我们不得不在一边设计游戏时一边制作,而到了后期,制作又很难按时完成,必然压缩调试时间,最后只好仓促地发售游戏。它们三者的时间变成了4:6:0。我所说的这种状态当然只是一个极端,但是我想在我们目前所开发的游戏中或多或少都有这方面的问题。
造成这个问题的原因也有很多:
·游戏立项不规范:人们不知道为什么要做这个游戏;
·策划设计工作准备不足:人们不清楚该做什么、什么时侯做、谁来做;
·制作人员水平有限,缺乏经验:自己做不好,或做不快,甚至都不知道该怎么做;
·资金:没有钱谁会做呢?
·项目缺乏管理:各部门缺乏协调,大家群龙无首,缺乏沟通,最后大大降低士气和工作热情。
但是无论这些因素都是些什么,以及它将如何严重地影响我们,我都觉得只要有一样东西就足以支持我们把这个游戏做完。这就是我们的坚持不懈的努力。现在,我们在市场上的游戏质量都不算很好,但是我要说,只要它被做出来了,就是一个成功的作品。我不管游戏玩家们对我这句话有何看法,我只是认为,在那些作品的背后一定有一个或一些人在努力着。也只有他们才能真正体会制作游戏的艰辛。而且,只要他们还能继续做下去,经验会逐渐增加,配合会更加默契,游戏也一定会越做越好。
游戏程序的制作过程与游戏的模块划分有关,大概可以分成三个阶段:工具制作阶段,底层制作阶段,游戏制作阶段。
底层制作可能是最开始进行的阶段,有可能与策划阶段同时,甚至更早。因为这个部分与具体游戏无关,而可能只与游戏所要运行的平台和我们所使用的开发工具有关。我认为,开始的时间应该越早越好。游戏程序员在技术上的准备如果越充分,制作起游戏来就会越顺利。
在策划大纲基本上完成后,也就是游戏的类型,模式基本上固定之后,就可以开始游戏工具的制作了。游戏工具一般是提供给美术人员,策划人员使用的(当然也有自己使用的),所以在用户界面上应该多多听取他们的意见。这些天天与我们在一起的用户,如果我们都不能好好对待,那就更别提我们游戏的用户了。
游戏本身程序的制作是最耗费时间和精力的地方,如果说底层程序和工具都可以把重点放在结构化和优化上,这部分程序正好相反,我们通常做不到这些。因为我们在写这部分程序的时侯,总是已经精疲力尽了,而且我们的代码已经很长很长,一旦发现了程序错误,能找到就很不错了,更别提把它改得漂亮一点。再加上游戏策划随时提出的一点小改动,就可能要改变我们整体的数据结构,做大的改动几乎是不可能的。所以到了游戏制作后期,把程序员叫作铁匠更合适一些,他们在到处打补丁(注意,千万别在写游戏底层的时侯也干这种事)。
在游戏制作的中后期,每当程序员一睁开眼,进入眼帘的就是满是Bug和缺乏功能的游戏,这样的一个程序如何才能变成游戏中真正需要得程序呢?无论当初程序计划制定得多么好,在这时候都显得有些不中用。但这并不说明计划没用,而是需要我们把计划变成我们真正需要的东西,这就是每日工作计划。名字听起来很正式,其实并没有什么特殊的格式,仅仅是把我还没有做出来的游戏的内容一条条地写出来,不必区分什么模块和内容的多少,只要手写而且自己看得懂,然后贴在机箱上,要保证随时看到。这些内容我可能在一个星期后也没做,但是它会时时提醒我还有什么没有做。随着时间的推移,有些项目已经完成了,又会有新的内容写进来,而等到你最后积累出一大叠这种计划单时,你会发现原来游戏已经做完了。
这种办法我一直在使用,有时侯真觉得自己没有长进,做事一点计划也没有,可是它就是这么有效,你不必有什么经验,也不必整天面对着程序发呆,每天只要考虑如何把下面的内容做好就可以了。
不过我还是希望以后的程序员不必这样写程序,如果所有的人都能够每天按照预先制定好计划完成工作,也不需要加班,最终做出的游戏又很不错就好了。希望这不是永远的梦想。
1.6 程序调式
我在前面曾经说过,我不会使用SoftICE来调试程序。这证明我并不是一个很聪明的程序员。这也证明我在调试程序时会遇到更多的困难。让我每天在汇编代码和死机中漫游是件很痛苦的事,所以我总在想如何才能摆脱它们。
如果我不能很快地找到这些难缠的Bug,我能否在一开始就避免它们呢,甚至减少它们出现的机会呢?答案是肯定的。
死机(在Windows系统中有时是"非法指令"错)错误很主要的来源来自指针,但这并不是说我们就不能使用指针。恰恰相反,我们在很多地方都使用指针,而且出错的机会很少。原因很简单,那是因为我们在使用被保护的指针。如果你能证明你所使用的指针永远都指在合法的位置上,它还会出错么?所以我们在分配空间时大多使用静态空间和连续空间。所谓静态空间就是数组,连续空间就是指针数组。我们通过数组的下标来限制指针的读取,这样非常方便也有效。
封装也是减少错误的很好办法。我们把对内存的分配和释放封装起来,把对全局量的读取封装起来。在查找问题时就可以很快地缩小可疑对象。
对函数的返回值和错误代码的认真对待也可以让我们飞快地找到问题所在。很多人刚开始编程时都认为程序很短小,没必要写那么复杂的错误处理信息,也没必要判定函数的返回值。而我则恰恰相反,无论对待多么简单的程序我都会做非常详尽的错误处理。我甚至把显示错误的对话框写在底层程序中,以供随时调用。假如出现了错误,我就可以迅速知道错误发生的位置以及发生错误的大概原因,我的程序还可以正常地退出,不是继续执行而造成死机。
使用调试信息可以帮助我在Debug版中获得更多的有用信息。比较常用的有Assert()和OutputDebugString()。在错误刚刚发生时就拦截它要比它造成了更严重的影响后要好。
代码写得好看一些也有助于查错。假如你在一行中写进好几句代码,你将如何逐行跟踪呢?我们如果把函数,成员函数写得规范对称,虽然麻烦一些,但别人在使用时就会轻松多了。
这些办法都是在我们编写代码时需要注意的内容,我想如果你在准备开始编程时就对此有所准备,那么到你编程结束时应该能够节省不少调试错误的时间。但是Bug是一定会有的,无论你在当初如何注意,因为我们毕竟是人,会犯错误。我想任何人都有过把恒等号(双等于号)写成赋值号(单等于号)的经历吧(好在在Visual C++ 6.0中有这方面的警告了)。没有别的办法,我们仍然需要面对死机。一般的指针错误只会导致"非法指令"或"未知的意外"错误,除非你向一个不知名的地方写了大量的内容(比如几百K以上),一般还是可以安全地退到系统中的。这得非常感谢微软,Windows95/98还是要比DOS好。可是如果你所访问的是系统区域,或申请了与硬件有关的调用,比如在DirectDraw的GetDC()中设置了断点,程序就会直接退回系统或干脆死机。
这个时侯就全凭我们自己了。但是也不要害怕,因为,我们所面对的仅仅是一些代码而已,我们有一个最为严格和伟大的力量:逻辑。这可能是程序员唯一能够全心全意依靠的力量了。所以请大胆地使用它。
如果程序出错,一定有它的道理。哪怕运行一千次只出现一次也是如此。所以我们改正错误的过程实际上也就是找到错误的过程。如何找到错误呢?可以试着用下面的方法:
屏蔽法:把一些代码去掉,再看错误是否消失了,如果已经消失,那么错误可能在刚才屏蔽掉的代码中,再屏蔽掉另外的代码,如果错误又出现了,则错误肯定在这段代码中。要注意的是,这样做不一定能够找到错误,因为,有时侯错误是由两段代码或多段代码相互影响造成的。而且有的时侯我们找到的地方可能并不是真正出错的地方,你只找到了错误被引发的地方,而引发错误的地方还需要我们再仔细找。比如,一个指针指错了地方,那么我们会发现出错的地方是引用指针的地方而不是写入指针的地方。这时侯就体现出封装变量的用处来了,我们可以很快查出这个指针到底在哪被修改了。
如果上面的方法不能奏效,而且错误是在我们刚刚修改了代码造成的,那么可以使用比较法,找到原来版本的文件进行比较。所以我们需要经常保存备份程序,一方面是为了保证程序不丢失,另一方面也会增加找到错误的机会。尤其是当我们到了编程的后期,我们的程序大都编完,正处于修改的状态,而时间又特别紧迫。如果一旦出现了错误,我们只要比较一下新旧版本,就很容易找到错误。
如果你跟踪了半天也没有结果,几网下去一条鱼也没捞上来,而且必须在全屏状态运行,不能单步跟踪,每执行一遍程序就死机,又需要重新启动,这又该怎么办呢?那也不要担心,我们还有最后一招:输出Log文件。在每一个需要监视的地方,增加一段程序,向磁盘文件输出一段文字,如果程序运行到这里,该文件就会多出一段文字,如果程序运行到这里之前就死机或退出了,那么出错的地方就在这段文字和上段文字之间。虽然这样做比较耗费时间和精力,但是基本上能够找到出错的地方。找到之后,我们再去找出错的原因吧。
但是万一你现在还是没有找到错误该怎么办呢?那也不要着急,我所遇到的找到错误的最长时间是整整一天,有的人会长达3天,但是我目前尚未遇到查找单个错误的时间超过一个星期的。如果你寻找错误的时间还没有达到这个长度,就不要急于认为这个错误你是永远找不到的。
其实最难找的错误并不是这些错误,因为这些错误是确实存在的,所以我们改正它只是时间问题。而比较难以调试的错误并不是每次运行都出现的,有的错误需要特定的环境和条件,比如只在某台计算机上出现,有的错误则需要特定的操作,比如打开某文件,再关上,有的错误则干脆需要运行一定的时间才可能出现,比如运行一个小时。这时侯我们的工作才真正艰巨起来。
这时侯,也往往是开发的最后关头,最紧张的时侯,如果出现了错误,将使我们直接面临一个最严峻的问题,到底是发行时间重要还是修改程序错误重要。我姑且不谈到底谁重要。关键是如何解决这些错误。这里你可以看到,把错误消灭于未然是多么重要。我们工作的重点现在转向了重现错误。使用出错的计算机,频繁重复执行某些有关的操作,随时存盘以保存最近时的信息,都是我们常用的办法。
有的时侯重新启动一次计算机,重新编译所有代码,更换一些驱动程序,都可以解决问题。但是有些问题我必须说明:
第一,要以负责任的态度来解决问题。如果你发现有一个地方很明显不会造成错误,但是修改一下之后错误确实消失了,这时侯千万要小心,因为这个错误可能这样被你又隐藏起来了,在以后的某个时侯(可能是最后的调试期)再次出现,这时侯它将会更加隐蔽。
第二,不要动不动就认为是编译器,驱动程序,操作系统或计算机硬件有问题,而不下功夫去寻找错误。这些东西确实会有问题,但它们出错的机会比起我们自己要小得多,我觉得初级程序员还很难发现它们的错误。有问题还是先从自己那里着手吧。
1.7 代码优化
我对代码优化的研究并不深,归根结底是因为我并不是个很聪明的程序员。我曾经见到过一本非常好的书,名叫<图形程序开发人员指南>,英文名是Michael Abrash's Graphics Programming Black Book Special Edition。说它好有两个原因:第一,这本书从头到尾讲得都是程序的优化;第二,我看不懂。我想对于那些高级程序员来讲,他们可能就根本写不出有错误的代码,或者至少他们对于防止程序错误很有一套,总之,程序的调试对他们来讲根本就不是问题,所以他们有的是时间来研究程序的优化。而我所能讲的显然不能与他们相比,仅仅是非常初步的内容而已。
最优化的代码就是没有代码。
我忘了这是谁曾经说过的话。但是我觉得很有道理。有时侯我们把那些外国人想象得多么了不得,其实他们大多只是把这句话应用了一下而已。想一个巧妙的办法有时要比节约几个指令周期有效得多。但是这与我们具体所写的代码和人的经验有关,我们很难只用几句话就把规则说清楚。要知道,游戏的速度有时比游戏的效果重要,如果你对当前我们最需要什么样的游戏有所了解,做起决定就会容易得多。
如果我们真的需要对某些代码进行实质性的优化,那么首先我们要搞清楚哪里最浪费时间。我们常用Profile,VTune或自制的时间计数器来测量时间。而往往最浪费时间的代码大都很少,多是大量的循环最占用时间。
优化的级别也有区别:算法级,语言级和指令级。
体现一个程序员水平最重要的地方就是算法。一个好的算法可以使用非常少的代码就实现原来很复杂的操作。而它也是很难做到的。尤其这些算法经常与负载的状况有关,所以需要比较和测试才能有好的效果。
语言级优化就是我们采用较少的C语言代码来代替冗长的。比如使用临时的指针来代替多级的成员读取。把某些赋值语句放到多重循环的外面,使用inline函数,使用指针或引用代替结构赋值,使用指针的移动代替内存拷贝,把初始化操作放在一开始而不是循环之中。它所遵循的原则就是"无代码"原则,减少需要执行的语句是提高速度的最直接的做法。一般的程序员只要做到这一层就应该可以实现比较明显的优化效果了,这样的程序比较简捷,运行效果也比较稳定。
指令级优化则要深入得多,我对这项工作也并不十分擅长。这里所要用的语言一般是汇编语言,调试和测试也比较复杂,程序不太容易看懂,也更容易出错,有时与硬件有关。但是它所能实现的效果可能是一般人所不能实现的。所以这种方法一般被高级程序员所使用,所针对的代码数量应该比较少,正是刀刃上的部分。这样的优化是以指令周期做为单位的,所以千万要注意,不要让我们费尽心机所做的优化效果,被另外一些很低效的C代码给抵销了。
优化的内容一般有:
代码替换:使用周期少的指令代替周期长的指令。比如使用左移指令代替乘数是2的倍数的乘法。使用倒数指令(如果有的话)代替除法指令。这要求我们对80x86的每一条指令都有很熟悉了解;
减少分支预测:这是pentium 以上CPU特有的功能,它会在执行该指令前预读一些指令,但是如果有分支就会造成预读的失效;
并行指令:这是pentium 以上CPU特有的多流水线的优势。两条(或多条,在pentium pro以上)参数无关的指令可以被并行执行;
MMX指令:在处理大量字节型数据时我们可以用到它,一次可以处理8个字节的数据;
指令的预读:在读取大量数据时,如果该数据不在缓存里,将会浪费很多时间,我们需要提前把数据放在缓存中。这个功能大概要在pentium II的下一代CPU Katmai中才会出现;
Katmai指令:想一次处理4个单精读浮点数么?那就使用Katmai CPU 中的有关指令吧。
在优化时要注意的问题有:
第一,不要本末倒置。先优化大的内容再优化小的部分。这样我们才总能找到最耗费时间的地方而优化它。
第二,要经常比较。需要对每一种可能的方法进行比较,而不能只听信书上写的。奇迹经常出现在这里。
第三,要在效率和可读性上掌握好平衡,不要光要求速度而不管结构如何,最后造成隐藏的错误。
注:请继续阅读下篇<游戏实践讨论>。
---------------------------------
游戏实践讨论
现在有很多人对国产游戏事业是又爱又恨的。爱的是希望能够出现一批真正属于我们自己的好游戏,恨的是这些游戏制作者们太不争气,到现在也没有做出来。我非常感谢他们,因为假如没有他们,也就没有了我们。我也感到非常抱歉因为我们的作品目前还不能让人们满意。我想多说什么都是无用的,只有实事才能说话。前面我所说的大多是理论上的内容,是我们在几年的游戏制作过程中总结出的经验。这些内容有些可能是错误的,因为我们还没有从正面证明它,有些对我们至今仍然只是个美好的愿望,我们自己还没有真正做到。所以请大家在阅读时针对自己的情况进行取舍。
下面我利用我们曾经做过的一个游戏,具体分析它的制作过程和制作方法。希望借此为那些关心游戏制作的人提供尽可能多的材料,让他们了解得多一些。也为那些有志于游戏制作的人提供一些经验和教训,让他们少走一些弯路。要说明的是,我们在处理某些问题的时侯,所使用的方法很可能是非常普通的,甚至是笨拙的,别人看来可能有更好的办法。但是我不想与各位争论,假如您有什么更好的想法和办法,就把它用到你的游戏中去吧,我希望每一个喜爱游戏制作的人都能够制作出更好的游戏来。
2.1 制作概况
<赤壁>作为瞬间工作室成立以来的第一个作品,是1997年7月上市的,这个版本称作标准版。其后增加了网络功能,修改了一些Bug,增加了一些游戏事件,被称作增强版,增强版于1997年底上市。在此期间,我们又制作了日文版,韩文版和繁体版,又为国内的OEM厂商制作了相应的版本。据说<赤壁>全部的销售量超过了十万份,其中零售量超过一万五千份。这是与前导公司所有员工的努力分不开的。
<赤壁>的策划工作开始于<官渡>制作的后期,1996年6月。而程序开始的时间要晚一些,在1996年9月。那时侯我们碰巧见到了另一部国产游戏<生死之间>的早期版本。这给我们的震动非常大,因为这两个游戏的类型比较接近,而我们才刚刚开始这个游戏的制作而已。从程序开始动工,到第一个版本发行,一共9个月,先后参与程序编写的程序员有5人,总的工作量大约40个人月。程序代码的总量约为90000行,2.6MB。大部分用C++编写,少部分由C和汇编编写。我们使用Microsoft Visual C++ 4.0编译<赤壁>标准版,Microsoft Visual C++ 5.0编译<赤壁>增强版。可执行文件大小约为500多KB。
<赤壁>的工作进度如下:
程序设计期:1996年9月初至1996年11月底。
底层制作期:1996年12月初至1997年2月底。
游戏编写期:1997年3月初至1997年5月底。
游戏测试期:1997年6月初至1997年6月底。
日文版: 1997年8月。
OEM版: 1997年9月。
韩文版: 1997年11月。
繁体版: 1997年12月。
增强版: 1997年12月。
需要说明一点:那就是我们的所有程序全部都是自己完成的,没有使用任何其他人其他公司提供给我们的代码。要知道,我们公司当时还没有能力去购买国外的游戏引擎,而我个人连SoftICE都不会使用,更不要说跟踪研究别人的代码了。我们对别人的学习方式非常简单和直接,就是观察。通过观察猜测它所使用的方法,然后考虑自己如何把它实现。这可能是我想到的最笨的一种方法,如果一个程序员能力强,在制作游戏以前,详细分析了解别的游戏的算法我想一定是非常有用的,他在制作游戏时一定可以节约不少走弯路的时间。
另外,我们对<赤壁>的测试时间也是很短的,在程序基本稳定之后,我们大概只剩下两个星期左右的时间。所以有很多Bug。
2.2 模块划分
赤壁的程序分成五个大的部分和19个模块:
显示模块
战场显示模块
分为通用显示底层和游戏战场显示。
通用显示底层是基于DirectDraw的一套函数。
有关内容请详见DDApi.h, DDCompo.h。
游戏战场显示是根据游戏单元的类型,位置,状态,动画帧等数据将单元位图以适当形式显示在战场的适当的位置上。要显示的内容有:地形,单元(士兵/建筑/将领),攻击效果,魔法效果,远程武器物体,阴影等。
主要功能有:对图素的压缩和读取,图像的显示,单元归属颜色的转换,边界剪裁,遮挡关系,缩略图显示和响应,屏幕移动,阴影遮挡判断,攻击效果,魔法效果,远程武器物体的显示和移动。
有关内容请详见CBDraw.h, 显示单元的位图
CBDrawM.h, 显示特殊效果,比如水。
CBDrawOT.h, 显示特殊物体。
CBMini.h, 显示缩略图。
CBMap.h, 图素的操作。
CBShadow.h, 阴影的计算和显示。
CBOther.h, 特殊效果的显示和计算。
界面显示模块
根据游戏设计需要,在显示器相应的位置上显示游戏的各层界面。
它分为两个部分:界面底层部分和游戏界面部分。
界面底层是属于底层部分的通用函数库。它包括按钮,对话框,滑块,检查框等界面元素的实现。
有关内容请详见DDBitmap.h, 显示位图的基类。
DDButton.h, 按钮。
DDCheck.h, 检查框。
DDList.h, 列表框。
DDMenu.h, 菜单。
DDScroll.h, 滚动条。
DDText.h, 文字。
游戏界面主要有:游戏主菜单,新游戏菜单,读取进度菜单,保存进度菜单,网络选择菜单,系统设置菜单,任务提示菜单,结束菜单,错误处理对话框等。
有关内容请详见Interfac.h, 提供基本的游戏界面接口函数。
Interfa1.h, 处理所有的按钮Button信息。
Interfa2.h, 处理所有鼠标操作发出的消息。
net_face.h, 网络部分界面。
Marco.h, 所有按钮的消息ID。
CBprompt.h, 游戏战场中屏幕右方信息的显示。
CBAarray.h, 对游戏元素的查询。
DDComUn.h, 针对游戏中下达命令时的命令组。
过场动画模块
显示公司标志,制作群,历时回顾,片头,片尾和过场动画。
它有两个部分,第一是播放视频图像,第二是调用其它进程。
有关内容请详见CBAvi.h, 视频图像的播放。
Mciapi.h, 播放AVI文件的底层函数。
VCMApi.h, 高效率的播放AVI的底层函数。
CBGame.h, 播放结尾。
Interface.h, 程序状态的转换。
单挑显示模块
武将单挑时出现的专门画面。本部分与原始设计有出入,原始设计中可以对单挑进行操作,后来删减称为只播放一段Video。有关内容请详见CBAvi.h。
控制模块
鼠标控制模块
根据鼠标的位置设置鼠标的形状,对鼠标的操作对响应单元发出命令。
主要内容有:鼠标点击检测,目的地模式,命令构造,可建造区域判定,鼠标形状转换。
鼠标点击检测,主要判断鼠标点击的位置是否在某个单元上或地形上。详见CBMouse.h。
目的地模式,主要控制鼠标选择了单元(命令主体)后,可能对单元下达的命令的模式,根据不同的命令可能需要不同的目的地类型和命令参数。详见CBCtrl.h。
命令构造,通过鼠标的点击选择或按下某个,命令按钮,构造出具有命令主体,命令ID和命令客体的命令,放到命令队列中,供执行。详见CBCtrl.h。
可建造区域判定,在建造建筑时需要判断哪里可以建造哪里不可以, 并且显示出来。详见CBBuild.h。
鼠标形状转换,鼠标移动到某个界面或某个单元上时,或处于命令构造阶段时,需要对鼠标的形状做一定的改变,以显示当前的操作状态。详见CBMouse.h。
命令处理模块
根据鼠标和人工智能发出的命令,传送给对象单元,并将其转化成为单元的相应状态序列。
根据单元状态,判断单元状况,更改单元的状态。
详见CBCtrl.h, 命令的构造保存和传递。
CBRun.h, 命令的执行。
CBRDelay.h, 命令执行时需要的一些变量。
攻击计算模块
根据敌我双方的攻防力量,计谋的实施和阵型计算每一次打击敌人生命的损失。
详见CBRun.h, 攻击计算。
CBZhenFa.h, 阵法计算。
行军控制模块
根据单元的位置,速度,目的地和地形数据,计算行军路线,设置单元的下一步。详见March_n.h。
网络控制模块
游戏数据在网络上的传递,纠错。模拟机的建立和管理。详见Network.h。
策略模块
君主策略模块
计算机一方根据战场双方的力量对比和战斗模式计算对单元的生产,对敌人的攻击,产生命令。
详见TEmperor.h。
将领策略模块
每一支部队根据将领的属性,士兵的状况调整战斗的方式或判断撤退。
详见TGeneral.h。
本能策略模块
士兵单元面对周围的情况产生固定的基本反应。
详见Tai.h。
Tbnbase.h, 人工智能中需要的数据结构。
CBEyes.h, 人工智能与游戏主体结构之间的接口。
文件模块
资料数据文件模块
地形和单元图素的图像文件,相应控制数据文件。单元的各项属性数据文件,操作用数据文件,界
面位置数据文件。
详见CBData.h, 游戏中使用的单元属性全局数据结构。
CBMap.h, 游戏中使用的地图图素,单元图素全局数据结构。
CBGame.h, 游戏中使用的单元全局数据结构。
存储数据文件模块
存盘用数据,记录战场上的所有单元的状态和思考数据。
详见CBGame.h, 存盘。
其它模块
文件封装模块
为减少程序使用的文件的数量,增加程序的安全性,将大量的图像文件和数据文件封装起来,供程序调用。
详见L_Allbmp.h, L_Image.h, L_Save.h, L_Scan.h, L_Text.h, Tools.h。
声音模块
背景音乐和音效。有混音和音量控制。
详见DsWave.h, 播放WAV文件。
文字模块
在非中文系统下显示汉字,日文,繁体汉字和韩文。详见puthz.h。
地图编辑器
为使美术人员方便快捷规范地制做战场地图,提供专门的地图编辑器。同时为整个游戏的文件系统,
显示系统做技术上的准备。
这是一个单独运行的程序,详见Mapedit。exe。
安装程序
将游戏安装和卸载。详见Setup。exe。
2.3 游戏引擎
说到游戏的引擎,很多人都不知道它是什么,以为制作它有多么困难。引擎的概念也很混乱,至少现在我还不知道它的确切定义。但我想如果一个东西要被称作引擎,它应该具有这样一些特点:
它应该是由函数组成的。
它应该实现某项具体功能。
它应该是完整的。
它应该可以被重新使用。
从上面的要求可以看出,其实这就是作为底层程序的要求。我想没有必要把引擎认为是游戏的现成编写工具,只要2改一下美术就是另一个游戏了。只要这些程序代码将会被我们应用在以后的游戏中,我们就已经节约了很多的时间和精力。
下面我会说一下在<赤壁>的代码里,哪些将被看作我们的引擎。实际上,这些部分经过一些修改后正在被我们应用到新的产品中。
显示底层:
这是一套包裹在DirectDraw外面的函数。为了简化在调用DirectDraw函数时的复杂度我们使用了一些缺省参数和内部错误处理函数。建立了一个CDDSurface类库,使得对位图的使用更加简单。详见DDApi.h
在DDCompo.h中我们有关于游戏鼠标的一套操作。在屏幕独占模式中,Windows标准鼠标有时显示会不正常。于是我们自己制作了鼠标的显示方法。方法很简单,在每帧读取鼠标的位置,然后在该位置上显示一张位图。
在赤壁里面,我们没有使用双缓冲区的模式,而是只更新某个特定的区域。它的优点是当需要更新哪里的时侯就更新哪里,对于哪些在每帧中都只有小面积图像需要更新时是非常高效的。比如在486上,<赤壁>的主游戏界面里的鼠标移动仍然是十分流畅的。可惜的是,在<赤壁>的战场部分,它并没有优势,因为基本上是需要全屏刷新的。
在未来的游戏制作中,因为计算机的速度越来越快,所以我们当时所使用的模式恐怕变得不太适用,双缓冲区模式应该是主流方向。
多媒体底层:
主要包括声音和视频。我们使用了MCI设备来播放AVI,WAV,MIDI,CD AUDIO等内容。那曾经是我们在做上一个游戏的时侯完成的部分。但是它有很多缺点,比如不能同时播放多个WAV文件,这对于我们制作游戏音效是很重要的内容。
所以我们又使用DirectSound来播放声音。这里的难点在于当我们需要播放很长的文件时,不能一次读入,而需要建立新的线程按时装入声音。好在现在大部分游戏都使用CD Audio作为背景音乐,不需要WAV。
界面底层:
基于显示底层之上的界面元素其实并不好做。因为我们总希望它的响应方式与Windows95中相同。而大家在<赤壁>里看到的内容就与Windows95有些不一样。比如滚动条(ScrollBar)对鼠标的响应就非常简单,按钮(Button)的反应也有所不同。但是好在它比较简单,易于使用。
在每做完一个游戏之后,我们都习惯要把某些东西整理一下,看看它是否可以在以后被使用起来。而往往这些东西也都是需要不断修改的。因为程序运行的平台不一样了,它的用途也不一样了,而我们的编程水平也不一样了。但总之这些代码被较为完整地保留了下来,它必将是我们今后编程的基石。
2.4 关键讨论
我刚开始编写游戏的时侯总有一个想法,只要游戏的主要部分写完了,游戏也就差不多了。我也遇到过一些游戏制作组的成员,他们也大都是这样的想法,认为只要把游戏的演示版拿给别人一看,然后只要再投资让美工画一些画,游戏就可以做完了。其实事情并不想想象中那样简单。
在我看来,把游戏的大概样子做完了,顶多占整个游戏的三分之一。另外的两个三分之一分别是整个游戏的制作和测试。
举个简单的例子,比如我们在演示版中通常只有一个兵种和一个战场。游戏的显示效果可能很不错。但是,真正在游戏中不会只有一个兵种的,每方都会有大概十种兵,又会有三四方的敌人,这时侯你的显示底层是否能够胜任呢?内存是否会占用太多呢?这时侯还需要我们对其进行优化和修改。连游戏的底层显示部分都可能需要修改,更何况游戏中还有更多的内容呢?
下面我举一些<赤壁>中的例子,这些都可能是极小的问题,但都是我们需要仔细考虑的问题。在你准备开始制作一个即时战略游戏之前,你是否曾经考虑过这些问题呢?假如你对这些问题有所了解,那么你就应该可以非常有把握地马上开始制作游戏。如果没有,也没有关系,因为这些问题我也没有全都事先考虑过。
假如你有时间,可以对你自己的游戏多多考虑一下,这个游戏距离一个真正的产品,到底还缺什么?还有哪些模块和部分没有做完?当你对两者之间的差距有了一个明确的认识后,也就不会担心了。任何东西都是一点一点做出来的,只要按照你想做的内容去做就可以了。
程序状态的转换
我们在写DirectX程序的时侯,总有一种偏见,那就是不希望Windows界面出现在我们的游戏里。于是什么都需要我们自己做。比如说窗口。因为窗口的刷新需要我们自己管理,就觉得没有必要生成多个窗口了。这样所有的窗口消息就必须在唯一的一个函数里实现。可是我们的游戏里有很多种不同的操作,比如界面,系统菜单,播放视频等,这些内容就都必须在这个地方处理。所以我们就引入了程序状态这个概念。我们定义了一系列的状态,在每个状态里,有固定的操作和响应,状态之间的转换也在特定的时侯进行。这样我们就很容易把一些关系不大的内容独立开来,降低程序的复杂性。
其实我们在实现这一部分的时侯是很混乱的。你很难在代码中找到所有状态转换的地方。但是它的实现很简单,一般的规则就是程序的对称性。有专门的装入函数和释放函数,然后有显示函数,计算函数,鼠标消息响应函数,热键响应函数。在内部,需要结束本状态时就发出一个状态转换的消息。在外部,只要在主程序的主循环和消息响应函数处针对不同的状态执行它们不同的函数就可以了。
这里的关键在于状态的转换。因为状态在转换中一定会释放和申请大量内存,如果有的内存没有释放,转换次数一多就会出现问题。如果我们把状态转换的地方写好了,程序看起来也非常干净整齐,Bug也会比较少。
现在编写游戏,需要装入的图量非常大,很有必要制作一个装入时的画面,并且显示百分比。这是我们可能需要一个装入中的状态。遗憾的是<赤壁>并没有实现这个,它的淡入淡出效果仅仅是效果,程序在执行这部分时停止在这里。
有关内容请详见CBGame.cpp和Interfac.cpp。
执行任务
一个士兵在接到我的命令之后,便开始了它的行动。它察看了一下它的命令,这是由两个部分组成的。它先取出第一个部分,是行走。于是根据自己现在的位置和目的地位置先计算了一下路线,把自己当前的状态设置为正在移动,然后根据计算好的方向和自己的速度把自己移动到一个位置。如果这个位置已经到达目的地了,它就停止行走。又察看了一下剩余命令的部分,是攻击。于是它拔出刀砍向附近的一个敌人。敌人死了么?它不停地问自己。如果敌人真的"哇"的一声倒下了,它就得意地站在一旁,微笑着。
这就是我们在战场的一个角落所看到的一个士兵的表现。而实事上,在程序里我们也是这样做的。
我们把每个士兵做为一个单元,独立地处理自己的事物。我们把每个命令划分得更加细致,而称其为状态,执行每个状态时所需要的参数的执行的步骤是最简化的。每个命令都是由一个或多个状态组成的。一个状态满足后就自动转向下一个状态。我们为每个状态都编写专门的开始,运行中,和结束代码。这样每个士兵都在独立地按照顺序处理自己的事务,一个个复杂的单元行动就变得有条有理了。
有关内容请详见CBRun.cpp。
阴影
有人说Warcraft做得好,有人说C&C做得好。我属于前者一派,这不仅仅因为我对Warcraft的观察多一些,而且有一个理由足以说明Warcraft在程序上比C&C更高一筹。那就是阴影。大家都知道Warcraft是双层阴影,而C&C是单层。双层阴影的好处是更加真实。在我们去过一个地方之后,虽然我已经看清楚了地形,但是这里敌人的活动,我们不应该永远知道。可是要把单层阴影变成双层,并不是只要加上一层显示就可以解决问题的。
首先,增加一层阴影就增加了需要显示的时间。时间对于即时战略来讲是至关重要的。它直接影响到游戏的表现效果和操作速度。多加一层阴影就意味着减少了我们增加效果的机会。在我们这里,双层阴影占用了大约5-10%的显示时间。
其次,增加一层阴影就增加了特殊的计算。一层阴影只需要一个二进制数组记录哪里被打开,哪里被隐藏就可以了。而现在则不同,我们需要把那些已经打开的阴影再关上。我们的做法是生成一个二维数组,每位表示一个图素格子。当有一个士兵的视野可以打开这个格子上的阴影时,就把那里的计数器加一,离开时减一。当为0时则这块地形被重新隐藏。
第三,阴影下的单元需要特殊的处理。当我的士兵离开敌人阵地的时侯,敌人附近被半透明的阴影重新覆盖了,这时我们需要把正在那里活动的敌人士兵隐藏起来,而建筑不动。
这就是双层阴影所带来的。可是为了效果,我们不得不如此。看起来还是达到了效果。
除了双层阴影以外,阴影的边界也是很重要的问题。我们不可能把阴影做得和刀切的一样,而让它必须和打开的地面相结合。于是我们必须要有一套贴图,用于阴影边界的各个方向。好在我们在这里利用了一个偷懒的办法(当然是很巧的办法,是Onefish想出来的)。我们采用了一个椭圆的贴图,让相邻的椭圆相切,从而造成边界。因为椭圆是没有方向之分的,我们也就节省了一些贴图的内存和对使用哪张贴图的复杂计算。
有关内容请详见CBShadow.cpp。
选中谁了
<赤壁>战场里的格子是菱形的。这一点有多少人发现了?又有多少人知道它的代价?或许有人认为菱形的格子并不是个很好的注意,但我们恰巧在这里使用了它。当鼠标按下时我们需要知道它放在哪个格子里了。过去的经验是只要知道该点的位置和每个格子的宽度我们就可以很快地算出格子的序号。但是在这里不行,因为格子是菱形的,在一个矩形区域里的点不能被确定它到底属于哪个格子。
怎么办呢?我制作了一个二进制二维数组,大小是格子的宽和高。在这个区域里,如果是属于矩形内接菱形区域内的点设置为1,否则为0。当鼠标在某个矩形区域里时,我就用这个栅格去判断该点的位置上的数值是1还是0。是1则这个点在这个菱形格子里,否则不在。这个办法是我遇到的比较迅速的一个办法。
命令的产生
一个由游戏者发出的命令,一般有三个部分:命令主体,命令本身和命令客体。命令主体就是执行命令的人。我想对这支部队下达命令,这支部队就是命令的主体,在游戏里就是我们用鼠标选中的一群士兵。命令本身是命令的标识。我想下达的是什么样的命令,在游戏里,可能是我按下了某个命令按钮。命令客体是命令结果的接受者,如果我选择了攻击命令之后,再选择了一群敌人,那敌人就是命令客体。
如果所有的命令都这样下达,那编起程序就简单了,玩游戏的人也会累死了。我们常用的玩法是选择了命令的主体后直接用鼠标右键点击命令客体。而命令的产生就由命令主体和命令客体的类别来确定了。
这才是需要我们考虑的东西。
首先是选择命令主体。当我们在战场上鼠标一点,或圈了一个框,然后一松手,这时侯程序就开始算了。这里我要介绍一下<赤壁>的单元类型。我们把单元分成士兵,将领和建筑。士兵又有已经组建成部队的和尚未组建成部队的。士兵的种类可以分成一般士兵,工人和船。我们的选择规则是:组队的士兵优先于建筑。将领优先于组队的士兵。未组队的一般士兵优先于将领,未组队的船优先于一般士兵,未组队的工人优先于船。另外还有特殊处理。按下Ctrl键则选中该组队士兵的将领,按下Shift键则把刚选中的士兵添加到已选中的士兵中。
其次,是选择命令的客体。命令客体可分为地点和单元。地点有普通地点和资源地点。单元又分为敌人的和我方的。单元的种类有士兵,将领和建筑。士兵分为未组队的和组队的。士兵的种类有工人和一般士兵。建筑又分为一般建筑和资源建筑。我们需要根据命令主体和客体共同来判断命令是什么。不同的组合所产生的命令可能可能是不同的。比如,如果我选择了组队的工人作为命令主体,又选择了一个建筑作为命令客体。如果这个建筑是铁矿,那么命令就是采矿。如果这个建筑是我方的建筑,则这个命令是修理。如果这个建筑是敌人的建筑,那这个命令就是攻击了。
有关内容请详见CBCtrl.cpp。
眼睛函数
在游戏策划编写人工智能的时侯,总喜欢写成这样:"当匪兵甲发现敌人就在不远处时就去攻击。"而要把这句话变成程序,还需要不少的路要走。比如匪兵甲是如何发现敌人就在附近呢?首先必须要知道匪兵甲自己在什么地方,其次匪兵甲的视野有多大,也就是说多远算作附近,第三敌人在哪里。这三样东西匪兵甲是如何知道的呢?依靠的就是眼睛函数。
一般我们在编写人工智能时都会把它作为一个比较独立的模块。因为它的主要功能就是判断。它的出口同游戏者的鼠标操作一样,发布命令。如果它的入口也很明确和简单则这部分内容的难度就非常小了。可是人工智能需要得到大量的信息作为判断的依据,而我们的主体数据结构又可能写得不很好,这时候就需要我们另外制作一套程序把游戏内核与人工智能分开。这就是眼睛函数的用处。
编写人工智能的程序员只需要写出他想知道什么,然后交给游戏核心程序员,由游戏核心程序员从游戏核心数据中找到相应的信息,传递给人工智能。这样编写人工智能的程序员就可以根本不知道游戏核心数据是什么样子就可以开始工作了。但是这也是临时的办法,
如果我们可以把核心数据结构写得风雨不透那也不必如此劳神了。
有关内容请详见CBEyes.cpp。
命令队列与网络
本以为网络编程很简单,一写下来才知道头大。虽然这部分代码不是我写的,但是我也知道跟踪一个10兆大的Log文件是什么滋味。网络上的游戏通讯一般有两个办法:交换所有信息和交换重要信息。第一种方法是随时把自己的所有数据都传递到另一端,另一端根据这些数据进行显示和操作。它的优点是不需要同步,对网络状况要求低,计算也非常简单。缺点则是数据量太大,只传递少量数据还可以接受。所以这种方法多用于RPG游戏并多在Internet上使用。第二种方法则只传递关键的数据,计算机接到这些数据后对其进行计算,因为计算的结果是唯一的,所以可以保证网络两端一致。这种方法适用于那些数据量大的游戏,但它的编写和调试就比较复杂,而且对同步的要求较高。我们的<赤壁>就是采用的这种方法(<西游记>用的是第一种方法)。
在这种网络的联接方式中,最重要的问题一个是同步,一个是结果唯一。只有同步我们才能保证在每一轮的计算中所有计算机上的初始状况是统一的,只有结果唯一我们才能保证在执行了一段时间后所有计算机上的状态是统一的。这样才能保证网络游戏的正确性。
除了初始化等必要得操作以外,我们把游戏中的命令作为关键信息在网络上传递。游戏者对战场上部队的任何操作,下达的任何命令都会被传递给其它的计算机。如果游戏者没有操作,则我们制3在每一轮循环中传递同步信号。在这里我们遇到了一个DirectPlay中的问题,那就是信号并不是每次都会正确传递到对方那里的,尽管我们在DirectPlay中使用的参数要求系统必须在确认对方收到后才返回,可是它返回后对方依然没有收到。关于这个问题我没有查看有关文档,也许有更好的解决办法。所以我们自己制作了一套校验确认的方法。
但是我们在本机上发布的命令传递到另一台计算机上时一定会有延迟,这就不能保证初始状态的一致。所以我们采用了轮回制。任何人发布的命令并不会马上被执行,而是先存储到一个命令队列中。在每次循环中对曾经下达的所有命令统一进行发送,侦听。当所有计算机都收到了所有计算机本轮要执行的命令后,所有的命令开始被顺序执行。这样在任何一台计算机上本轮中所有命令的内容和顺序都是相同的,执行时才能保证其结果的一致。
有关内容请详见CBCtrl.cpp, CBRun.cpp。
兵种的颜色
这大概是即时战略游戏里最隐蔽的一个问题了。因为不做的人不知道,而做的人都心照不宣。在我们的游戏里,不同的君主用不同的颜色代表,属于该君主的士兵则在它的衣服上赋予相应的颜色。这样虽然兵种相同但是他们的颜色不同,这样就可以区分敌我了。但是如果我为每一个兵种都制作一套图素,那么就显得有些浪费了,这会占用过多的内存(我们这里所有兵种的图素量约有10MB,如果有四种颜色就需要40MB的图素)。谁都希望找到一个好的办法节省这些内容。
我们的方法很简单,抽色。我们在调色板里的留出固定的位置,需要改变的颜色就按照顺序存储在这里。在显示时,我们会根据传递进来的君主号为每张图素的颜色进行判断,如果颜色在这些区域里就根据规则偏移。这样各种颜色的士兵就会显示出来,而只需要一份图素。
这种方法的缺点就是速度慢,毕竟需要对每个点进行判断和处理。所以这部分也是我们针对MMX优化的主要部分之一。
怎么样?奇怪么?有关内容请详见CBDraw.cpp。
遮挡
我在设计游戏开始时就考虑过单元的遮挡问题,因为这曾经是<官渡>遇到的问题之一。游戏单元在屏幕上的位置会经常有所变动,但我们必须保证一点,即下面的物体总要把上面的物体遮住。但是我发现这个问题实际上在<赤壁>里几乎不存在。因为在每一帧都是重新显示一屏内的所有信息,只要我每次从上向下画图就可以了。当然这是个极为极端的例子。我们仍然需要考虑遮挡的问题。比如,人被山挡住的问题。我们通常为了在显示函数里显得结构化一些,都是先显示地形,再显示人物。那么当人物走到了山的上部时,就需要山峰挡住人,可是这时侯山都已经显示完了,我们必须再次显示山。而显示山的时侯又不能够显示整个的山,我们必须划分出显示的区域,让它可以显示又不会遮挡别的地形。
调整这部分内容可能占据了我制作显示部分的绝大部分的时间。好在最后实现了,但我仍然在想是否有更好的办法解决这个问题。
有关内容请详见CBDraw.cpp。
行军算法
我们在制作<官渡>时没有给士兵以一套完整的行军算法,让它去寻找一条到达目的地最近的路线,而在<赤壁>里想做一下尝试。就自制了这样一套算法。首先找到一条直线,然后围绕挡住这条直线的障碍物搜索一条可以行走的路线。说起来简单,做起来可很困难。这部分代码写了大约有四五个月。
当然它也仍然有缺点,比如如果在路上的障碍物内部有空洞,那么就会卡住。但好在它的速度还算可以,一百个人同时走路时才会感觉到一点停顿。
本来我们打算在<荆州>里有所改变的,我们采用了世界上比较流行的行军算法:A*算法。并且为它专门制作了一套底层,使它可以挂在任何一个地图结构里。
有关内容请详见March_n.cpp。
为什么有数量限制
又回到了老生常谈的话题。编程序的人一看就可以知道,对士兵数量进行限止的唯一理由就是没有使用链表。的确是我胆小的缘故。我没有在游戏的核心数据结构中使用链表,原因很简单,怕出错。我为每个游戏者开了200个单元的空间,也就是说每方游戏者都可以制造200个士兵和建筑。我想这个数量应该是够了,因为如果真的每个游戏者都生产出这么多数量的单元,游戏也跑不动了。
使用数组不仅出错的机会少一些,而且它对于查错也很有帮助。在我们的早期测试版中,我让游戏每隔10轮就自动存一次盘。存盘的内容就是简单的把这些数组内的内容写到文件中。如果程序跳出,马上调出存盘很快就会跟踪出错误的位置。后来,在<赤壁>标准版发行后,也有玩家反映有异常退出的错误,我就让他们把存盘文件寄给我,我就能很快发现问题。如果使用指针链表恐怕就没那么容易了,但也有一个好处。如果玩家玩出一个错误,只要他再重新玩很可能这个错误就不出现了。
有关内容请详见CBCtrl.cpp。
镂空贴图
我估计有不少初学编游戏的人都会有这个疑问,如何让一个人出现在地形上而身上没有黑边。要知道计算机的显示一般都是以矩形为单位的,一个边界不规则的图形该如何显示呢?
假如我们按点去操作,那么就可以判断如果人的图像上是黑色则跳过去,否则显示到背景上。但是谁都知道这样是很慢的。于是我们想到了使用逻辑操作来贴图。我们有一个真人的图像,边界是黑色的,我们叫源码。然后我们制作一个掩码,人的内部是黑色的实心,外部是白色。然后我们做两次逻辑操作,先把人的掩码与背景做"与"操作,这样背景就被扣出了一个黑色的轮廓,然后把人的源码与背景作"或"操作,人就呆在背景里了。
如果你看到我们的地图编辑器,就会发现我们就是这样做的。这是<官渡>的做法,在编写编辑器时我还不会使用DirectDraw呢。但是在DirectDraw环境下,我想大家就可以省事很多了,只要一个ColorKey的变量设置,DirectDraw就可以替你完成镂空贴图的操作。
从这里你也可以看到我们也许不会一开始就把游戏做好,但只要坚持下去,我们一定会越做越好。
有关内容请详见DDApi.cpp。
2.5 希望
有人说即时战略游戏已经过时了,或者已经做到头了。我的观点截然相反。
我认为它是目前唯一能够胜任大规模集团作战的游戏类型,它所能够带给人的东西我们还远远没有做到。我是很喜欢看电影的,尤其是战争电影,那些电影里的场面和效果在游戏里出现了么?有,但是还远远不够。
我承认我们的制作能力与国外的水平还有很大的差距,但是即时战略依然会有它的发展。
比如,即时战略已经开始慢慢向战棋式的战略游戏靠拢,采用多层战略地图,多级控制的方式。这就是一个可能的发展方向。即时战略也可以不采用采矿的方式,而利用其它(比如经营)方式来获得资源,这也是一个可能的发展方向。
我总是觉得,制作游戏就是在创造世界,虽然我们的这个世界还无法与真实的世界相比。但是,只要我们做了,就会有进步,就会离梦想近一点,也许我等不到那一天,可是也许某个看到我的文章的人等得到那一天,这我已经很高兴了。制作游戏的路刚刚开始,对于我们而言,我们希望能够继续做下去,可是上帝毕竟是广大的玩家,如果大家不认可,那我们还是趁早改行为好。但我总是有些不死心,总希望能够有人坚持下来,如果这个人不是我。我真心地希望能有更多的人了解游戏的制作,了解制作游戏的人,也希望有更多的人加入到这个充满了艰辛的事业来。因为美好的明天需要我们去创造,我们为游戏付出了很多,它也会同样地回报我们的。
以上内容仅是我个人的观点,如果有任何异议请与我联系,但是我不会与各位争论什么,因为只有做才是最重要的。如果有什么问题,也可以来信,但是我可能不会很快或很详细地回答,因为我现在正忙于制作新的游戏。
假如你已经整装待发,那么就开始吧,不要犹豫,人的一生只有一次,只要去生活就是了。
---------------------------------
游戏策划之路
前言
曾几何时,世界上出现了电子游戏。在雅达利游戏机时代,我就面对着黑白画面开始了我最初的游戏接触。进入了任天堂时代后,出现了一大批优秀的游戏节目。当这种娱乐形式蓬勃发展时,就出现了以制作游戏为职业的一群人。当游戏跨入了中国的门槛,在神州大地上也顺理成章的出现了中国本土的游戏制作群。痴迷于游戏的我有幸成为了他们中的一员。
作为一名中国游戏人(游戏制作人员的简称),我有着十分矛盾的心理--自豪的同时又深深感到自卑。自豪是因为我们是新中国自己的第一批游戏制作人员,在担负着开创新时代的艰巨使命;而自卑是因为与国外的同行比较起来,我们所制作出来的产品水平实在是太低了,低到了我们自己都不忍卒睹的地步……面对着国内市场上充斥的正版或盗版的国外游戏,心中总有些不是滋味。人家的东西做的就是好,不能怪玩家们"崇洋",要怪就只能怪自己不争气。
最不好受的时候是看到一些蓄意歪曲历史、混淆视听的国外游戏,比如日本的《提督的决断》--公然美化世界大战的战犯们;比如日本的《大战略》--玩家要进行的是指挥德国纳粹的军队去侵占其他国家的领土;比如微软的《帝国时代》--将日本列入文明古国之一,而没有中国。最令人气愤的是其中一关的任务是讲中国军队侵略了朝鲜,日本人宅心仁厚,出兵帮助朝鲜抵抗中国的侵略???任务结束后,游戏制作者还感叹说:如果日本能够坚持下来,其进入中国大陆的时间可以提前好几个世纪!!这是什么话!!默然关上了计算机,胸中感到了锥心刺血的痛--因为中国游戏业的落后,我们就要忍受这样的侮辱?
游戏作为文化产品,其中必然带有文化倾向性,其中的文化色彩也更具隐蔽性,让你在娱乐的同时潜移默化的接受游戏制作者的观念。因而也就有可能成为某些别有用心的人所利用的文化侵略工具。看着外国漫画和卡通、玩着外国游戏长大的中国下一代,会不会受到其中不公正观点的影响?闭关锁国不可取,最好的办法是提高国内游戏产品的质量,进入世界市场,替我们发言。
如何提高中国大陆的游戏制作水平?如何使国产游戏进入世界市场?如何能使中国的玩家们玩上我们自己出品的好游戏?要达成以上目标,最迫切的是提高国内游戏制作人员的水平,能够开设电子游戏制作课程,有利于游戏制作人员的成长。如果我从事游戏制作业两年多的经验对大家有帮助的话,我非常愿意与大家交流,与大家一起并肩为国产游戏的发展努力。
---------------------------------
游戏是什么
要想成为一名游戏制作者,首先要弄清楚游戏的本质。
1.1 游戏的来源和发展
游戏在英文中的单词是Game,译意是"比赛、竞赛、游戏",可以从词源上看出游戏和比赛一脉相承。具我估计,游戏最初可能是由进行非对抗性的、友好的体力与技巧的比赛发展而来。当时的参与者在体力得到锻炼的同时,也得到了乐趣,如今天有些民族进行的"叼羊"活动,称比赛也可,称游戏也可。
随着时代的进步,游戏从单纯的体力活动逐渐向体力与脑力结合的方向发展,甚至出现了一些纯粹的脑力活动。比如棋类和牌类的发明,大师们在进行电视直播时下的棋被称为比赛,咱们老百姓吃完饭在路灯下来的那两盘被称为游戏。人与人之间所进行的娱乐活动,游戏和比赛基本是一体的,只是根据场合与情况的不同而加以区分。
进入科技时代以后,越来越多的高科技手段运用到了娱乐行业之中,最终能够以电脑的运做代替原来必须由人来承担的对手角色,这使得游戏原本含义中的对抗性大大降低--谁和没知觉的电脑一般见识,非要争个短长?除了象非要和电脑较真儿,比个高下的--诸如在"深蓝"上玩一会儿国际象棋游戏,最后铩羽而归的卡斯帕罗夫大师,为了对他的认真精神表示敬佩,我们依然把他所进行的活动称为比赛。抛开上述特殊情况不谈,游戏在科技时代,更多的是一种纯粹为了娱乐而进行的无明确目的性的活动,其最大的作用就是通过游戏过程,让参与者得到放松和乐趣。可以说,让参与者得到放松和乐趣才是游戏的本质所在。
进入科技时代,随着人类科技水平的发展,游戏的形式也在逐渐的变化。在电视机普及到家庭以后,游戏通过电视游戏机进入了家庭,最初只是非常简单的形式,只是灰度画面和简单的声音;而后,可以达到256色画面和MIDI配乐,到今天,发展到真彩画面和CD音轨、人语配音的次世代游戏。
在电视游戏向前发展的同时,随着家庭用电脑的发展,游戏又进入了电脑,与电视游戏的发展过程相同,电脑游戏也经历了从简单到复杂的过程,最终使电脑游戏成为能和电视游戏相抗衡的游戏娱乐方式。可以发现,人类实际上很注重享受,总是利用最新的科技来实现自己的娱乐,因此,娱乐业是非常有前途的行业。但是娱乐业也是风险非常大的行业,只能在和平的经济繁荣时期进行发展,如果没有社会环境的保障,娱乐业就没有土壤--谁会在饭没得吃的情况下玩电脑游戏?
今后,游戏也不会裹足不前,它必然会继续进步。我个人觉得,在技术上,游戏会向体感化、人工智能化发展。体感化即出现虚拟实境游戏,使游戏者感觉完全处在一个真实的空间中,能够感受到现实生活中所能体会到的一切--包括视觉、听觉、嗅觉、触觉等。人工智能化即随着计算机技术的发展,使计算机模拟智能成为可能。届时,你在计算机中所遇到的一切NPC,都具有与人相媲美的智力水平--甚至有感情。如果将上述两项发展结合在一起,再加上国际互联网,就使全球性虚拟化社会的实现成为可能,使得MUD游戏能够有质的突破,从而使游戏更象是自己的另一种人生,关于这方面的科学幻想小说有很多,如果大家有兴趣,可以找来看一看。
1.2 什么是电脑游戏
如果要给电脑游戏下一个准确的定义,那么我觉得:"以计算机为操作平台,通过人机互动形式实现的能够体现当前计算机技术较高水平的一种新形式的娱乐方式。"这一定义会比较合适。
首先,电脑游戏是必须依托于计算机操作平台的,不能在计算机上运行的游戏,肯定不会属于电脑游戏的范畴。至于现在大量出现的游戏机模拟器,原则上来讲,还是属于非电脑游戏的。
其次,游戏必须具有高度的互动性。所谓互动性是指游戏者所进行的操作,在一定程度及一定范围上对计算机上运行的游戏有影响,游戏的进展过程根据游戏者的操作而发生改变,而且计算机能够根据游戏者的行为做出合理性的反应,从而促使游戏者对计算机也做出回应,进行人机交流。游戏在游戏者与计算机的交替推动下向前进行。游戏者是以游戏参与者的身份进入游戏的,游戏能够允许游戏者进行改动的范围越大,或者说给游戏者的发挥空间越大,游戏者就能得到越多的乐趣。同时,计算机的反应真实与合理也是吸引游戏者进行游戏的因素--没有人愿意和傻子讨论政治问题,大多数人只会愿意同水平相当的人下棋。
最后,电脑游戏比较能够体现目前计算机技术的较高水平。一般当计算机更新换代的同时,计算机游戏也会相应的发生较大的变更。当计算机从486时代进入586时代时,原本流行的256色的游戏被真彩游戏所取代;当光驱成为计算机的标准配件后,原本用磁盘作为存贮介质的游戏也纷纷推出了光盘版--现在还有哪个游戏发行磁盘版;当3D加速卡逐渐流行起来时,就同时出现了很多必须要用3D加速卡才能运行的三维游戏;当计算机的DOS平台逐渐被WINDOWS95系列平台所更新时,DOS的游戏就逐渐走向没落……就我个人的从业经验来看,计算机厂商--尤其是硬件厂商十分注意硬件与游戏软件的配合。很多硬件厂商都主动找到游戏软件开发公司,要求为他们的下一代芯片制作相应的能体现芯片卓越性能的游戏。所以有很多游戏在开发时所制定的必须配置都是超前的,以便配合新一代芯片的发售。一般硬件厂商在出售硬件(比如3D卡和声卡)时所搭配的软件总会是游戏占大多数。所以在家用计算机技术方面,游戏是比较能够体现当前技术的较高水平的,也是最能发挥计算机硬件性能的--没有人见过3维界面的WORD或者是WPS吧?应用软件总要照顾到大多数计算机用户的利益,而电脑游戏则不然。
---------------------------------
游戏是如何被制作出来的
1 制作游戏的几个部门
一般来讲,游戏的制作有三个大的单位部门,分别是策划部门、程序部门和美术部门。这三个部门在游戏开发的过程中分别承担不同的工作。策划部门主要担任游戏的整体规划工作,一如建筑工程中施工前要有建筑蓝图一样,策划的工作就是用程序和美工能够理解的方式对游戏的整体模式进行叙述。游戏中的所有部分都属于策划的工作范围之内。关于程序部门和美术部门的工作在我同事的文章中有论述,在本文中不再加以赘述。但如果你想成为一名成功的策划人员,最好还是对你同伴们的工作有所了解,这是做游戏策划的基本素质之一。
2 游戏的制作过程
游戏的制作过程可以用流水线来形容。大致分为以下几个步骤:
2.1 立项
在制作游戏之前,策划们首先要确定一点:你到底想要制作一个什么样的游戏?而要制作一个游戏并不是闭门造车,一个策划说了就算数的简单事情。制作一款游戏受到多方面的限制:
市场:你想做的游戏是不是具备市场潜力?在市场上推出以后会不会被大家
所接受?是否能够取得良好的市场回报(即销售数量)?
技术:你想做的游戏从程序上和美术上是不是完全能够实现?如果不能实现,
是不是能够有折中的办法?
资金:你是不是有足够的资金能够支持你进行游戏的完整开发过程?要知道,
做游戏光有热情是不够的,还要有必要的开发设备和开发环境。而且后
期的广告投入也是一笔不小的数目。
周期:你所想的游戏的开发周期是否长短合适?能否在开发结束时正好赶上游
戏的销售旺季?一般来讲,学生的寒暑假期间都属于游戏的销售旺季。
产品:你所想的游戏在其同类产品中是否有新颖的设计?是否能有吸引玩家的
地方?如果在游戏设计上达不到革新,是否能够在美术及程序方面加以
补足?如果同类型的游戏市场上已经有了很多,那么最好是你的游戏有
不同于其他游戏的卖点,这样成功才更有把握。
以上各个问题都是要经过开发组全体成员反复进行讨论才能够确定下来的。如果你在一个游戏公司中任职,那么这种讨论往往是以会议的形式来进行的。参与会议者有公司的老总(资金提供者)、市场部成员(进行市场前景分析)、广告部成员(对游戏的宣传进行规划)、游戏开发人员(策划、程序、美工),大家一起集思广益,共同探讨一个可行的方案。如果对上述全部问题都能够有肯定的答案的话,那么可以说,这个项目基本是可行的。但是即便项目获得了通过,在进行过程中也可能会有种种不可预知的因素导致意外情况的发生,所以项目能够成立,只是游戏制作的刚开始。
在项目确立了以后,下一步要进行的就是进行游戏的大纲策划工作。
2.2 大纲策划的进行
游戏大纲关系到游戏的整体面貌,当大纲策划案定稿以后,没有特别特殊的情况,是不允许进行更改的。程序和美术工作人员将按照你所构思的游戏形式来架构整个游戏,因此,在制定策划案时一定要做到慎重和尽量考虑成熟。
关于如何进行这方面的工作,在下文中有详细的叙述。
2.3 游戏的正式制作
当游戏大纲策划案完成并讨论通过后,游戏就由三方面同时开始进行制作了。在这一阶段,策划的主要任务是在大纲的基础上对游戏的所有细节进行完善,将游戏大纲逐步填充为完整的游戏策划案。根据不同的游戏种类,所要进行细化的部分也不尽相同。
在正式制作的过程中,策划一定要同程序人员及美术人员进行及时的交流,了解程序和美工的工作进展以及是否有难以克服的困难,并且根据现实情况有目的的变更自己的工作计划或设计思想。三方面的配合在游戏正式制作过程中是最重要的。
2.4 配音、配乐
在程序和美术工作进行的差不多要结束的时候,就要进行配音和配乐的工作了。音乐和音效是游戏的重要组成部分,能够起到很好的烘托游戏气氛的作用,不可轻视。
2.5 检测、调试
游戏刚制作完成,肯定在程序上会有很多的错误,就是通常所说的"BUG",严重情况下会导致游戏完全没有办法进行下去。同样,策划的设计也会有不完善的地方,主要在游戏的参数部分。参数部分的不合理,会导致影响游戏的可玩性。所以此时策划的主要工作就是检测程序上的漏洞和通过试玩,调整游戏的各个部分参数使之基本平衡。
2.6 广告、市场
实际上,在游戏进入正式制作阶段的时候,广告部门和市场部门就已经开始运做了。广告部门的任务使有计划、有目的、按阶段的在各个媒体上透露有关开发的消息,使玩家的注意力逐渐集中到在开发的游戏上,并产生期待心理。最后在游戏进入调试阶段的时候,就可以在媒体上刊登比较明显的广告了。而市场部门的任务是联系零售和捆绑销售业务,为游戏的销售打好基础。
2.7 生产、发售
以上步骤都完成后,就可以与光盘生产厂家联系,进行光盘的压制工作。然后按照已经疏通好的销售渠道,将游戏推向市场。
2.8 售后服务
将游戏只是卖出去还不算完,正版游戏和盗版游戏最大的不同就是有完善的售后服务。售后服务主要是解答玩家的疑问,解决玩家所遇到的困难。而且还有一个重要任务就是听取玩家反馈回来的意见,为自己的下一个游戏做参考。
通过以上的步骤,才能完整的制作出一款可以上市的好游戏。
---------------------------------
游戏的策划工作如何进行
现在大家基本上已经知道游戏制作的大体过程了,那么在这个过程中,游戏策划起到了那些作用呢?要进行什么样的工作?工作时又要注意那些事情呢?
1 游戏的题材、类型和风格
在一个游戏开始制作之前,这三项是首先要确定下来的。
1.1 游戏的题材
游戏的题材是指游戏的将要讲述一个什么时代、什么世界观下发生的故事。
目前主要的及常见的游戏题材有以下几种:
从时间上分:
·古典题材:发生年代在距离现代比较长的时间,例如《三国志》系列;
·近代题材:发生年代距离现在不是很远,例如《地雷战》、《装甲将军》;
·现代题材:发生在和我们同一个时代的故事,例如《心跳回忆》;
·近未来题材:发生年代距离现在不是很远的将来,例如《C&C》;
·未来题材:发生在遥远的将来,例如《星球大战》。
从内容上分:
·战争题材:例如《装甲将军》;
·爱情题材:例如《心跳回忆》;
·幻想题材:超越常识范围的世界。例如《FF7》、《黏土世界》;
·科学幻想题材:例如《星际争霸》;
·现实题材:例如《模拟城市》、《模拟医院》;
·恐怖题材:例如《学校之怪谈》。
游戏题材的确立关系到游戏有一个什么样时代观、世界观和善恶标准,也直接关系到游戏的表现形式和中心设计思想。比如在一款以古典战争题材为背景的游戏中,时代一般是在十九世纪以前,武器以冷兵器为主,对于游戏策划来讲,他所设计的兵器中就不能出现超越当时时代的东西。那么在美术的设计上同样也要体现出这一点来。如果是在幻想题材为背景的游戏中,题材对策划的限制就要少得多了,甚至任何东西和任何事情都可能出现--大家看过鸟山明的漫画没有?企鹅村就是一个那样的世界。
1.2 游戏的类型
游戏的类型是指游戏以什么样的形式来进行。目前的游戏形式常见的有以下几种:
·策略类游戏:例如《三国志》系列
·模拟类游戏:例如《模拟城市》
·战棋类游戏:例如《炎龙骑士团》
·育成类游戏:例如《美少女梦工厂》
·体育类游戏:例如《FIFA98》系列
·即时战略类游戏:例如《C&C》、《魔兽争霸》
·桌上类游戏:例如《大富翁》系列、《围棋》
·角色扮演类游戏:例如《仙剑奇侠传》
·模拟驾驶类游戏:例如《F-117》、《长弓阿帕奇》
·射击类游戏:例如《雷电》系列
·冒险类游戏:例如《MYST》
·动作类游戏:例如《水管马立奥》
·益智类游戏:例如《俄罗斯方块》
·DOOMTOO类游戏:例如《DOOM》系列
·MUD类游戏:架构在国际互联网上的多用户在线游戏。例如《侠客行》
·混合类游戏:混合了以上游戏类型两种或两种以上的新形式游戏。常见的是很多S-RPG和R-SLG。例如《三国英杰传》
·其他类游戏:还有一些游戏是比较难以总结出类型的,只好划归在其他类型中。例如《游戏工厂》、《RPG工厂》,它们是用来制作游戏的游戏,又不能说是一个完整的游戏引擎。而且由于数量较少,没有形成足够的规模可以成为一类游戏。
游戏类型规定了游戏的进行方式。不同的游戏类型有各自的特点、优点和缺点,对于策划的要求也不相同。比如同是以三国为题材制作游戏,采用不同的游戏类型,使游戏有着不同的感觉。下面将举例简单分析一下:
策略类三国游戏
日本光荣公司所推出的《三国志》系列,采用了策略类游戏的表现形式。
在游戏中,游戏者可以选择扮演任意一名君主完成统一中原的大业,可以选择曹操、刘备、孙权这样的著名君主;也可以选择象刘表、张鲁等"二流"君主作为主人公;甚至可以杜撰一名新君主,起上自己的名字,来亲身体验一下君临天下的感觉。
进入游戏后,会有一块属于自己的地盘。如果选择了曹操、孙权等人,可能出现在繁华的中原或富庶的江南;如果是新君主,那么只能在地图的一隅占据一座小城。不管从那里出现,首要任务是发展经济。将自己的国家治理得井井有条,人民安居乐业,官吏各司其职,军队兵强马壮。当然,在治理自己国家的时候,其他君主也不会闲着。他们也会治理国家,同时会在你兵力薄弱的时候派遣部队来攻占你的城池。这就需要你有比较高的治国技巧,或者你和周边国家结成同盟,这可是需要付出钱、粮、马匹等代价的;或者你集中发展军备,让其他人不敢轻捋虎须,不过万一军力与国力失衡,你的建设事业就会由于资金不足而停滞不前,两种办法均有风险。
当你完成了征兵、部队训练、军队调动等备战工作,就可以选择适当的周边国家进攻了。不过你也可以想办法降低进攻的难度,比如拉拢对方的武将、挑拨别的国家先进攻以削弱防御实力、在对手城池里放火或者纠集自己的盟国一起出兵,这样当你出兵时就轻松多了。在你顺利的拿下敌人的城池时,等待你的又将是内政的整饬和军备的扩张……这样周而复始,直到你统一中原。
以标准战略形式来表现三国,最大的好处在于能充分体现战争、政治与经济的关系。较为清晰的表现出政治、经济与战争之间相辅相成而又互相克制的关系。在游戏中还出现了诸多大家所熟悉的三国人物,将历史人物与历史事件及历史进程联系到了一起,让游戏者操纵三国时代的英雄创造一系列的辉煌。以武将为基本描述点;历史事件与进程为叙述线;整个三国时期的局势做为面,做到重点突出、线索连贯、全面铺开,将点、线、面三者结合起来叙述,从军政结合的角度完美的表现三国时期的历史。此类游戏给游戏者的发挥余地较大,你可以任意拟定自己国家的战略。不过在给予了游戏者最大自由的同时,三国时期的历史也一次又一次的被改写。在你收降了敌人的将领之后,曹丕打曹操、关羽战刘备这样"父子交兵、兄弟相残"的"人间惨剧"都有可能上演,这在历史上肯定是不可能发生的。
以游戏来表现三国会将历史面貌做一定的改变,也是游戏本身的性质所决定的。同时,游戏的互动性又是其他艺术形式所不能具备的优点。游戏者玩游戏时,将自己代入到三国时期的参与感;在指挥军队作战时的运筹帷幄;在制订政治方针时的谨思慎行;在完成统一中原大业时的高度成就感……这一切都是在阅读小说、观赏戏剧、观看电视连续剧时所不能体会到的。
战棋类三国游戏
战棋类的三国游戏,现在比较典型的要算是日本光荣公司的《三国英杰传》,
战棋类游戏通常以分关制来划分游戏的章节。比如在《三国英杰传1》中,将刘备一生所经历的大大小小几十场战斗改编为了几十关任务,从镇压农民起义征讨黄巾军开始,战吕布、抗曹操、烧赤壁、取西蜀、夺汉中、败彝陵……此后还有虚构的任务诸如攻许昌等等,最后是刘备复兴汉王朝的欢乐大结局,颇有民国年间出版的《反三国志演义》的神韵。
采用分关制战棋来制作三国游戏,容易做到脉络清晰,将三国时期的发展完全展现在玩家面前。在战棋游戏中,没有了政治和经济对战争的影响,游戏者所需要做的只是如何巧妙的运用游戏开始所配属给自己的有限兵力,来配合计策、道具来更多的消灭敌人、更好的保存自己。战术上的考虑占据了游戏者的全部精力。在战棋游戏中,游戏者扮演的是一名军事家,而不象在战略游戏中同时扮演政治家与军事家的角色。
在战棋类游戏中,由于偏重点在战斗方面,所以战场的画面制作得非常精巧细致,武将之间的作战动作、计策的使用效果也非常华丽,以出色的画面来刻画战场和人物。画面的精巧虽然能够突出武将的作用,但对于体现大兵团作战就有了局限。一般的战棋游戏都是以武将为作战单位,很少带领士兵,即使有士兵的存在,也无法表现古代战争的壮阔场面。简而言之,战棋类游戏的战斗画面很容易做到华丽,但很难做到壮观。这一缺点同策略类的游戏类似,但从表现上来讲,比策略类游戏还是强一些。
分关制的设计对于游戏设计者来讲,可以较容易的设定游戏的难度,也可以较容易的设定游戏的人工智能。但对于游戏者来讲,由于地图唯一、兵力配置唯一、初始状态唯一,就不可避免的造成游戏过程的单调。所以如果战棋游戏没有多分支、多结局,就很难让游戏者再玩第二遍。可是如果有了分支和多结局,对于历史就有进行了改变。其实又有谁甘心充当刘备这样的悲剧英雄的角色呢?驰骋疆场、纵横中原,最后败于一儒生手中,彝陵一把大火,烧得七十五万大军灰飞烟灭,只剩数百人逃回白帝城,临终托孤让人慨叹。如果你有机会让刘备重振雄风,视东吴如草芥、战曹操如捻蚁,你不想尝试吗?
角色扮演类三国游戏
角色扮演类三国游戏在三国游戏中并不是主流,目前主要有《吞食天地》系列。
RPG游戏有"电子小说"的美称。在RPG游戏中,一般是以某一名人物作为主人公,以这名人物的生平为主线,所有故事都围绕这名主角展开,对于主人公的事迹描述可以说是到了极其详尽的地步。主人公要孤身只影独走中原,解决一系列的事件,有时会有同伴的加入,大家齐心合力,共同奋斗。RPG游戏有相当明确的游戏主线索和非常充实的故事内容。如果设计得当,可以做到小中见大,做到通过游戏中主角的遭遇来勾勒出当时的历史轮廓和时代特征。
由于《三国演义》主要是以政治局势的描述为主,个人的刻画为辅,主要体现在特定的历史时期内,特定的历史事件对历史人物所造成的影响,从而表现人物的个性;而角色扮演类三国游戏恰恰反其道而行,以个人的刻画为主,通过描写主角个人的遭遇,来体现当时的历史背景。这样对于游戏的设计来讲,难度是相当大的。在史料不足以充实满一个游戏时,就需要游戏设计人员的发挥和杜撰,其难度和工作量不亚于罗贯中用《三国志》改编《三国演义》。只有非常深的设计功力才能做到以小见大,在描写人物的同时让游戏者感触到历史时代对人物的施加的影响。如果设计得当还好,虚构不影响整个的游戏内容和主角的生平,但如果设计不当,很容易造成脱离原著、与当时的历史相悖。比如在《赤壁之战》中,开始场景是刘备的家,刘备的母亲对刘备说:"儿啊,你也不小了,该出去成就一番事业了。"于是刘备就离开家,踏上了统一中原的征途,然后一出门就碰上了关羽和张飞,三人就此结义……这叫"歪批三国"?似乎不够确切;叫"天马行空"?又太美化了;叫……恕我才疏学浅,实在想不出合适的词语来评价这种设计方式。
即时战略类三国游戏
目前此类的三国游戏比较成功的是北京前导公司制作的《三国》系列,目前已出两部,即《官渡》和《赤壁》。
即时战略游戏一般是集资源采集、基地建设、部队生产与军事作战为一体的游戏方式。它给游戏者的最大感觉就是紧张与充实。试想一场战役玩起来不到一个小时,游戏者必须在短短的时间内,完成上述的所有步骤。即要发展内政,又要排兵布阵,还要防御敌人的进攻,往往顾此失彼。即时战略最重要的是行动的速度,在游戏者行动的同时计算机也在行动,游戏者如果犹豫不决,在他所耽误的每一分钟里,计算机都在壮大自己的力量,为进攻做准备。游戏者动作越慢,失败的可能性就越大。游戏者必须具备洞悉全局的敏锐观察力、当机立断的决断力、合理规划发展的控制力以及有时还需要一些直觉。总之,一旦玩即时战略游戏,就要完全将注意力集中到战场上,稍一疏忽就可能导致作战失利。
即时战略还能够体现古代战争场面中的大兵团作战,表现士兵与士兵之间刀剑相击的厮杀,可以营造出紧张激烈的战斗氛围。这一点是其他游戏形式所无法办到的。耳边回响着兵刃相撞的铿锵、战场上的人喊马嘶、火焰燃烧木材爆裂的劈啪声,眼前是刀光剑影、流矢横飞、士兵们浴血奋战……一切都是战场的真实再现。但这需要游戏美术设计的努力工作,目前来讲,没有一部游戏能非常完美的做到体现古代战场的壮观,只能做到略具风貌而已。
动作类三国游戏
动作类三国游戏可以说是只为体现三国时期武将的武勇而制作的。无论是对战类的格斗三国或是过关类的动作三国,主角都是三国时期著名的武将,如西蜀五虎将等等。他们以单独作战的形式,使用自己的武器和绝招来完成自己的使命。此类游戏对抗性较强,对游戏者只要求有较快的反应与熟练操纵键盘的能力,能够敏捷的对计算机的动作做出正确的反应。没有什么故事性与策略性,只要一直的战斗下去就可以了。
桌面类三国游戏
桌面类三国游戏绝对是小品级的游戏。全部以掷色子碰运气来决定游戏的胜负,类似《大富翁》或"强手棋"的玩法,只不过将"阿土仔"、"钱夫人"换成了刘备、曹操而已。人物的形象设计完全采用卡通形象,通篇的台词与事件都充满了诙谐、幽默、搞笑的成分,可以说是消遣休闲、老少咸宜的游戏。作为娱乐是可以的,但是历史性就荡然无存了。
从上面的例子可以看出,同一个题材,可以应用于不同类型的游戏上。游戏策划要根据题材的种类、目前的制作能力来选择恰当的游戏类型来表述题材。而且最重要的一点是:绝不要被目前所现有的游戏类型所束缚,要敢于在传统游戏类型上加以创新和变革。
当然,创新和变革不能是盲目的,不能为了创新而创新、为了变革而变革。在进行创新之前,先要考虑好这样的创新是否对游戏的可玩性有帮助;是否在程序上和美工上只要花费较小的代价就可以取得明显的效果;玩家们对这种创新是否会乐于接受;这样的创新对于体现游戏的精髓是否是必要的和有益的;是否对于表现游戏的题材有所帮助……创新和变革要建立在深思熟虑、反复思考的基础上,不能盲目进行。盲目进行的创新和变革对游戏是有害的。
从目前的趋势来看,游戏逐渐向混合类型的方向发展着。越来越多的游戏离开了典型游戏类型的范围,在原有的游戏类型上融入了其他类型游戏的因素。在电脑及次世代游戏机上,明显可以看出混合模式游戏将占据主流的趋势。近年来,混合类型的游戏所占比例逐年升高,种类也逐渐增加。最初的游戏混合类型几乎没有几种,但到目前,可以发现差不多在所有的游戏模式之间都存在交叉现象,比如最近所推出的游戏中,有射击+恋爱育成、战棋+恋爱育成、动作+解迷、RPG+育成、SPG+模拟经营等等,不胜枚举,还有象以前就存在的SRPG和ARPG等。游戏模式的混合,可以改进单一游戏模式的单调性,增加游戏的可玩度,提高玩家对游戏的兴趣。如果策划实在做不到创新和变革,那么可以在游戏类型的混合上动动脑筋。
1.3 游戏的风格
游戏的风格是一个很抽象的概念,它大体上取决于游戏的美术风格、色调的运用、策划的对话设计、过场动画的脚本创作等。游戏风格决定了游戏者在一种什么样的氛围中进行游戏过程。风格可以是多种多样的,但必须与题材和类型配合得当。比如一个严肃的题材,比如《鸦片战争》,就不宜于用轻松诙谐的卡通风格来表现。这将造成风格与题材的严重冲突。或者是一个适合幼儿的益智类游戏,就不可能用类似《雷神之槌》的那种阴暗的画风。
1.4 小结
以上题材、类型和风格三个方面是基本平等的关系。题材关系到游戏策划的方面多一些;类型关系到程序方面多一些;而风格则是美术工作来确定的。游戏在立项的时候,是应该将这三个方面综合起来进行考虑的。比如程序方面的实力弱一些,那么就不要做那些程序难度大的游戏类型--比如RPG、即时战略游戏;如果策划方面的实力比较弱,就避开需要策划进行大量工作的题材--比如幻想题材,需要非常优秀的原创脚本,而目前国内的游戏策划一般不具备写优秀脚本的实力(故事谁都会编,但问题是要让听的人投入感情);至于风格的确定,可以看美工具体擅长哪方面的创作。
实际上游戏类型、风格与游戏策划的关系也很大。例如战棋游戏需要一个感人的故事做主线、要在系统上有所突破、要尽量多设计出武器、道具、职业种类等等--对于策划来讲也是不小的考验。至于游戏风格,对于一款搞笑风格的游戏,策划如果不具备幽默感,怎么写对话和脚本?所以在游戏制作中,无论什么题材、类型与风格的游戏,策划都绝不轻松。
---------------------------------
2 游戏大纲的确定
如果现在你已经将游戏的题材、类型和风格确定了下来,那么你将真正进入游戏的实质性设计阶段--确定游戏的大纲。
游戏大纲将要对游戏的方方面面做一个总体化的设定和规划,将勾勒出游戏的大体雏形--如果把制作游戏比喻为盖房子的话,那么游戏大纲就是这所房子的建筑图纸,日后一切的工作都将在大纲所规定的范围内进行。所以游戏大纲对于一款游戏的制作来讲,是非常重要的,因此一定要尽量做到完善。下面将结合具体例子来进行讲解游戏大纲的确定过程,由于我们对即时战略比较熟悉(曾经开发过《三国演义--赤壁》),例子将采用三国题材的即时战略游戏类型来说明。
2.1 确定游戏由哪几部分组成
对于一款类似《C&C》的即时战略游戏,一般分为建设部分--进行建筑物的建造、作战单位的生产;战斗部分--进行部队的调动、攻击;单挑部分--进行武将一对一的战斗。如果要想加入更多的创新要素,从理论上来讲,我们可以再加入RPG部分--进行有限的对话、动画演示,推动情节的发展,还可以加入道具和装备系统;策略部分--将三国志系列的形式与即时战略融合在一起,形成嵌套关系。即战略部分凌驾于其他四部分之上。那么现在,就将游戏分为了五大部分──战略部分、建设部分、战斗部分、单挑部分及RPG部分。战略部分为最上层,在战略部分可以通过切入城市的办法进入建设部分;还可以通过调集部队进攻的办法进入战斗部分;通过部队的移动进入特殊地点的部分进入RPG情节部分。在建设部分可以通过对武将的操作进入RPG情节部分。在战斗部分可以通过对武将的操作进入单挑部分。这样在这五部分之间就充分建立起了联系,可以进行任意的切换。同时,也大体勾勒出了游戏的基本框架:以战略游戏为外壳,强调国家与国家之间的关系;以即时战略的战斗方式为发展手段;加入角色扮演成分体现历史人物的作用。
注意:这里指的是理论,在实际制作过程中,游戏很难涵盖如此众多的内容,而且在容纳了如此众多的游戏内容之后,游戏将变得没有重点,使游戏者无所适从。
2.2 按照划分好的部分各个进行纲领性的说明
在划分好各个部分以后,就要对各个部分分别进行提纲性质的说明,将各个部分大体的包括的内容描述出来,也是将各个部分的形式描述给程序部门和美术部门看。
1 战略部分的综述举例:
战略部分作用为表现任务关的最基本部分。战略地图的大小从1*1屏、1.5*1.5屏到2*2屏,表现方式为地图形式。在地图上有城市、河流、村庄、树林、山脉、稻田、湖泊、金矿、渡口、道路、特殊地点等等。其中树林、稻田、金矿作为资源点存在、城市作为建设生产地点存在。
在战略地图上,没有黑阴影,只有索敌阴影。即游戏者在一开始就可以知道本任务关所有的地形,但对敌人部队位置的确定只能在敌人进入我方部队的索敌范围之内才能发现。
在战略地图上,可以加入多种效果。如雨、雪、风等天候,雨雪效果要精细;天空中的浮云与飞鸟的动画;地形的动画如树木的随风摇摆、麦浪翻滚、湖泊波光粼粼;以及时间的推移,即将有清晨、正午、黄昏、夜晚的四种时间变化。如果有可能,在湖泊、河流上加上天空的倒影。
在战略地图上,游戏者主要的操作是控制部队、切入城市进行建设、切入资源点进行采集资源的操作等。
在上述描述中,你可以看到战略部分的大体外观表现了,同时也能够通过描述,在脑海中先有一个战略部分的大致印象。下面要接着描述在战略部分中控制部队、切入城市进行建设、切入资源点进行采集资源的操作。
2.2.1 部队的操作:
⒈ 移动:一支部队由五十个作战单位以及一名武将组成,在战略地图上以图标形式存在。移动速度与本部队的兵种组成有关,骑兵为主的部队移动起来比步兵为主的部队速度要快;在不同的地形上移动速度也不同,穿越树林的速度比在道路上移动的速度要慢。如果遭遇敌人部队,切入战斗部分。根据敌人的不同状态而有不同的战场情况。比如敌人如果是埋伏 的状态,那么切入战斗部分时,我军部队将没有排好阵形。
⒉ 计策:在战略地图上,文官将领可以使用计策,对敌人的部队进行打击或干扰其行动。不同的文官会使用的计策会有所区别。计策的成功率和破坏力将受到武将智力与等级的影响。计策有以下几种:
⑴ 火计:在地图上形成火焰地带,烧伤敌人的部队。火计将受到地形、天气的影响。在合适的地形上才可以使用火计,在雨、雪天气将无法使用本计策。
⑵ 加速:提高部队的移动速度,而且不影响部队移动时的属性。
⑶ 部队及武将生命力恢复:可以使武将及受伤士兵的生命力恢复。
⑷ 落石:使用落石杀伤敌人的有生力量。受到地形的限制,必须在我军处于高地地形而敌人处于平地时才可以使用。
⑸ 落雷:特殊的计策,只有少数武将会使用。使用时,将会在战略地图上出现聚集的乌云,然后空中向地面劈下闪电,可以杀伤敌人的部队及武将。威力强大。画面效果华丽,效果显著。
⑹ 火龙:特殊的计策,只有少数武将会使用。使用使,在战略地图上出现一条火焰的龙,从地图上呈直线穿过,沿途的适宜地形均会燃烧。同样受到天气的限制。
⑺ 水攻:用于使用在靠近水域的敌人部队上。
⑻ 疑兵:制造自己部队的替身,在战略地图上制造假目标用于迷惑敌人。
⑼ 假令:用于敌人部队上,可以起到让敌人暂时失去行动能力或做出不合理的行动,比如在行军时中了"假令",将改变行军方向。
⑽ 远视:可以使自己部队的索敌范围加大,同时可以发现埋伏状态的敌人。
⒊ 埋伏:在地图上合适的地形上,比如树林中和丘陵上,我军部队可以埋伏下来。在埋伏的过程中,可以切入埋伏地点进行建设。修建陷阱、鹿砦等工事性建筑。部队如果被敌人发现,只要不离开埋伏地点,工事依然有效;但如果主动结束埋伏过程,离开埋伏地点,所修建的工事性建筑将全部消失。所消耗的资源不与退回。具体操作见下文的"建设部分"。
⒋ 扎营:在地图上合适的地形上,比如平原和道路上,我军部队可以进行扎营的操作。在扎营的地点,可以切入进行修建陷阱、鹿砦、箭楼等工事性建筑及防御性建筑,但无法修建生产性建筑。部队在扎营期间,士兵和将领损耗的生命力将恢复,将领体力值恢复的速度加快。部队如果离开扎营地点,即算做拔营,扎营所耗费的资源退回百分之七十。具体操作见下文的"建设部分"。
⒌ 道具:所有将领身上都带有道具。在战略地图上可以使用。道具分以下几种:
⑴ 恢复部队生命力类:
⑵ 恢复武将生命力类:
⑶ 恢复武将体力类:
⑷ 攻击类:
⑸ 加速类:使己方部队速度提高。
⑹ 索敌类:可以在战略地图上暂时起到照明的作用,用于搜索敌人部队,可以发现埋伏状态的敌人。
⒍ 物资采集:资源采集部队所特有的指令,用于资源的采集,当部队物资采集满以后,此命令将不再出现。
⒎ 物资回运:资源采集部队所特有的指令,用于资源的运送。当部队没有运载物资时,此命令将不出现。
⒏ 阵形:选取部队在作战时的阵形,影响部队在战斗中各个作战单元的位置。
⒐ 登陆:针对搭载陆军部队的登陆舰队的专用命令。
⒑ 入城/出城:进入或撤出城市。
(2)切入城市、扎营和埋伏地点:
在战略地图上可以切入城市、扎营地点和埋伏地点进行建筑物的建造。具体操作及建筑物的种类见"建设部分"。
(3) 切入资源点:
在战略地图上可以切入资源点进行资源的采集和建筑物的建造。具体操作见"建设部分"。
现在,战略部分的大致描述就完成了。至于里面的很多没有详细说明的部分,是会在以后的策划工作中进行的,现在先不用去详细的叙述。战略部分叙述完成后,再进行其余部分的叙述。
2.2.2 战斗部分的综述举例
根据已经确定的游戏各个部分的关系图,当双方部队相遇时;己方部队攻击敌人城市、资源点、扎营地及遭遇埋伏军队时;对方部队攻击我方城市、资源点、扎营地及遭遇埋伏部队时会进入战斗部分。战斗部分在战斗地图上以即时战略的形式进行。
战斗地图大小初订为4*4屏一种。战术地图上的图素与战略地图上的图素是两套,而且战术地图上的图素要做到在真实的基础上的细致、漂亮。在战斗地图上没有任何阴影。战斗地图的图素种类受到战略地图的限制,比如在战略地图上是下雪的天气,那么在当时发生的所有的战斗地图的图素就全部为雪景。战斗地图的产生方式见下文。
部队单位在移动时,在雨雪天气时,要在地上留下脚印。在浅水区行动时要有水纹。
发射类武器的弹药要走抛物线,有提前量和误伤的设计。
著名将领有自己的形象,普通将领则用通用形象。形象分武将与文官两种。两种将领在应用上有区别。武将有武将技,以攻击性为主,在战斗及单挑时使用;谋士有计谋,以恢复、攻击、破坏、提高属性、减低敌人属性及其他方面为主,在战略及战斗使用。
将领有经验值,通过积累经验值可以提升等级,从而提高能力以及技法。能力也可以通过使用道具来提升。
将领可以通过装备来提高自身的攻击力、防御力及移动速度。
将领存在体力值和生命值,士兵攻击武将先降低体力值,后降生命值,当体力值降低为0时,将领攻击力为0且开始降低生命值。
将领如果生命力为零,该将领所率领的部队即认为是被全歼。该部队图标从战略地图上消失。
(1) 进入战斗部分的方式:
根据在战略地图上的不同情况,切入战斗部分将有不同的情况。
⒈ 部队与部队的接触:
⑴ 双方部队全部是通常的行军状态相遇:根据遭遇点战略地图图素的性质,随机生成以该种地形图素为主的图标。比如是在战略地图的树林中相遇,那么随机生成的战斗地图就应该是以树木的图素为主。具体的战斗地图如果在算法上无法做到顺利的随机演算生成,那么可以事先用地图编辑器做出以不同地形搭配的战斗地图各15张左右,在发生战斗时随机挑选。根据程序的编程程度而定。
双方部队根据遭遇的初始位置关系而确定,分为上下左右的四种对称的出现方式。比如在战略地图上相遇时我军部队在敌人部队的左方,那么在切入战斗画面时,我军部队将在战斗地图的左边列阵,敌人在右边列阵。其他情况亦然。
双方出现时均已列好阵势。
⑵ 敌人部队为普通行军,我军为埋伏:战斗地图不是随机演算而成,而是读出埋伏部队所设计的战场。包括游戏者所堆放的草堆、所挖的陷阱要出现在原先放置的位置上。双方部队将出现在固定的相应位置上,比如敌人在地图中央,我军在地图的固定一侧。这就要求在埋伏时要比较技巧的放置陷阱和草堆,做到敌人进入战场后,陷阱与草堆都能发挥作用。如果敌人的出现位置不理想,游戏者要能将敌引至陷阱处,需要较高的战术技巧。
敌人部队出现时没有排好阵形,我军部队排好阵形。
⒉ 敌人进攻我方部队资源点或城市:战斗地图不是随机演算而成,而是读出所设计的战场。包括游戏者所建造的建筑物格局、防御工事的位置。所堆放的草堆、所挖的陷阱要出现在原先放置的位置上。双方的位置应该是我军部队出现在战斗地图的中央,敌人出现在战斗地图的四边。双方均列好阵形迎战。
⒊ 由于RPG情节引发的战斗:在游戏中,有可能在游戏进行中由于故事情节的需要而发生特定的战斗。这种战斗由于是故事情节所引发,是一种特殊类型的战斗,参加武将特定、部队特定、战斗地图特定……所有的因素都是固定的。只要游戏者在游戏中满足了战斗发生的条件就会发生,所以具体的战斗安排全部是特定的,与普通战斗不同。
(2) 游戏者在战斗地图上的操作:
游戏者在战斗地图上可以进行以下操作:
⒈ 对整支部队:
⑴ 行军:使整支部队保持阵形移动到指定的位置。
⑵ 攻击:让整支部队攻击指定的目标。
⑶ 阵形:转变部队的阵形。
⑷ 警戒移动:使整支部队保持阵形移动到指定的位置。但在移动过程中如果攻击范围内出现敌人,部队将开始攻击。
⑸ 突击:整支部队散开队形,攻击向离自己最近的敌人部队,相当于托管。
⑹ 结阵:所有部队以武将为中心重新集结成阵形。
⑺ 停止:所有部队停止动作,原地停下。
⑻ 呼叫:呼叫增援部队。增援部队必须在战略地图上离战斗发生地点距离不超过三格。
⑼ 其他:暂时不与添加。
⒉ 对选定的作战单位:
⑴ 行军:将选定的作战单位移动到指定位置。
⑵ 攻击:命令选定的作战单位攻击特定的敌人部队。
⑶ 警戒移动:使指定的作战单位移动到指定的位置。但在移动过程中如果攻击范围内出现敌人,部队将开始攻击。
⑷ 突击:所有指定的作战单位攻击向离自己最近的敌人部队,相当于托管。
⑸ 停止:所有指定的作战单位停止动作,原地停下。
⑹ 解散:使指定的作战单位脱离将领带领,成为散兵。
⑺ 加入:使指定的作战单位脱离原将领带领,加入到另一将领的麾下。
⑻ 其他:暂时不与添加。
⒊ 对将领:
⑴ 移动:命令将领移动到指定位置。
⑵ 攻击:命令将领攻击指定的敌人部队。
⑶ 警戒移动:使指定的作战单位移动到指定的位置。但在移动过程中如果攻击范围内出现敌人,将领将开始攻击。
⑷ 停止:将领停止当前动作,在原地停止。
⑸ 计策:将领可以使用以下计策:
① 攻击性计策:
A 火计:一般的计策。
B 落雷:特殊计策,少数文官会使。
C 旋风:特殊计策,少数文官会使。
D 落石:特殊计策,少数文官会使。
E 特殊文官技:每个著名文官自己所特有的计策,绝不雷同。
F 特殊武将技:每个著名武将自己所特有的绝招,绝不雷同。
② 属性类计策:
A 加速:使自己部队的速度提高。
B 减速:使敌人部队的速度降低。
C 护盾:使自己部队的防御力提高。
D 激励:使自己部队的攻击力提高。
E 特殊文官技:每个著名文官自己所特有的计策,绝不雷同。
③ 特殊类计策:
A 逃跑:全军立即脱离战场。
B 单挑:向敌人将领提出单挑,没有距离限制,但有成功机率。
④ 恢复类计策:
A 恢复生命力:恢复受伤士兵或自己的生命力。
⑹ 撤退:当将领退到战场边缘时,才会出现这一命令,可以使将领自己脱离战场。但士兵会丧失攻击能力,游戏者只能操纵他们向战场边缘移动。当士兵移动到边缘时,即认为是脱离战斗,回到将领身边。当战场上我方所有士兵或被消灭或脱离战场,该场战斗结束。
⑺ 道具:将领在战斗地图上可以使用随身携带的道具,道具有以下几种:
① 恢复生命力类:
② 恢复武将体力类:
③ 攻击类:攻击敌人。
④ 属性类:改变我军或敌人部队的属性。
对战斗部分的描述,确定了战斗的方式。在描述的过程中,很多地方实际上规定了程序员和美工们要做的工作,你能够从中分辨出来吗?试着找一找,有相当多的部分是在为整个的工作在进行规划和描述。
2.2.3 单挑部分的综述举例
在战斗部分当双方武将进入两格的距离以内,将自动切入单挑部分;单挑部分也可以直接由RPG部分引发。两者表现形式相同。
单挑部分以正上方俯视30度画面视角表现,敌我武将左右排开。单挑画面大小约为1*1.5屏。画面效果做到华丽精细。单挑场景的背景效果要有树木等图素,地上的草丛要有动感,能够有风吹动的动画。
单挑部分同样以即时战斗方式进行。画面上有双方将领的生命力(血槽)、体力(能量槽)、时间槽。其中时间槽是不断从零到满渐渐增长的,分为红、黄、绿、闪光四个阶段。游戏者在不同的阶段发动攻击,分别对应将领的动作为不能动作、普通攻击、全力一击和武将技(含道具)。当一方将领有所动作时,时间槽即暂停增长,到将领动作完毕后再继续增长。当将领行动后,该武将的时间槽即回零,从头开始增长。使用绝招会消耗将领体力。
击倒对方武将的最后一击会放慢动画播放速度,造成类似慢动作的效果。如果是用绝迹击倒对方,还会有闪光效果出现以加强画面震撼力。
双方将领在分别在画面两边,在攻击时会有相应的攻击动作。比如在普通攻击时,将领会催马向前,对对方进行攻击。受攻击一方会有相应的动作,比如防御、闪避和直接命中的动画。防御使用时间槽,会使伤害减半;闪避不使用时间槽,消耗体力,而且成功有机率,能够使对方攻击完全无效;直接命中不消耗任何时间或体力,但完全承受对方攻击。伤害的程度、闪避的成功率根据双方将领的武力、防御力、移动力和使用的攻击方式来计算。
游戏者在单挑部分可以对将领进行以下操纵:
(1) 不能行动状态:当时间槽为红色时,游戏者不能对将领进行任何操作。这项设计是为了避免游戏者不停的攻击而使时间槽完全停止增长或增长速度极为缓慢,从而导致计算机无法行动而设立的。
(2)普通攻击:当时间槽为黄色时,游戏者可以进行普通攻击。普通攻击的伤害力不高,但由于速度较快,比较不容易闪避。
(3)全力一击:当时间槽为绿色时,游戏者可以进行全力一击。全力一击的伤害力比普通攻击要高,但相对来讲,闪避的机率也较高。
(4)武将技(绝招):在时间槽闪光阶段,游戏者可以使用武将技。著名武将有属于自己的绝招,普通武将有通用武将技。绝招的伤害力相当大,且很难闪避,但要消耗掉相当的体力,有些武将技甚至要付出消耗生命力的代价。文官在单挑中无法使用任何计策或绝招。
(5)道具:在时间槽闪光阶段,游戏者可以使用道具。道具种类有以下几种:
⒈ 攻击性道具:对对方将领造成伤害。不同的道具有不同的伤害力和闪避机率。
⒉ 属性类道具:对自己或敌人的将领造成影响。比如攻击力在三回合内提高;防御力提高;时间槽增长速度加快;降低敌人将领属性;使敌人将领时间槽增长速度变慢等等。
⒊ 恢复类道具:对自己使用,可以恢复生命力、体力或两者均恢复。
⒋ 特殊类道具:产生特殊的作用。比如立即撤出单挑。
(6) 撤退:在时间槽闪光阶段,可以撤退。撤出对自己不利的单挑。有成功机率的计算。
单挑部分的设计采用了现在比较流行的RPG中即时战斗的方式。这种战斗方式具有节奏紧凑、紧张激烈的效果,用于表现"二马错镫,刀戟相交"的古代武将之间的较量有恰如其分的作用。
2.2.4 建设部分综述举例
在战略地图上可以随时点击城市和渡口;资源点和部队扎营地;部队埋伏地点切入建设画面。三种地点的能够建设的建筑物不太相同,下文中将分开阐述。
在游戏中,建筑物的建造和修复将采用类似《命令与征服》的菜单直接建造方式,放弃《魔兽争霸2》和《赤壁》中以工人建造的办法。用菜单建造建筑比较方便快捷,而且画面表现起来会简单素净一些。
游戏者在建设部分可以进行作战单位的训练;建筑物的建造;对部队进行有限的操作;触发游戏的RPG情节,进入RPG部分,比如购买道具和装备,与特殊人物对话,与普通NPC对话等等。
(1)关于建筑物
建筑物的分类:建筑物分为四类。
⒈ 生产性建筑:承担作战单位的训练、武器的升级等。其种类有:
⑴ 主帅帐(4*4):初级建筑。训练工人部队。
⑵ 兵营(3*3):初级建筑。训练士兵。
⑶ 木材场(3*3):初级建筑。收集木材、研究弓兵武器。
⑷ 马厩(3*3):二级建筑。训练骑兵、骑弓兵的必要建筑,。
⑸ 特殊训练营(3*3):二级建筑。训练特殊兵种的必要建筑。
⑹ 工匠所(3*3):三级建筑。开发研制特殊兵种的建筑。诸如连弩、火箭车、等等。
⑺ 水寨(3*3):初级建筑。训练水军的建筑。
⑻ 粮仓(3*3):初级建筑,用于收集和存储粮草。
⑼ 其他:暂时不与添加。
⒉ 防御性建筑:防御性建筑承担防御功能。
⑴ 箭楼(2*2):初级建筑,承担防御功能。
⑵ 其他:暂时不与添加。
⒊ 工事性建筑:工事性建筑可以起到辅助防御或进攻的作用。
⑴ 陷阱(1*1):当敌人部队经过时,陷阱会塌陷,将敌人的作战单位消灭。对于武将起到先降低体力,当武将体力为零时,开始降低武将生命力。在武将生命力不为零时,如果掉入陷阱,能够跃出。陷阱只能被发现特殊的计策或道具发现,或被特殊的道具破除。任何兵种对陷阱都毫无办法。
⑵ 鹿砦(1*1):起到路障的作用,使敌人部队不能通过。鹿砦可以被作战单位用攻击的办法破坏。
⑶ 桥梁(2*2):横架于水面之上。陆军部队可以通过桥梁跨越水面。同时,桥梁可以起到阻拦对方水军的作用。桥梁可以被部队用攻击的办法破坏。
⑷ 草堆(2*2):堆放在地面上的草垛。可以用计策或火属性的攻击引燃。火在草堆上燃烧的时间比较长,而且容易蔓延。
以上建筑说明:
A 所有建筑物建造分三个阶段,损毁也分三个阶段,损毁时要有较详细的动画交代,小股火焰从建筑物不同的位置上冒出,如果能有燃烧的烟出现最好。
B 所有建筑物如果能有动画,比如旗帜的飘动、灯光的明暗变化等,将提高画面的生动程度。
C 建筑物分三个等级。在开始就能建造的建筑为初级建筑;必须在其他一些建筑物建造后才能建造的建筑为二级建筑;在所有建筑建造完成以后才能建造的建筑为三级建筑。
⒋ 功能性建筑:功能性建筑在游戏中承担特殊的功能,主要是RPG的部分。比如道具的购买和交换;武器的购买、装备和交换;触发特定的RPG情节等等。其种类有以下几种:
⑴ 道具屋(3*3):将领进入道具屋可以购买道具、出售道具、与同处在同一地域内的武将交换道具。有时可以触发情节。
⑵ 情报屋(3*3):将领进入情报屋可以通过花费金钱来购买当前任务关的有关情报。包括敌人的军队部署、将领情报、资源状况、敌人的部队动向等等。有时可以触发情节。
⑶ 武器屋(3*3):将领进入武器屋可以购买武器装备、与同在一地域的将领交换武器装备。武器装备有武器、防具和马匹。有时可以触发情节。
武器分为剑(刘备、普通文官用)、刀、枪、羽扇(诸葛亮专用)。每种武器有不同的种类和作用。
防具分为武将用的铠甲和文官用的长袍。每种防具有不同种类和作用。
马匹武将和文官通用。不同种类的马匹对移动力的影响不同。
⑷ 演武场(3*3):游戏者在演武场中可以通过交纳费用的办法,使将领与在同一地域的将领以单挑的方式获取经验值以提高等级。有时可以触发情节。
⑸ 特殊建筑(尺寸不定):触发RPG情节,提供游戏线索。比如在"刘备娶亲" 一关中,乔国老的家即属于此类建筑。
⑸ 民居/军营(2*2):触发RPG 情节,提供游戏线索。
⑹ 其他:暂时不与添加。
功能性建筑说明:
A 功能性建筑为每关开始给定,无法建造、修复与破坏。
B 前四种建筑一般只存在于城市之中,很少出现在其他地方。后两种建筑有可 能在任何地点出现。
C 功能性建筑在不同的地区要有不同的外型,但要有统一的标志。比如在荆州、 成都、建业的武器屋的造型要有区别,但它们的标志全部是剑与盾交叉的图案(举例而已)。
D 将领进入功能性建筑以后,外部时钟停止。
E 城墙和城门算是特殊地形。在任务关开始时给定,不可修建,可以被损毁,可以修复。
在城市、渡口的建造:在城市和渡口中,可以训练出作战单位。在其他建设地点则不行。但在渡口中不能建造生产性建筑。只能建造防御性及工事性建筑。在城市中可以建造任何可以建造的建筑。
在资源点和部队扎营地的建造:在资源点和部队的扎营地,只能建造防御性及工事性建筑。
在部队埋伏地点的建造:在部队的埋伏地点,只能建造工事性建筑。
(2)关于部队
部队的生产和组建:
⒈ 部队的种类:部队分八大类,各自又分几种。
⑴ 步兵:
① 藤牌手:
针对敌人的弓兵而产生的兵种,手持的盾牌可以很好的遮住自己身体的重要部分,防止弓箭的伤害。但对于骑兵那种高速凶猛的冲击,盾牌就没有任何突出的作用了。
② 长枪手:
长枪手所持的武器对于骑兵来讲是颇具威胁的。八尺长的长枪比骑兵所使用的大刀有效杀伤距离要长得多。通常在骑兵冲到自己之前,长枪就贯穿了他们的身体。不过长枪手由于没有任何防御性装备,在弓箭手的准确射杀下,他们就显得没有任何威胁。
⑵ 弓箭手
① 弓兵:
作为基本的弓箭手,他们在各个方面的表现都显得比较均衡。如果能够部署到恰当的位置、针对敌人恰当的兵种,就能够起到预期的作战效果。
② 连弩兵:
由诸葛亮所设计的连弩所装备起来的兵种,为西蜀的特有部队。连弩射击速度比普通弓箭要快上很多,不过由于射速的提高,使射程变得不尽人意,而且由于连弩的笨重,使士兵们不得不在行动时扛着他们的武器,也使行军速度降低了不少。虽然如此,在其射程内,同等数量的连弩兵齐射的威力可以抵得上两倍数量于自己的弓兵。
③ 骑弓兵:
普通的弓兵配属坐骑就成为了骑弓兵。由于配属了坐骑,使行军速度大大加快,成为快速打击力量的重要组成部分。但也由于坐骑的原因,使得不仅在远距离上对藤牌手的杀伤力不强,而且在近距离内也无法抵挡长枪手的戳刺。
⑶ 骑兵
① 骑兵:
骑兵是进攻部队最常见的组成兵种,他们快速的行动能力、凶猛的攻击力量都使他们通常在一场战斗中起到至关重要的作用。虽然在与长枪手部队对战时,他们的威力不容易发挥,但对于其他兵种,他们的力量足以使对手屈服。
② 铁甲骑兵:
将骑兵的战马批上铁甲,就成为了铁甲骑兵。显而易见,铁甲骑兵的防御力比普通骑兵要高,但厚重的铁甲同样也造成了战马的负担,使他们在行动速度上比不过不批铁甲的同伴们。
⑷ 远程武器
① 投石车:
远程武器的最基本种类。依靠人力将巨大的石头投掷出去,对建筑物、城墙以及士兵都有极大的威胁,数辆投石车同时发射,就能对敌人造成毁灭性的打击。不过由于行动笨拙、射速很慢,而且对于敌人的近战毫无还手能力,所以一般只在攻坚战中使用,在野战中很少用到。
② 神火飞鸦:
特殊的远程武器,能够利用机簧的力量发射可以依靠惯性滑翔的鸟状火焰弹。射程比投石车要远,火焰弹在落地之后可以爆炸燃烧,对建筑物的破坏力虽然不如石头强,但爆炸后迸裂开的火焰对士兵威胁较大,能够使爆炸点周围的士兵受伤。不过火焰弹的装填比较费时,极大的影响了发射速度。
③ 火箭车:
利用巨大的弓弩一次可以依次发射九支火箭的弓箭车。火箭对于建筑物尤其是石头城墙威胁很小,但火箭落到地上以后可以在地面上持续燃烧一段时间,造成一片火海,对穿越火焰的士兵造成伤害。火箭的飞行距离比普通的弓箭稍远一些,不过也很有限。
⑸ 水军
① 运输舰:
在作战的地形中两军之间如果有大片的水域将双方隔开,尤其是当敌人的基地远离岸边,在战舰的射程之外时,就需要我军部队登陆作战。运输舰就是起到运输部队登陆的作用,没有任何武装,移动速度也不快,但却是不可缺少的水军部队。
② 战舰:
战舰是水战的主要作战部队,起到打击敌人水上有生力量,掩护我军登陆舰队以及在一定程度上摧毁敌人近岸建筑物的作用。
③ 楼船:
东吴的特有水上兵种,庞大的舰体、高大的舰桥楼层建筑、凶猛的火力……充分体现了东吴水军在水战中所占据的优势。不过移动速度慢、射击速度慢、尤其是造价高昂是其致命的弱点。一般在舰队中是作为指挥舰出现,配合战舰作战,很少有大规模的楼船集结成舰队。
⑹ 特殊兵种
① 侦察兵:
没有攻击力、移动速度极高、视野广阔的侦察部队,不仅在地面上可以畅行无阻,在水面上也可以不搭乘登陆舰而使用自身携带的皮筏通过。无法与作战部队混编,也无法归属将领指挥,他们是一种特殊的部队,一直是以个人为单位完成自己的侦察任务,将敌人的兵力部署、基地情况探察清楚是他们的最大作用。
⑺ 生产兵种
① 工人:
稍具攻击力的部队,他们的任务主要是从事资源的采集和运送工作。他们可以与作战部队混编。
⑻ 其他
① 平民:
他们是时代的牺牲品,只是被动而且不幸的被卷入了战争的旋涡。作为战场上的无辜参与者,面对全副武装的军队,他们毫无还手的力量,只能被侵入者的军队残杀。不过对于西蜀军队这样的仁义之师,他们反而成为了被保护的对象。
② 特殊人物:
一些对作战有帮助的神秘人物。通常在到达某个特殊地点或完成某个特殊任务后出现。能够对完成当前的作战任务有所帮助。
⒉ 部队的生产:
不同的建筑物训练不同的兵种。在兵营中训练所有的步兵、弓兵和骑兵。在特殊训练营中训练特殊兵种和远程兵种。在水寨训练水军部队。
各个作战单位在训练出来以后,会在生产自己的建筑物周围出现待命。没有武将带领的作战单位只能进行移动的操作,没有攻击性行为。
在点击建筑物进行建筑的时候,可以进行自动生产作战单位。数量从一到九。每在生产图标上点击一次,增加一个自动建造的数目。
⒊ 部队的组建:
对于未组建成部队的散兵,可以将他们加入到一名将领的麾下,组成有战斗力的部队。
将领的选择必须是与散兵共同出现在同一地域的将领,不允许跨地域组建部队。而且此将领所原先所率领的作战单位数必须不足满值。
⒋ 部队的操纵:
游戏者在建设部分可以对部队进行简单的操纵。
⑴ 移动:
⑵ 强制攻击:强迫部队对目标进行攻击。
⑶ 阵形:
⑷ 解散:将部队的部分或全部作战单位解散,使其成为散兵。即便部队的全部作战单位都解散,将领也不消失,依然出现在屏幕上,依然作为一支部队,只是没有士兵而已。
⑸ 加入:将部队的部分或全部作战单位加入到另一名将领的麾下,脱离原来的将领指挥。
⑹ 出城:将部队移动出当前地域,使它在当前建设地图上消失。
⑺ 其他:暂时不与添加。
关于资源的采集与运送
资源的采集与运送全部有工人来承担。工人可以与战斗兵种混编,但一支部队采集资源的速度和负载资源的数量受到工人数量的影响。
游戏有三种资源:金矿、树木和粮草。在战略地图上的表现形式为资源点。游戏者可以切入资源点进行建设,可以直接手动操纵工人进行资源的开采,也可以在战略地图上将资源采集的过程交给计算机。比如一支资源采集部队能负载的资源满值是5000,那么在战略图上可以看见在资源采集部队的上面有一条代表资源满值度的槽。当采集部队进行采集工作时,游戏者可以看见槽在渐渐长满,当到达满值时,部队将资源运送回资源收集地。如果直接切入资源点进行手工操作,游戏者可以指挥工人们砍树、收割粮草的位置等等,在收集到满值时,将出现提示信息,部队将运送资源回资源收集地。如果游戏者在手动采集到一半时切出到战略地图,计算机将继续以后的工作。
资源运输以工人推送车辆表示。如果在资源运输过程中遇到敌人部队,资源运输车被击毁多少,则认为资源被敌人抢走相应的数量,加入到敌人的资源数中。所以当资源运送部队遇敌时,如果该部队的战斗兵种不足以抵挡敌人的进攻,那么将领首先要撤出战斗,然后尽量多的把运输车撤出战斗地图。
其他说明
一 建设部分的建筑物建设与士兵的训练在切出至战略图上时继续进行,但人员的移动全部停止,在游戏者从战略图中切换回来时保持原样。
二 在建设部分时,外部时钟不停,部队继续移动。所以在游戏者搞建设时,部队、资源点、城市会遭到敌人部队的进攻。当受到进攻时,立即切入战斗部分。在战斗部分,外部活动一律停止,包括部队训练、建筑物建设、部队移动、建筑物修复等等,活动的只是当前战场。
三 游戏者所进行的建设活动,将完全反映在战斗地图中。比如当敌人部队进攻我方城市时,所出现的战斗地图中的建筑格局完全是游戏者所建设的设计。同样,对于其他可建造地点的所有相应建筑如箭楼、陷阱等也完全同游戏者所摆放的一致。
在建设部分中,对兵种、建筑物、资源等进行了分类和描述。对于即时战略游戏,兵种与兵种之间、兵种与建筑物之间、兵种与武将之间都应该有相互的联系,如在速度、射程、威力等方面有相互克制或相互补充的功能。这些性能在兵种、建筑物参数中应该有所体现。在大纲的部分中,只要做到兵种、建筑物的种类齐全就可以了--远程武器、防御建筑物、快速兵种。这里指的是一般的即时战略游戏的模式,一般的即时战略游戏的克制关系脱不出以下几种--兵种与兵种之间的相互克制、兵种与防御性建筑(箭楼炮塔一类)之间的相互克制以及法术对兵种、法术与法术之间的相互克制(法术在这里是个泛称,凡消耗Mana或能量的技巧,我将其笼统的称之为"法术")有些即时战略游戏是没有这种相互关系的,作为补充,它们的设计必然在其他方面上有所突破和革新,在这里不做讨论。读者可以自己设想一下,用什么样的设计方案可以作为克制关系的替代。
3.2.2.5 R P G 部分综述举例
RPG部分在游戏中占据了不小的比重。主要进行交代剧情、刻画人物、提供游戏线索、影响游戏进程、提供游戏分支路线的作用。
(1)人物:
在建筑物中出现,承担建筑物功能(比如店老板)、交代剧情、活跃气氛或引发特殊情节和线索。
⒈ 道具屋负责人:两种形象。
⒉ 武器屋负责人:两种形象。
⒊ 演武场负责人:两种形象。
⒋ 情报屋负责人:两种形象。
⒌ 居民:老人、老妇、中年男子、中年女子、男青年、少妇、男孩、女孩、兵士,各类人有不同的身份。特殊人物根据各关不同而有所变动。登场武将根据每关不同有所改变。
⒍ 补充说明:有些人物(尤其是登场武将)要有表情改变。表情可以有一般、喜悦、大笑、哀伤、生气、受伤等。根据不同的人物及剧情需要而单独设计。
人物性格:在对话、表情、动作以及武将技等设定方面,体现人物的各自性格,比如刘备的仁、关羽的义、张飞的猛、赵云的勇以及诸葛亮的智等等。
(2) 对话:
在建筑物中的每个人都有自己的台词,次要人物为一至二句,主要人物根据不同剧情需要设计。
在战略地图中、战斗地图中、建设部分中、单挑部分中都会有对话的出现。
(3) 事件:
游戏中会出现不同的事件。事件由不同的条件触发。
⒈ 时间触发:比如在任务关进行的第几天,敌人出现援军。
⒉ 地点触发:比如在我方部队到达地图上某一点,将会触发一定的事件。
⒊ 选择触发:游戏者对游戏中出现的选项做出的选择,将带来不同的后果。比如游戏者对游戏中出现的对话选择不同的回答。
⒋ 人物触发:用特定的将领接触特定的人物。
⒌ 行动触发:游戏者操纵将领以一定行动顺序行动,触发事件。
⒍ 道具触发:游戏者得到特殊的道具,使用将触发事件。
⒎ 综合触发:综合了以上几种条件的触发形式。
(4) 情节过场动画:
游戏中有大量的情节过场动画。起到交代剧情、铺垫情节等不可缺少的作用。情节过场动画将采用类似影视的多镜头、多角度的画面设计,充分做到精细和生动。
为了体现游戏中三国武将个人特色,RPG部分显得至关重要。在上文说过,三国游戏如果能突出刻画人物,体现武将在历史中的作用,将历史人物与历史事件有机的结合在一起。以武将为基本描述点;历史事件与进程为叙述线;整个三国时期的局势做为面,做到重点突出、线索连贯、全面铺开,将点、线、面三者结合起来叙述,就可以从军政结合的角度完美的表现三国时期的历史。而且《三国演义》本身对人物的刻画也是非常成功的。在《三国演义》中,罗贯中老先生使用"七分史实,三分虚构"的行文方式,在不掩盖历史大事件的同时,巧妙的运用虚构的手法一一勾勒出三国中所有的英雄的脸谱,突出了个性。使他们不仅作为平面人物存在,而且变得有血有肉,呼之欲出。关羽的义、张飞的猛、赵云的勇、刘备的仁、曹操的奸、诸葛亮的智……无一不变得让人难以忘怀。这也正是《三国演义》的魅力所在。如果能够在游戏中将这一特性表现出来,相信能让游戏增色不少。
注意:在游戏大纲的确定期间,游戏策划要经常与程序部门、美术部门讨论该大纲各个部分的设计是否可行。比如在表现雨雪效果时,从程序上讲,是要在画面上加一层画面卷轴,这样就增加了程序的难度,而且加卷轴对计算机的资源也进行了占用,会使游戏的运行速度受影响。对于美工方面则是加大了他们的工作量--在原有的场景上面,还要进行雪景的渲染。这时策划就要进行衡量:雨雪效果是否值得付出这样的代价来实现,实现了以后究竟能够提高多少游戏的可玩性。雨雪效果还是程序、美工都能实现的,如果有些游戏设计使程序和美工根本实现不了,那就更不用考虑了。
---------------------------------
3 各个部分的细化工作
在游戏大纲得到所有部门一致通过后,游戏就该进入全面制作的阶段了。
这时,策划的任务是在游戏大纲所描述的基础上,对游戏的各个部分进行细致的填充工作。这些工作针对游戏来讲,是比较烦琐和琐碎的工作,也是体现策划能力的地方。
还是以上述游戏为例子,根据大纲的设计,在游戏设计中要进行细化的方面有以下这些:
3.1 兵种:
对于已经设计好种类的兵种来说,现在的主要工作是进行兵种参数的设置工作而兵种的参数设定,直接影响的游戏的进行过程。
兵种的参数种类有:
归属:决定此兵种是否是由一家君主所独有,还是三方君主都可以制造。
生命力:决定此兵种的血格,间接影响到此兵种的制造时间。
攻击力:此兵种的对敌人的伤害能力。
防御力:此兵种对敌人攻击的抵抗能力。
附加攻击力:对付相克兵种的提升攻击力。
附加防御力:受到相克兵种的攻击是提升的防御力
产生建筑:由哪所建筑所生产出来。
射程:攻击范围有多大。
移动速度:在地图上进行行军时的速度。
攻击速度:进行攻击时的攻击频率。
需要资源数:需要耗费多少资源才能够生产出来,间接影响到生产速度。
对于美工的工作,还要总结出士兵的各种状态,以便美工进行设计。比如步兵的动画一共有11种:八个方向的行军动画、攻击动画、死亡动画、站立动画。
3.2 武器道具:
根据已经设定好的武器道具种类,进行武器道具的参数设置工作。
武器的参数种类有:
名称:武器要有一个合理的名称才能让游戏者接受,而且能够体现武器的等级
和价值。
种类:这种武器属于那一类的武器,什么武将可以装备。
攻击力:装备上此武器后,能够提高多少攻击力。
防御力:装备上此武器后,能够提高多少防御力。
特殊作用:是否还具备特殊的作用,比如使敌人中毒等。
价格:用多少钱可以购买得到。
道具的参数种类有:
名称:体现道具的作用和等级。比如小还丹是恢复体力的,而大还丹的作用比
小还丹要强。
使用方式:是使用还是佩带才能使道具发挥作用。
提升攻击力:是否能够提升攻击力,能够提升多少。
提升防御力:是否能够提升防御力,能够提升多少。
恢复生命力:是否能够恢复生命力,能够恢复多少。
伤害力:能够给敌人多少伤害。
特殊作用:是否有其他作用。比如让敌人中毒或关系到情节的发展。
作用范围:能够影响到多少对象,是单人的还是多人的。
价格:用多少钱可以买到。
备注:一些特殊的事情,比如这种道具有是否能重复使用。
3.3 地图
游戏的所有行动全部是在地图上进行的,对于地图,要规定的项目有:
地形的种类:有多少种地形。每种地形的是否可以通行。
地图的样子:地图上各种地形的分布,作战双方建筑的布局,资源的分布,双方初始兵力的对比--最好能够用简图的形式表现出来。
在游戏中,地图有"图素"的概念,即地图是由小单位的图片拼成的,这样可以极大程度上减少美工的工作量。大家注意一下《魔兽争霸2》和《红色警报》的地图编辑器,使用的就是图素拼接的方式。
地图设计举例--基本是魔兽争霸的地图方式:
地形图素分为两种大类型。一种以草原风光为主,主要色调为草绿色,以草地为主,没有较大面积石山,有较大面积的水。另一种以山区风光为主,主要色调较草原地区为暗,有较大面积石山,没有大面积的水。山石为带缓坡悬崖类,即从缓坡的方向可以登上,从悬崖方向不可攀登,要注意到高度的透视效果。
在草原类地形中,地形图素分为草地、土地、深水、浅水、竹林、山石、稻田、竹桩、稻茬。草地为基本图素,为可建筑地形。其它图素上不可建筑。草地及土地图素要有四种左右的变化,比如草的长短、碎石等不同的变化。
在山地类地形中,地形图素分为砂岩、砾石、深水、浅水、树木、山石、稻田、树桩、稻茬。砂岩为基本图素,为可建筑地形。其它图素上不可建筑。砂岩及砾石图素要有四种左右的变化,比如砾石的分布及形状等不同的变化。树木的图素与竹林要有差别。
在两大类型的地形基础上,改变调色板的颜色,做出雪景。
在两大类型的地形基础上,改变调色板的颜色,做出晨昏变化。
地图简图的绘制:
地图简图不要求多高明的绘画技巧--对地图进行润色是美工的工作,策划的任务是规定地图的样子。
3.4 动画
动画是游戏必不可少的组成部分,起到交代剧情、烘托气氛的作用。好的动画脚本应该是能够让游戏者在情绪上受到感染。比如《仙剑奇侠传》中的几个过场动画,一些欧美游戏的片头、结局等等。然而写出好的动画脚本非常的难,要求策划具有一定的镜头感觉和写电影脚本的能力。
下面是我为关羽之死写的一个动画脚本,并不成熟,只是作为例子而已。
关羽之死
(音乐起)[近镜头]一群东吴兵围住关羽,关羽的马倒下,被东吴兵擒获。
(切、马蹄声)[以较低的视角展示一片平原,]突然从迎面冲出一匹马,转瞬间冲过镜头,[镜头随即向后转180度],坐骑向画面纵深奔去。[镜头随即提高为远斜俯视],关索在一片广阔的原野向成都急奔,远方是一轮夕阳,坐骑后拖着一溜烟尘。
(切)关羽被士兵押入东吴的大殿,东吴群臣议论纷纷,孙权得意的坐在大殿的龙椅上。孙权挥了挥手,刽子手走出,簇拥着关羽向外走去。
(马蹄声、切)关索奔入成都城区,马突然倒下,关索摔倒,头盔飞出,徒步向宫殿跑去。
(切)关羽通过人群的夹道向刑台走去。(慢动作)
(切)成都大殿内景,群臣汇集,突然大殿的门打开,关索冲入,向刘备跪下
(切)关羽在刑台上,刽子手站在关羽身后。关羽缓缓环视着周围,然后慢慢低头。[镜头切换为关羽的主观视角]从面前的人群注视到地上的影子,刽子手的影子缓缓举刀,突然落下。一声锣响,镜头突然倾斜,然后变成一片血红。
(切)成都大殿中刘备站起,大叫"二弟",扑翻龙岸,倒下。众人围上。
游戏中,这样的剧本有很多,如果策划本人不具备剧本写作的经验和实力,还是请教专业人士比较好,或者与美工多进行交流。
3.5 计谋
计谋包括武将使用的必杀技和文官使用的计策,两者不尽相同。
对于计谋的描述应该由两方面组成,一方面是计谋画面效果的描述--方便美工进行绘制,一方面是其参数设定--方便程序进行设置。
见下文的例子:
锁喉枪 使枪武将的最基本的技法。
战场上使用:武器带光晕围绕自己身体周围盘旋一周,攻击围在自己身体周围的敌人士兵。用于身陷重围时使用。
单挑中使用:接近敌人武将时,武器带光晕击出,威力比重击要大。
断魂枪 使枪武将的中级技法。
战场上使用:枪挥出一个弧形的光波,呈直线飞出,贯穿整个战场。杀伤在飞行路线上的敌人。遇到建筑物和障碍时爆炸消失。
单挑中使用:在原位挥枪发出一个弧形的光波,呈直线飞向敌人武将。
断魂连环枪 使枪武将的高级技法。
战场上使用:枪挥出三个弧形的光波,平行呈直线飞出,贯穿整个战场。杀伤在飞行路线上的敌人。遇到建筑物和障碍时爆炸消失。
单挑中使用:在原位挥枪发出三个弧形的光波,呈直线飞向敌人武将。
豹突奔袭
马超的高级技法。
战场上使用:挥出豹子形状的光波,呈直线飞出。杀伤5格宽的直线飞行范围内的敌人。遇到建筑物和障碍时爆炸消失。
单挑时使用:挥出豹子形的光波,向敌人武将奔跑冲去。
煌华斩:夏侯渊的高级技法。
战场上使用:挥刀飞出球状光波,在空中分裂成25个,射向目标点的5*5范围。
单挑中使用:挥刀飞出球状光波,在空中分裂成9个,略微分出前后顺序击中敌人武将。
编号 名称 单挑攻击力 战场攻击范围 战场攻击力 体力 使用条件 武将
1 锁喉枪 50 1*8 40 50 LV1 普通
2 断魂枪 75 1*直线 60 75 LV5 普通
3 断魂连环枪 100 3*直线 80 100 LV10 普通
4 豹突奔袭 150 5*直线 120 150 LV20 马超
5 煌华斩 150 远点5*5 120 150 LV20 夏侯渊
将文字描述与表格结合起来,才是计谋的完整设计。
3.6 情节
情节是RPG部分的重点,牵扯到很多的问题,比如游戏的分支、事件的触发等。
情节包括故事流程和对话。表示除了用详细的文字进行说明之外,对故事流程还要有清楚明晰的流程图来表示,便于程序员进行编程。
举例而言:对于刘备去东吴招亲,我们可以做如下安排。
刘备娶亲的过程实际也是东吴政治集团与西蜀政治集团斗智斗力的过程。如何能够使刘备在重重危机之中不仅要娶到孙尚香,完成政治联姻;而且还要能够毫发无损的回到荆州。这对刘备集团是至关重要的事情,对于操纵刘备的游戏者来讲,如何解决一系列难题,使刘备能够如愿以偿,也是对游戏者的最大挑战。
游戏脚本节选:东吴招亲:吕范求见部分刘备与诸葛亮对话
[画面]:
地 点:刘备官邸 时间:中午
场 景:房屋内景。地上铺着简单的装饰性地毯,墙上挂着几幅字画和刘备的双股剑。屋子靠内的地方铺陈着一张方毯,方毯上有一张条案,条案后摆放着一张虎距山峰的屏风。
人 物:刘备、诸葛亮、吕范、小童
(刘备与诸葛亮坐在条案旁)
刘 备:(眉头紧锁)东吴数次遣使索讨荆州,纵是前番立下文书,又由子敬作保,恐只是一时权宜之计,若其再来索讨,如之奈何?
诸 葛 亮:主公请放宽心,东吴再遣使来讨时,亮自有良策应对。
(门开,小童入,跪禀)
小 童:报--!东吴使者吕范自江东而来,有要事求见主公。
刘 备:(惊,向小童立起)什么?
诸 葛 亮:(刘备转向诸葛亮)(诸葛亮笑)此乃周瑜之计,必为荆州之故。亮只在屏风后潜听。但有甚说话,主公都应承了。留来人在馆驿中安歇,别做商议。
刘 备:(转向小童)请东吴来使进见。
小 童:是!
(小童躬身退出,诸葛亮起立,走入屏风后{能看见身影})
附分支图:详见本光盘TXT目录下的machinate.doc 文件.
由于原来的游戏流程叙述太长,而且与现在的理论联系不是很大,所以只是节选举例而已,使大家能够明白游戏情节部分的制作内容就可以了。
除去游戏中情节必须的大段对话以外,还有一些起到补充作用的对话,比如在街道上和NPC进行无关紧要的对话。这样的对话一般不用过于细致的制作,但是如果有精力,最好能够下一些工夫。比如在对话中交代游戏背景故事、体现当时当地的风土人情、告诉游戏者一些游戏的提示等。
3.7 界面
界面部分就屏幕上各个图象文字的有机构成。好的界面直观、清晰明了、有亲切感、便于游戏者操作。界面一般由菜单、图标组成。对于界面的设计,一定要将游戏中所有的功能在菜单上完全显示出来,因为游戏者要通过对的操作来进行游戏,所以界面的设计文档一定要尽量全面。
游戏菜单一览(部分)
一 开始菜单
(一) 开始游戏
(二) 读取进度:
出现进度列表,共6栏。还有"确定"与"取消"键。
(三) 训练任务
进入游戏训练模式,进行游戏基本操作的训练。
(四) 动画重放
出现游戏中所有动画片段的名称。游戏者可以选取游戏中所有的CG片段进行回顾。只有在游戏者进行过相关内容的游戏后才可以选取相应的动画。否则该选项为不能选取状态。
(五) 退出游戏
二 战略层界面
(一) 没有点取任何单元时,屏幕上应有当前关的资料。
⒈ 金、木、粮的数目;
⒉ 当前的天气状况:包括风、雨、雪、晴等;
⒊ 主菜单按钮。
⑴ 存贮进度:6栏,确定、取消
⑵ 读取进度:6栏,确定、取消
⑶ 系统选单:调节游戏速度;音乐、音效音量;屏幕亮度等相关系统选项。
⑷ 该任务关任务说明:
⑸ 返回游戏
⑹ 退出游戏
⒋ 查询按钮
⑴ 部队情况按钮
将领名称、当前状况(行军、埋伏……)、部队人数。
点击部队可以直接切入到该部队画面。
如果部队在城中,就切入到城中。
如果部队在地图上,就切入以该部队为中心的地图
如果部队在资源点,切入到资源点
如果部队埋伏,切入到埋伏地点。
⑵ 资源点状况按钮
资源点类别、资源数。
点击资源点可以直接切入到资源点中。
⑶ 武将状况按钮
武将的姓名、等级、武力、智力、详细情况按钮--出现武将头像、等级、经验值、武力、智力、生命力、体力、装备、道具、小传。
点击武将可以切入到武将所在位置。
⑷ 返回按钮
(二) 点取资源点
⒈ 显示资源点资源数
⒉ 命令按钮
⑴ 进入资源点
⑵ 命令部队停止采集,撤退。
(三)点取渡口
⒈ 显示渡口状态
⒉ 命令按钮
⑴ 进入渡口进行建设
⑵ 命令水军部队出渡口--显示水军列表。
(四)点取作战部队
⒈ 显示部队状况
包括武将头像、姓名、等级、经验值、武力、智力、生命力、体力、部队人数
⒉ 命令按钮
⑴ 行军:
⑵ 攻击:
⑶ 停止:
⑷ 埋伏:
⑸ 计策:各个武将的计策种类不一样。
① 火计:
② 加速:
③ 部队及武将生命力恢复:
④ 落石:
⑤ 落雷:
⑥ 火龙:
⑦ 水攻:
⑧ 疑兵:
⑨ 假令:
⑩ 远视:
⑹ 道具:出现武将自己携带的道具选单
⑺ 扎营:
⑻ 阵形:9个阵。
(五)点取敌人的所有地点
⒈ 显示地点状况
(六)点取视野内敌人部队
⒈ 显示敌人部队状况
包括武将头像、等级、经验值、武力、智力、生命力、体力、部队人数。
三 战斗战场层界面
(一) 没有点取任何单元时
⒈ 显示作战基本资料。
包括武将头像、姓名、等级、经验值、武力、智力、生命力、体力、装备、部队人数。
⒉ 命令按钮:
武将切换:可以在我方武将之间互相切换。(在出现增援部队以后)
(二)点取武将(代表整支部队)
⒈ 显示资料
包括武将头像、姓名、等级、经验值、武力、智力、生命力、体力、装备、部队人数。
⒉ 命令按钮
⑴ 行军:使整支部队保持阵形移动到指定的位置。
⑵ 攻击:让整支部队攻击指定的目标。
⑶ 阵形:转变部队的阵形。
⑷ 警戒移动:使整支部队保持阵形移动到指定的位置。但在移动过程中如果攻击范围内出现敌人,部队将开始攻击。
⑸ 突击:整支部队散开队形,攻击向离自己最近的敌人部队,相当于托管。
⑹ 结阵:所有部队以武将为中心重新集结成阵形。
⑺ 停止:所有部队停止动作,原地停下。
⑻ 呼叫:呼叫增援部队。增援部队必须在战略地图上离战斗发生地点距离不超过三格。
(三)点取建筑(如果战场中有建筑的话)
⒈ 显示资料
包括建筑名称、牢固度、射程、攻击力等。
(四)点取敌人武将
⒈ 显示资料
包括包括武将头像、等级、经验值、武力、智力、生命力、体力、部队人数。
(五)点取敌人作战单位
⒈ 显示资料
单位的攻击力、防御力、射程、生命力……
四 建设战场层界面
(一) 未点击任何单元时
⒈ 显示基本资料:
资源数
⒉ 命令按钮:
⑴ 建设主帅帐(4*4):初级建筑。
⑵ 建设兵营(3*3):初级建筑。
⑶ 建设木材场(3*3):初级建筑。
⑷ 建设马厩(3*3):二级建筑。
⑸ 建设特殊训练营(3*3):二级建筑。
⑹ 建设工匠所(3*3):三级建筑。
⑺ 建设水寨(3*3):初级建筑。
⑻ 建设粮仓(3*3):初级建筑。
⑼ 建设箭楼(2*2):初级建筑。
⑽ 建设陷阱(1*1):
⑾ 建设鹿砦(1*1):
⑿ 建设桥梁(2*2):
⒀ 建设草堆(2*2):
(二) 点击主帅帐
⒈ 显示资料
包括攻击力、防御力、射程、牢固度等
⒉ 命令图标:
⑴ 生产工人
(三)点击兵营
⒈ 显示资料
⒉ 命令图标
⑴ 生产藤牌手
⑵ 生产长枪手
⑶ 生产弓箭手
⑷ 生产骑兵
⑸ 生产重骑兵
⑹ 生产投石车
(四)点取武将(代表整支部队)
⒈ 显示资料
包括武将头像、姓名、等级、经验值、武力、智力、生命力、体力、装备、部队人数。
⒉ 命令按钮
⑴ 行军:使整支部队保持阵形移动到指定的位置。
⑵ 攻击:让整支部队攻击指定的目标。
⑶ 阵形:转变部队的阵形。
⑷ 警戒移动:使整支部队保持阵形移动到指定的位置。但在移动过程中如果攻击范围内出现敌人,部队将开始攻击。
⑸ 突击:整支部队散开队形,攻击向离自己最近的敌人部队,相当于托管。
⑹ 结阵:所有部队以武将为中心重新集结成阵形。
⑺ 停止:所有部队停止动作,原地停下。
五 场景层界面
(一) 进入道具屋
⒈ 道具列表:名称、作用、价格……
⒉ 命令按钮:
⑴ 购买:
⑵ 出售:
⑶ 道具传递:
⑷ 退出:
(二) 进入武器屋
⒈ 武器列表:
⒉ 命令按钮:
⑴ 购买:
⑵ 出售:
⑶ 武器传递:
⑷ 退出:
六 单挑层界面
(一) 时间槽:红、黄、绿、闪光
(二) 道具按钮:
(三) 攻击按钮:
(四) 武将技按钮:
(五) 撤退按钮:
七 其他
(一) 选择话框
(二)对话确定
(三) 胜利画面:
(四) 失败画面:
(五) 读盘画面:
以上菜单设计文档并不完全,只是举个大概的例子而已。在设计界面的时候还要注意尽量摆脱传统的文字菜单模式,多采用图象化菜单。
(八)建筑物
建筑物的设计主要是在规定建筑物功能、设定建筑物参数、设定建筑物之间相互关系上。大家如果玩过《C&C》或《魔兽争霸2》的话,应该还记得它们并不是上来就把所有你能建造的建筑全部都显示出来,而是随着游戏的进行,当你建造了一些基本建筑后,一些高级的建筑才允许你修建。这就是建筑物之间的相互关系。而建筑物的参数决定了建筑物的建造时间等必要属性。
属性列表(节选)
名称 牢固度 防御力 攻击力 射程 木 钱 占地 建造条件
帅帐 1500 5 0 400 1200 4*4
马厩 1000 5 0 300 1000 3*3 兵营
工匠所 1000 5 0 400 800 3*3 马厩
兵营 800 5 0 300 800 3*3
箭楼 500 5 40 20 250 500 2*2
(九)武将
武将是游戏的灵魂,所有事件、故事都是围绕着武将展开的,所有的战斗都是由武将来带领的。对于武将的详细设计是武将的参数、根据情节中武将出现的需求归纳武将的表情肖像种类等。
武将参数设计举例(节选)
编号 武将名 智力 武力 类型 形象 头像 武器
1 刘备 85 90 武将 有 有 1剑
2 关羽 88 140 武将 有 有 2刀
3 张飞 45 145 武将 有 有 3枪
4 赵云 95 150 武将 有 有 3枪
5 马超 60 145 武将 有 有 3枪
6 黄忠 80 135 武将 有 有 4弓
7 诸葛亮 150 80 谋士 有 有 1
8 庞统 145 40 谋士 有 1
9 魏延 70 135 武将 有 2
10 马岱 65 120 武将 2
11 糜竺 70 30 谋士 1
12 刘封 50 70 武将 3
13 马良 100 36 谋士 1
14 马谡 80 80 谋士 1
15 李恢 90 50 谋士 1
16 关平 70 100 武将 有 2
17 周仓 40 100 武将 有 2
武将表情统计举例(节选)
编号 武将名 头像种类
1 刘备 喜悦、愤怒、惊讶
2 关羽 喜悦、愤怒、惊讶
3 张飞 喜悦、愤怒、惊讶
16 刘封 惊讶
(十)阵型
阵型是中国古代作战的一种艺术,因此在体现中国古代战争的游戏中通常要用到,可以说是体现了中国古代战争的精髓。
五行梅花阵
此阵型为三级阵.十五名士兵按1,6,11;2,7,12… …的号码分为五组.1,6,11;2,7,12;3,8,13;位置的近程攻击力1.2,远程攻击力0.9,近程防御力1.3,远程防御力0.9.其余位置远程攻击力1.2,近程攻击力0.9,远程防御力1.3,近程防御力0.9.
兵种顺序:
骑兵:1、6、11、2、7、12、3、8、13、其它
步兵:1、6、11、2、7、12、3、8、13、其它
弓兵:其它、1、6、11、2、7、12、3、8、13
车兵:其它、1、6、11、2、7、12、3、8、13
云梯:其它、1、6、11、2、7、12、3、8、13
大舰:其它、1、6、11、2、7、12、3、8、13
小舰:其它、1、6、11、2、7、12、3、8、13
登陆舰:1、6、11、2、7、12、3、8、13、其它
上图是《三国演义--赤壁》中阵型的设计图。在设计上,将15名士兵围绕主将(A的位置)排成规则的形状,每名士兵站的位置直接影响到他的攻击力和防御力,阵型之间的参数还有相互克制的联系。对于士兵们的自动排阵,还给出了其优先的站位,便于他发挥自己的作用。此外,由于阵型有8个方向,程序还要需要其他方向阵型坐标的转换关系,这也需要策划写明。
(十一)智能
智能即大家所说的"AI",指计算机能够模拟人的智能对游戏者的操作进行反应。在即时战略游戏中,这是非常重要的一个组成部分。即时战略游戏的趣味性很大程度上取决于计算机的反应是否合理,因此一定要对这部分高度的重视。人工智能的设定是先由策划给出总结好的游戏中所有可能出现的情况以及计算机应有的反应,再由程序员进行归纳,然后用程序实现。
在《赤壁》中,策略分三个层次--本能策略、将领策略、君主策略。君主策略指挥将领策略、将领策略指挥本能策略。下面举出本能策略的文档做例子:
赤壁部队本能策略
一 共同准则
所有部队执行行动的顺序如下:首先是控制者所下的命令应马上执行;其次是当自身受到攻击时的反击反应(不同部队有不同的反应);第三为当本组队其他成员或处于自身视野中的己方建筑受到攻击时应采取的支援反应(不同部队有不同的反应);第四为当敌人处于攻击距离内应做出的攻击反应(有反击能力的敌人优先,具体顺序见下文)。
举例来讲,当一支步兵作为一组队的成员之一,他首先应执行的是控制者所下的命令(无论这命令是下达给组队或他个人),如移动、攻击、阵型等;只有当他执行完控制者所下的命令后,如受到敌人的攻击才可以采取反击行为;只有当他执行完控制者所下的命令且自身未受到敌人的攻击时,当本组队其他成员或处于自身视野中的己方建筑受到攻击时,他才应采取支援反应;只有在前三种情况都未发生时,他才可以对攻击距离内的敌人进行攻击行动。
二 兵种行动规则
(一)工人
1:在执行移动命令时:除接受新命令外无论遇到什么情况,都应继续执行命令。
2:在执行生产性命令(木材、金钱、铁矿、修复)时:
1) 受到新命令,应马上执行。
2) 受到敌人攻击,应停止正在进行的行动采取躲避行动。躲避后,原地待命。
3)资源如开采完(包括修复),则在原地待命。
3:原地待命中:
1)受到新命令,应马上执行。
2)未受到命令而受到攻击,采取躲避行动。
(二) 步兵
1:在执行命令时,除接受新命令以外,应一直执行。比如攻击,就要把目标完
全摧毁。如敌人躲避,在未接到新命令之前应"天涯追杀",直到将目标杀
死。执行命令完毕后,在原地待命。
2:在原地待命中:
1)受到新命令,应马上执行。
2)未受到新命令,而自身受到攻击,应向敌人反击。如敌人躲避,应一直追杀。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应采取支援
攻击。如敌人躲避,应一直追杀。
4) 未受到新命令且本组队成员全未受到攻击,而自身视野内有建筑受到攻击,
应采取支援攻击。如敌人躲避,应一直追杀。
5) 上述情况全未发生时,对出现在自身攻击距离内的敌人自动进行攻击,但不
追击。
3:支援组队成员中:
1)受到新命令,应马上执行。
2) 未受到新命令,而自身受到攻击,应停止支援向敌人反击。如敌人躲避,应一直追杀。
4:支援建筑中:
1)受到新命令,应马上执行。
2) 未受到新命令,而自身受到攻击,应停止支援向敌人反击。如敌人躲避,应
一直追杀。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应停止支援建筑而采取支援队员攻击。如敌人躲避,应一直追杀。
5:自动攻击中:发生上述任何情况,都应停止自动攻击而采取反应。
(三)骑兵
1:在执行命令时,除接受新命令以外,应一直执行。比如攻击,就要把目标完
全摧毁。如敌人躲避,在未接到新命令之前应"天涯追杀",直到将目标杀
死。执行命令完毕后,在原地待命。
2:在原地待命中:
1)受到新命令,应马上执行。
2)未受到新命令,而自身受到攻击,应向敌人反击。如敌人躲避,应一直追杀。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应采取支援
攻击。如敌人躲避,应一直追杀。
4) 未受到新命令且本组队成员全未受到攻击,而自身视野内有建筑受到攻击,
应采取支援攻击。如敌人躲避,应一直追杀。
5) 上述情况全未发生时,对出现在自身攻击距离内的敌人自动进行攻击,但不
追击。
3:支援组队成员中:
1)受到新命令,应马上执行。
2) 未受到新命令,而自身受到攻击,应停止支援向敌人反击。如敌人躲避,应一直追杀。
4:支援建筑中:
1)受到新命令,应马上执行。
2) 未受到新命令,而自身受到攻击,应停止支援向敌人反击。如敌人躲避,应
一直追杀。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应停止支援建筑而采取支援队员攻击。如敌人躲避,应一直追杀。
5:自动攻击中:发生上述任何情况,都应停止自动攻击而采取反应。
(四) 弓兵
1:在执行命令时,除接受新命令以外,应一直执行。比如攻击,就要把目标完
全摧毁。如敌人躲避,在未接到新命令之前应"天涯追杀",直到将目标杀
死。执行命令完毕后,在原地待命。
2:在原地待命中:
1)受到新命令,应马上执行。
2)未受到新命令,而自身受到攻击,应向敌人反击。如敌人躲避,应一直追杀。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应采取支援
攻击。如敌人躲避,应一直追杀。
4) 未受到新命令且本组队成员全未受到攻击,而自身视野内有建筑受到攻击,
应采取支援攻击。如敌人躲避,应一直追杀。
5) 上述情况全未发生时,对出现在自身攻击距离内的敌人自动进行攻击,但不
追击。
3:支援组队成员中:
1)受到新命令,应马上执行。
2) 未受到新命令,而自身受到攻击,应停止支援向敌人反击。如敌人躲避,应一直追杀。
4:支援建筑中:
1)受到新命令,应马上执行。
2) 未受到新命令,而自身受到攻击,应停止支援向敌人反击。如敌人躲避,应
一直追杀。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应停止支援建筑而采取支援队员攻击。如敌人躲避,应一直追杀。
5:自动攻击中:发生上述任何情况,都应停止自动攻击而采取反应。
(五)车兵
1:在执行命令时,除接受新命令以外,应一直执行。比如攻击,就要把目标完
全摧毁。如敌人躲避,在未接到新命令之前应"天涯追杀",直到将目标杀
死。执行命令完毕后,在原地待命。
2:在原地待命中:
1)受到新命令,应马上执行。
2)未受到新命令,而自身受到攻击,应向敌人反击。如敌人躲避,应一直追杀。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应采取支援
攻击。如敌人躲避,应一直追杀。
4) 未受到新命令且本组队成员全未受到攻击,而自身视野内有建筑受到攻击,
应采取支援攻击。如敌人躲避,应一直追杀。
5) 上述情况全未发生时,对出现在自身攻击距离内的敌人自动进行攻击,但不
追击。
3:支援组队成员中:
1)受到新命令,应马上执行。
2) 未受到新命令,而自身受到攻击,应停止支援向敌人反击。如敌人躲避,应一直追杀。
4:支援建筑中:
1)受到新命令,应马上执行。
2) 未受到新命令,而自身受到攻击,应停止支援向敌人反击。如敌人躲避,应
一直追杀。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应停止支援建筑而采取支援队员攻击。如敌人躲避,应一直追杀。
5:自动攻击中:发生上述任何情况,都应停止自动攻击而采取反应。
(六) 舰船
1:在执行命令时,除接受新命令以外,应一直执行。比如攻击,就要把目标完
全摧毁。如敌人躲避,在未接到新命令之前应"天涯追杀",直到将目标杀
死。执行命令完毕后,在原地待命。
2:在原地待命中:
1)受到新命令,应马上执行。
2)未受到新命令,而自身受到攻击,应向敌人反击。如敌人躲避,应一直追杀。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应采取支援
攻击。如敌人躲避,应一直追杀。
4) 未受到新命令且本组队成员全未受到攻击,而自身视野内有建筑受到攻击,
应采取支援攻击。如敌人躲避,应一直追杀。
5) 上述情况全未发生时,对出现在自身攻击距离内的敌人自动进行攻击,但不
追击。
3:支援组队成员中:
1)受到新命令,应马上执行。
2) 未受到新命令,而自身受到攻击,应停止支援向敌人反击。如敌人躲避,应一直追杀。
4:支援建筑中:
1)受到新命令,应马上执行。
2) 未受到新命令,而自身受到攻击,应停止支援向敌人反击。如敌人躲避,应
一直追杀。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应停止支援建筑而采取支援队员攻击。如敌人躲避,应一直追杀。
5:自动攻击中:发生上述任何情况,都应停止自动攻击而采取反应。
(七) 平民
受攻击应躲避。
(八)云梯
1:在执行命令时,除接受新命令以外,应一直执行。执行完毕后在原地待命。
2:在原地待命中:
1)受到新命令,应马上执行。
2)未受到新命令,而自身受到攻击,应躲避。
3) 未受到新命令且自身未受到攻击,而本组队其他队员受到攻击,应执行原命令。
三 自动攻击顺序
对于在攻击距离内的目标,应按敌士兵──敌箭楼──敌工人──敌大本营──敌其他建筑的顺序来自动攻击。
对于弓兵和车兵,在敌士兵中应先攻击距离近的。在距离一样的情况下才按以下顺序攻击:骑兵──车兵──步兵──弓兵(武将兵种按骑兵计)。
对于步兵和骑兵,由于攻击距离为1,则直接按上述兵种顺序攻击。
如敌人同兵种且距离一样,则首先攻击敌人体力低者。如敌人同兵种且距离还有体力都一样,那就随机攻击其中一个。
四 主动攻击顺序
当控制者指挥部队去攻击敌武将时,本组队不应只攻击敌武将一人,而是连敌武将所率的组队一起攻击。
对于步兵、骑兵,当他们接到攻击命令向敌武将前进时,在前进途中如有敌武将所率组队的成员进入攻击范围,则应立即对其开始攻击。将其杀死后才可继续向敌武将前进。
对于弓兵和车兵,当他们接到攻击命令向敌武将前进时,在前进途中如有敌武将所率组队的成员进入攻击范围,则应立即对其开始攻击。将其杀死后才可继续向敌武将前进。当他们接到攻击命令时敌武将已经在攻击范围之内,与此同时,攻击范围内还有敌武将所率组队的成员,则应先攻击距离近的,在距离一样的情况下才按以下顺序攻击:骑兵──车兵──步兵──弓兵。
君主AI和将领AI过于复杂,有兴趣者可以自行查阅相关文档,在此不再举例了。
(十二)说明书及帮助
在游戏基本完成时,为了帮助用户迅速方便的掌握游戏方法和规则,游戏策划还要进行游戏说明书和帮助文档的撰写工作。具体文档请参阅说明书的文档部分--直接找一份《赤壁》的说明书来翻阅一下也可以。要注意的一点是:说明书的内容一定要涵盖整个游戏,而且要做到简单易懂,周详细致。策划者要知道游戏者在接触你的游戏之前,实际上对此游戏是一无所知的,而且可能许多游戏者是第一次接触该类型的游戏甚至是第一次接触游戏,所以一定要将游戏方方面面的内容详细地进行说明,不能有觉得"这是大家都知道的问题,不用进行说明了"的想法。
三 游戏的测试和参数调整
在美术工作和程序工作基本进行到尾声的时候,策划就该开始进行游戏的测试和参数调整工作了。
(一) 游戏的测试工作
任何一款游戏在制作过程中都会有BUGS,无论是出名的大公司还是小公司,而且游戏结构越复杂可能出现BUG的情况就越多。BUG的出现可能是由于程序员的程序编制,也可能是由于策划的设计问题,或者是因为美工的一时疏忽--不管是因为什么原因,策划在进行测试工作时,要尽量把这些问题全部解决--不能留到上市以后让游戏者去发现。可是尽管做了大量的测试工作,有时难免还会有一些BUGS没有消掉,造成游戏上市以后出现问题,这时就需要发行游戏的补丁程序--PATCH。
游戏测试在发现BUGS以后,要及时和程序以及美工进行反馈,由他们进行修改工作,修改完成后,再进行测试,确定问题得到了解决。如此反复进行,直到没有明显的问题为止。
在进行测试时,游戏策划不能按照自己原先设计的思路来进行游戏,由于游戏是自己设计的,所以很容易的就会按照正确的行进路线进行,但是游戏者在不知到你游戏思路的情况下,不会按部就班的完全按照你的设计思路来进行游戏,在这种情况下极其容易发生问题--尤其是在RPG游戏中。比如你设计游戏者应该从旅馆出发,找到智者寻求帮助,然后去山洞击败大魔王。如果游戏者先去山洞与大魔王战斗,然后再去找智者,这就做就脱离了你的设计思路。所以首先从设计上要完全封死游戏者这样做的可能--他不见智者就不让他进山洞,这样严格的规定了游戏者前进的路线。如果你当初在设计上没有设计周全,而且在测试时又是一直按照你自己的设计思路在进行的话,就会产生问题--轻者造成游戏的进程不合情理(游戏者在杀了魔王以后见智者,智者要求他再杀一次);严重些造成游戏难以进行下去;最严重会导致游戏死机。所以策划在进行测试时,一定要跳出自己的思路,站在一个玩家的角度来进行游戏。
如果有条件的话,还是多找一些玩家,协助进行测试工作比较稳妥。
(二)游戏的参数调整工作
上文已经说过,在即时战略游戏中,兵种与兵种之间、兵种与建筑物之间、计策与兵种之间、计策与计策之间都存在着平衡关系。而这种平衡关系主要靠参数来进行调整。参数部分的不合理,会导致影响游戏的可玩性。
举个很简单的例子--步兵攻击力为5,造价为100金;骑兵攻击力为10,造价200金--这样的设定就比较合理。如果骑兵攻击力30,造价50金,这样的价廉物美,就不合理了。而且参数不是就两项这么简单,具体到游戏中,还有移动速度、生命力、建造时间等等其他因素的制约。一般可以有一个兵种的参数作为标准,其他所有兵种的参数在与它做比较的基础上设定,这样容易做到合理。
还有其他的平衡关系--远程兵种、进程兵种与防御性建筑之间的相互克制;兵种与兵种之间的相互克制。拿《魔兽争霸2》来举例:敌人的步兵在进攻时,如果你的基地有箭楼,就可以非常有效的抑制住敌人的攻势,两个箭楼大概可以抵挡敌人6个步兵;但是敌人只要出动一辆投石车,就可以在箭楼的射程之外,毫发无损地将箭楼全部拆光;这时如果你也有步兵,只要有两个,就可以接近投石车,将敌人的投石车劈碎。所以一般在进攻时,都是组织起混编部队--用投石车进攻敌人的箭楼,以步兵在投石车周围做掩护,在敌人的箭楼全部倒塌之后,步兵再冲入敌人的基地进行冲锋。这样在战略战术上就有了变化。从游戏的设计角度来讲,如果有基地防御性建筑,将可以造成远程攻击兵种-炮塔-近程攻击兵种之间犹如石头、剪子、布的三角型相互克制关系。即远程攻击兵种可以利用射程上的优势使基地防御建筑没有还手之力;基地防御建筑可以发挥强大的火力和可修复性使近程攻击部队难以靠近;而近程攻击部队打移动缓慢、射速极低的远程攻击部队不费吹灰之力。这样就有一个兵种之间的作战配合与搭配问题。如果游戏者能做到战术合理,就可以用极小的代价换取最大的胜利;如果指挥失当,就会以极大的代价换取一败涂地。
如果没有了基地防御建筑而全部用部队进行防御,就使游戏者每次进攻敌人的基地只有采用强攻战术。虽然游戏中兵种之间也可能会有有互相克制的关系,但在即时战略游戏中,不能象战棋游戏中那样非常方便的指挥自己的优势兵种攻击敌人的劣势兵种,使得每次试图运用战术的结果都是变成一场大火拼。比双方人数、比装备优劣,就是不比进攻战术。
至于兵种之间的相互克制关系,在《魔兽争霸2》中,体现在陆、海、空三军之间的互相制约。龙能够不受地形限制的进行移动,也可以攻击毫无还手之力的剑士和重巡洋舰,但是陆军中的弓箭手和海军中的炮舰都可以对龙进行攻击,而且龙的造价非常昂贵;海军中的重巡洋舰威力强大,但是移动速度慢,而且潜艇和龙能够使它毫无还手之力,为了保护自己,它一般要在空军的掩护下行动;陆军的食人魔行动速度快,攻击力强,但是对空军和海军根本造不成威胁……如果能够使兵种之间合理的有相互克制又相辅相成的话,这款战略游戏就接近成功了
四 配乐和配音
不要小看配乐和配音的工作,在游戏中它们也是关系到游戏成败的因素之一。
一曲与场景、画面配合得恰如其分的音乐,可以使游戏增色不少。大家看过《仙剑奇侠传》的片头吗?在悠扬清幽的乐曲声中,一队仙鹤在缓缓地飞入一片莽莽青山,使人有如登仙境的感觉;在《Street Fighter》系列中,每一名斗士都有符合自己民族背景的音乐,时而舒缓时而激昂,甚至在音乐厅进行了一场《街头霸王》系列音乐的音乐会,由著名交响乐团进行演奏。
而配音,可以使游戏中人物的个性更为鲜明突出。在日本,专门有一批人是专门为动画片和游戏做配音工作的,叫做"声优",他们塑造了很多栩栩如生、极具个性的游戏人物。就连在《魔兽争霸2》中,不同的士兵的声音也是不一样的,而且时不时的还有些出人意料的话。比如双头食人魔,游戏中你一点它,它就打个嗝,然后两个头就互相推卸:"是他干的。""不,是他干的"。或者"卟--"的一声放个屁,然后两个头就共同得意的"呵呵"笑了起来--非常的有意思。
策划的工作一方面是要将游戏中所有要出现的音乐和音效全部统计出种类和数量来,便于配乐和配音的工作人员进行工作;另一方面要从风格和效果上对配乐和配音的质量进行审核,确保配乐和配音与游戏的整体风格一致。
五 广告和市场
在这一部分工作中,基本就没有游戏策划的工作了。充其量是配合广告部门和市场部门进行一下宣传工作,做一些文字上的宣传和介绍。主要的工作精力应该放在下一部游戏的思考和立项工作上。
以上就是游戏策划在一部游戏中应该做的工作。
---------------------------------
4 游戏策划应该具备的基本素质
综上所述,游戏策划实际上是一个需要相当素质的职业,它工作中所包含的内容是极其庞杂的。做为一名好的游戏策划或者说是合格的游戏策划,我认为他至少应该具备以下的素质:
4.1 对市场敏锐的洞察力
游戏是一种特殊的商品。虽然它具有艺术性、娱乐性和高科技性,被称为"第九艺术",但究其本质,它终归是要推向市场,成为商品进行流通的。而公司投资进行游戏开发的目的,也不是单纯的为了弘扬民族文化和为国产软件业做贡献--最大的目的是要通过出售游戏,回收资金并获取利润、提高企业的知名度,也只有这样,企业才能够进入良性循环。作为个人来讲,你也肯定不会希望只制作了一款游戏,然后因为收不回成本,而导致公司亏损倒闭或对游戏制作失去兴趣而停止游戏的继续开发工作。所以,一定要把游戏的制作与市场因素紧密的连接在一起。
在进行设计游戏之前,一定要考虑你所设计的游戏是针对那些年龄层的玩家: 考虑针对那些水平的玩家;考虑你的游戏需要多高的计算机配置,这种配置是否符合当前的消费水平;考虑这种类型的游戏是否有流行的可能;考虑这款游戏是否能够有一些有利于市场的因素--比如用金庸小说来改编游戏,由于金庸小说的读者群庞大,就使游戏在先天上占据了优势;你的游戏能否有和硬件厂商合作进行开发的可能--但是与硬件厂商合作,就意味着你的游戏一般会脱离当前流行的机器配置,而采用比较超前的硬件需求。
而且,游戏策划一定要关注当前国际游戏市场上倍受好评的游戏,尤其是采用了新构思的游戏或者是新类型的游戏。比如国外市场在《C&C》推出以后,犹如雨后春笋般在半年之内突然出现了许多类似的即时战略游戏。有人将这种现象解释为国外游戏制作公司的创意匮乏,我倒觉得不然。国外公司一窝蜂的上马即时战略游戏是他们把握好了市场脉搏的体现。一款新类型游戏的推出,如果成功,肯定会带来巨大的市场效应。而始创公司又不可能在短短时间内推出后续产品,这就留下了一个市场空白。面对大批喜欢这种游戏类型而又难以见到新游戏的爱好者,如果赶紧推出同类产品,就能够抢占市场。跟风跟得紧,跟得巧,同样会收到市场的回报。"第一个拿花比喻女人的是天才,第二个是蠢材。"可女人就喜欢被比喻成花,你用土豆或莴笋比喻一下试试?当然,即时战略游戏泛滥成目前的程度,就是问题了。就象目前国内的VCD品牌大战,市场饱和以后就烽烟四起。于是即时战略就演变成"鸡屎"战略游戏,再不求突破,肯定最后剩下的赢家会是大公司--BLIZZARD、WEST WOOD等等。现在SSI公司没再出即时战略吧?见好就收才对。只有微软这样财大气粗的才敢硬碰硬和BLIZZARD、WEST WOOD生拼,还有就是一些试图创出名堂的小公司在进行押宝性的开发。
4.2 要能够充分了解玩家的心理
游戏是要让玩家来玩的,玩家对你的游戏接受与否,决定了你的游戏的成功或失败。所以游戏策划在进行游戏的设计工作时,一定要把玩家的心态作为一项重要的因素来进行考虑。在你所设计的游戏中,什么是玩家乐于接受的,什么是玩家难以接受的,你要心中有数。比如在传统的RPG游戏中,没完没了踩地雷似的战斗、让人转得晕头转向的迷宫都是经常受到玩家指责的游戏设计方式。如果你作为游戏设计者,依然不顾及到玩家的意见,而继续在自己所设计的游戏中采用游戏者难以接受的游戏设计方式,那么你所设计的游戏的成功可能性就会大大降低。
在国外的一些公司,当他们的游戏在设计阶段,就会将部分设计方案向社会公开,征求广大玩家对其设计放案的意见,并根据大部分玩家的统一意见修改游戏设计方案。比如日本一家公司,前一段时间就公开了女主人公的不同设计方案,让玩家们投票选举出最符合自己审美观的一种。实际上这种做法也是游戏广告手法的一种,借此扩大游戏的影响,提高游戏的受关注程度。
4.3 对游戏其他部门的工作有所了解
什么样的游戏才能算是好游戏?评价一个游戏好坏的标准是什么?制作人员们常把一个词挂在嘴边上:"游戏性"。一个游戏好不好,极大程度上取决于其游戏性的好坏。
再细致讨论起来,游戏性又是什么?这时答案就不那么统一了。一般来讲,大家都会将游戏性和策划的工作联系在一起,认为策划决定了游戏性。这种观点不完全对。游戏性并不仅仅只是指游戏系统的好坏。我个人认为所谓游戏性,是一个游戏在各个方面表现的总体综合值,其中包括了游戏策划、游戏脚本、程序、美工、音乐、音效等等。一款出色的游戏往往在各个方面都有不俗的表现。
如果将一个游戏比喻成一个人,那么美术将是这个人的外表;程序相当于这个人的身体机能;策划相当于这个人的内涵。首先我们先假设生活中的一个场面。在一个聚会上,你环顾四周,突然,一个穿着适宜、容貌漂亮的女孩(女读者把女孩换成一个高大英俊的男孩好了)映入了你的眼帘。你立即被她所吸引,决定结识她。你向她走过去,进行了幽默文雅的自我介绍。她一双大眼睛注视着你,被你的话表示感兴趣。含着笑和你开始了交谈。随着交谈的不断深入,你发现她不仅是单身、外貌漂亮,而且还心地善良、善解人意、和你有着共同的爱好……在这个愉快的聚会结束时,你发现你居然已经悄悄爱上了这个女孩……(有些象廉价爱情小说的情节)大家难以理解这个例子吗?那么下面换个方式再叙述一遍:在一个软件商店中,许多电脑在不停的演示着各种游戏。你环顾四周,突然,一个屏幕上的画面映入了你的眼帘。你立即被那种亮丽细腻、出色的光影效果所吸引,决定试玩一下。你向计算机走过去,开始了试玩。操作感出奇的流畅、速度简直象在奔腾2上运行四则运算,而且根本没有Bug的出现。随着游戏进程的不断深入,你发现这款游戏故事情节曲折、系统新颖……在试玩结束时,你发现你已经掏出钱包,准备买这款游戏了……(这是我们通常买游戏的过程)
对比一下上面两个例子,现在大家明白了么?
游戏最能体现自己特点的地方是策划,如同一个人有着自己的思想一样。大家想一下,当我们遇到一个陌生人的时候,首先给你留下印象的是什么?肯定是外表。如同一个衣冠整洁、容貌漂亮的人容易给人留下好印象一样,一款美工精细、画面靓丽的游戏也很容易吸引游戏者的目光。接下来进行的相互沟通,就是游戏中程序所起的作用--你的操作能够完全被电脑忠实的执行,并且有出色的反应,游戏才能顺利的进行下去。如果程序不完美呢?操作起来生涩、AI 笨拙、甚至常常死机,就如同你不懂阿拉伯语,却又试图同一名只会说阿拉伯语的人打电话一样,最后的结果就是颓废的挂上电话,终止交流。前两者都能够顺利实现的话,你才能了解一个人的内心,也就是说,你才能领略游戏的内涵部分。所以说,游戏的内涵是最能体现游戏特点的,同时又是最难让游戏者接触得到的。内涵的表现极大程度上依赖于美术和程序。
如果在生活中,你遇到一个衣着邋遢、面目可憎的人,而且还拙于言语表达,出现在你面前,说他是震古烁今的大思想家,你信吗?不把他当疯子才怪!就算这个人的话是真的,你能和他一见如故、愉快的交往吗?反过来讲,一个容貌漂亮、声音如黄鹂鸣柳的女孩,尽管可能脑袋里是一桶糨糊(我谁也没影射,我说我自己呢),但依然会有很多人环绕着她。同理,对于游戏,只要画面精美、程序流畅,就能够吸引大部分的游戏者--内涵倒是次要的。就如同前一阵子即时战略一窝蜂的大混战,模式都基本一个样,最后年度最佳即时战略游戏的桂冠让《帝国时代》所夺走--其突出的优点充其量是美术好而已。
所以,游戏设计思想的表达是建立在程序部门和美术部门的工作基础之上的。游戏设计者的设计方案一定要在程序和美工的制作能力范围之内,这一点在上文已经反复表述过了。你设计的方案如果根本制作不出来,那等于是没有设计一样。因此,游戏策划必须要对程序部门和美术部门的工作流程、工作步骤、目前制作能力有一定程度上的了解,才能按照实际的情况量体裁衣,进行游戏方案设计。如果你对一项设计没有把握,那么你最好多与程序和美工交流。
4.4 有影视、美术、文学方面的根底
实际上这一点只有目前在中国大陆的游戏策划才需要有这样的素质。因为在大陆,游戏制作业属于刚刚起步的状况,关于游戏策划部分的工作分工极为不明确。象在国外的大型游戏制作公司,游戏策划是作为一个部门存在的,其中又分为很多分部门,各自负责自己的工作:有游戏策划部,负责游戏总体的系统;有美术设计部,负责游戏中美术风格、原创方面的设计;有脚本设计部,负责游戏中所有动画部分的脚本和所有事件的设计;有对话设计部,负责设计游戏中人物的对话;有人物设计部,负责设计出具有魅力的主人公和配角形象……然而在国内,这些工作全部是由游戏策划一个人来负责的--充其量是两个人。所以要求游戏策划在各个方面都要有一定的造诣。从游戏的设计角度讲,这样的情况是不合理的,毕竟游戏策划不可能是全才,但是从个人角度来看,这样的情况对于游戏策划的能力培养和锻炼是极其有利的。
在国外公司,一名策划人员一般只负责自己的那部分工作,总是在从事着同样的工种。比如一名对话设计的人员,他每天的工作就是写对话,绞尽脑汁的想出精彩的对话出来,至于游戏的其他部分,他是想都不用想的,也不需要他去想--另外有专人负责。造成的结果就是他的专业技能得到了充分的发挥,但是同时对他个人的发展也造成了阻碍。在国内,由于游戏策划对游戏的每一个设计部分都要亲自动手,很快就会成长为一名综合性人才了。
4.5 能够虚心采纳别人的合理化建议
有一件事情是作为游戏策划一定要避免的,那就是刚愎自用,不能听取他人的意见。有很多游戏设计的新颖思路都是大家在一起相互交流所得到的,靠策划一个人去想,毕竟会有所疏漏和不足。
游戏策划做为一部游戏的总设计者,理所当然的拥有对游戏设计思想的最终决定权,当遇到游戏设计上的分歧时,游戏策划有最后定案的权利。但这并不意味着游戏策划就有完全不听取别人意见,一意孤行的权利。相反,正是由于策划有最终决定权,所以他才更有必要多听取别人的意见,从中筛选出最优秀的一个。只要是对游戏有利的建议,又不影响游戏的整体结构风格以及在制作允许范围之内,策划就有义务要采纳。如果有特殊原因不能采纳的,一定要有充分的能够成立的理由。记住一点:多与别人交流总是没有坏处的。
4.6 对游戏制作有持续的极大热情
许多没有制作过游戏的人总认为做游戏是一项很有趣、很好玩的工作,也许制作游戏可以满足你心中的梦想,但过程绝不有趣、好玩和轻松。实际上,做游戏的过程是相当枯燥和劳累的。在制作的过程中,总要遇到这样或那样的问题和挫折,而当游戏上市之后,又要受到玩家们的批评--国内的玩家们见惯了那些由国外一流厂商所开发的一流产品,对于国内公司所制作的游戏,很可能会不屑一顾,而且会批评多于赞美。这对于游戏制作者来说,是非常沮丧的。
面对种种困难和挫折,你是否还能够有足够的热情去继续进行游戏的开发工作呢?是否能够有足够的勇气和毅力将热情持续下去呢?如果你的答案是否定的,那么你还是对加入游戏制作行列再多考虑一下的好。国产游戏业的发展不是在近期内能够追赶上国外游戏制作业水平的,这需要所有游戏制作者们持续不断的共同努力。国产游戏发展的过程,也是国产游戏制作者们积累经验、提高水平、磨练自己的过程,仅凭一时的兴趣,是不可能完成这一过程的。所以对于游戏制作者来说,对游戏制作能够持续保持极大的热情,是必须的心理素质之一。
5 结语
我从事游戏制作行业两年多的经验基本就介绍完了。可以说,我也是刚开始对游戏策划的工作有感觉。如果我的经验对大家有帮助,我会非常高兴。
看了以上的文字,你想成为一名游戏制作者了吗?如果你已经有了肯定的答案,那么,朋友,欢迎你加入我们的行列!让我们一起努力。
---------------------------------
附录 国外专家谈游戏制作
1998年5月14日,Intel公司在香格里拉饭店组织的发展商会议,由国外一些专家们进行技术讲座。其中交互式软件剧本设计课程,对计算机游戏软件设计的艺术和技术进行讲述。
此次课程的主讲是美国South Peak Interactive公司的Lee Sheldon先生.他从事影视剧本创作20余年,后转为从事游戏设计工作,可以说是经验丰富,对于电影以及戏剧的表现手法在游戏中的应用到了得心应手的地步。
在讲座中,他主要谈到了以下几个方面:
l 戏剧语言在电子游戏中的应用
l 电影语言在游戏中的应用
l 游戏剧本设计
l 简单说明多用户上网游戏
l 另外,我还问了Sheldon先生一些问题,具体附录在后。
注:下文的记述是根据Sheldon先生的原意加上我的理解和发挥写成的。
一 戏剧手法在游戏中的应用
(一) 开始设计游戏时如何确定游戏的主题
设计一款游戏,应该注意到具有一般、共同主题的游戏剧本适用于不同的文化背景的游戏者们。比如爱情主题、战争主题等等。容易引起游戏者们的共识与共鸣,对于游戏在不同地区的推广是有好处的。
如果游戏题材比较老旧的话,就应该试图从一个全新的角度来阐述一个古老的故事;或以全新的观念来诠释古老的题材;或以全新的体裁制作古老的题材。做到旧瓶装新酒或者是新瓶装旧酒,不能给游戏者乏味或雷同的感觉。要让游戏者在不同的方面领略到新意。
(二) 如何推动游戏的过程向前发展
在戏剧中,有两个重要因素是推动故事情节的动力:障碍与冲突
具体应用到游戏中,可以将障碍变成为在游戏过程中,需要游戏者解决的难题;冲突变成为游戏者前进的阻碍,迫使游戏者根据自己目前的状况,想出有效的解决办法。再具体的说明就是障碍是谜题,冲突是战斗。在RPG游戏中,这两种因素应用最为广泛。
恰当的为游戏者设置障碍和冲突,是游戏者有不断克服困难前进的动力,从而带动故事情节向前发展。
(三) 故事的讲述方式
故事的讲述方式有两种:倒叙法和正叙法。
倒叙法是先将游戏者所处的环境给定,先使游戏者处于事件发生后的结果之中,然后再让游戏者回到过去,去自己发现事件到底是怎样发生的,或者阻止事件的发生。最典型的例子是AVG游戏《MYST》。
正叙法就是普通的方式,故事随着游戏者的遭遇而展开,游戏者对一切都是未知的,一切都等待游戏者自己去发现,去创造。一般的游戏都采用这种方式。
(四) 如何设定游戏的主人公
主人公是游戏的灵魂,只有出色的主人公才能使人流连于故事世界中,才能演绎出出色的故事。因此,成功的设定出一名主人公,游戏就有了成功的把握。
游戏中的主人公不一定非要是一名善良、优秀的人不可,也可以是邪恶的,或者是介乎与正邪之间的。
通常邪恶的主人公比善良的主人公更容易使游戏成功。主人公如果能够邪恶得让人虽然厌恶他,但却不能放弃他,让人想看看他到底能够做出什么、或能够遭遇到什么、或下场是什么,就比善良的主人公更好的抓住了游戏者的心。比如电影《沉默的羔羊》中的那名博士,或者是游戏《玛尔寇的复仇》中的玛尔寇。
还要注意一点的是,主人公的设计不要脸谱化、原形化,不要流俗。主人公如果没有自己的独特个性、独特形象,是不可能使游戏者感兴趣的。
(五) 游戏中的叙述角度
一般游戏中,最常用的是两种叙述角度,也可以称之为视角--即第一人称视角和第三人称视角。
第一人称视角是以游戏主人公的亲身经历为叙述角度,屏幕上不出现主人公的形象,是游戏者有"我就是主人公"的感觉,从而更容易使游戏者投入到游戏中。
第三人称视角是以旁观者的角度观看游戏的发展,虽然说是"旁观者清",但在游戏者的投入感上,不如第一人称视角的游戏。
第一人称视角的游戏比第三人称视角的游戏编写难度大。欧美国家的RPG一般全部是采用的第一人称视角来进行游戏设计的。比如著名的《魔法门》系列。
其实我还是比较偏好第三人称视角的游戏,在第三人称视角的游戏中也可以利用不同的办法来加强游戏者的投入感,比如主人公的名字自己输入、自己挑选脸谱等。从游戏的表现效果来看,第一人称游戏也有它的局限性。
(六) 游戏中的情感与悬念
游戏中的情感因素非常重要,只有人的本性才可以触动人,使游戏者沉醉于这个游戏。作为游戏设计者,首先应该保证自己的设计能够感动自己,才可以说是成功的开始。一部作品如果连作者自己都没有感觉,怎么能够想象它能够打动其他的游戏者呢?
游戏中另外的一个重要因素是悬念。悬念--是游戏中带有紧张和不确定性的因素,不要让游戏者轻易猜出下一步将要发生些什么。加入适当的悬念可以使游戏更吸引人。比如:在一个箱子中放有游戏者所需要的道具,但箱子上加有机关,在开启的同时会爆炸。游戏者不知道箱子中放置的物品是什么,但通过提示,他知道这件物品会对他有帮助。可是他也知道打开箱子会有危险--同样,他也不知道危险是什么。如何即打开箱子有没有危险就成为了他所要解决的问题。这样就在制造悬念的同时,也给游戏者制造了一个难题。
游戏者在游戏中由于并不知道游戏内核的运行机制,因此对于自己的动作结果有一种忐忑不安的期待。在所有的游戏中,游戏者总是通过经验实现对不可预测性的抗争。
从不可预测性上看,游戏可以分为两种类型:一种称为技能游戏,另一种称为机会游戏。前一种游戏的内部运行机制是确定的,不可预测性的产生的原因是游戏设计者故意隐藏了运行机制,游戏者可以最终通过对游戏运行机制的理解和控制(即某种技能)解除这种不可预测性。而后一种游戏中游戏本身的运行机制具有模糊性,具有随机因素,不能通过完全对游戏机制的了解消除不可预测性,游戏动作产生的结果是随机的。
悬念以及由悬念所引起的期待在游戏中至观重要。在游戏中,不能使游戏者的期待完全落空,这样将使游戏者产生极大的挫折感;也不能使游戏者的期待完全应验,这将使游戏失去不可预测性。应该时而使游戏者的期待变成精确的结果,使其增强信心,获得欢乐;时而抑制游戏者的期待,使其产生疑惑,疑惑的时间越长,悬念的情绪就越强烈,建立起来的悬念紧张度越大,由解决引起的情感上的解脱感就越强。
悬念产生的价值不在其本身,而在于随之而来的解脱。悬念及其解除过程实际上与焦虑、释放过程是相对应的。
(七) 游戏的节奏
首先应该明确指出的是游戏中的时间观念与现实中的时间观念有所区别。游戏中的时间由定时器控制。定时器分两种:真实时间(实时)的定时器和基于事件的定时器。
实时的定时器就是类似C&C和DOOM的时间方式。
基于事件的定时器是指回合制游戏和一般RPG和AVG中的定时方式。
也有的游戏中轮流采用两种定时方式,或者同时采用两种定时方式。比如《红色警报》中一些任务关的设计。
在即时类游戏中,游戏的节奏直接由时间来控制,但在其他游戏中,真实时间的作用就不是很明显,这就需要用其他的办法。
在游戏中,尽量让游戏者控制游戏的节奏,而尽量少由设计者来做。设计者控制游戏节奏的方式应该是让游戏者难以察觉的。
比如:在AVG游戏中,调整游戏者活动空间(即ROOM)的大小;调整活动范围的大小(即世界);调整谜题的难度;调整游戏中工具的种类,都可以起到改变游戏节奏的作用。
在ACT游戏中,可以采用调整敌人的数量;调整敌人的生命值等办法。
在RPG游戏中,除了可以采用与AVG游戏中类似的手法以外,还能调整事件的发生频率;调整游戏中敌人的强度等办法。
一般来讲,游戏的节奏应该是越来越快,越接近游戏的结尾部分,就越是游戏者感到自己正逐渐加快步伐接近游戏的真正尾声。就好象侦破一件案件一样,开始千头万绪,随着逐渐的深入调查,逐渐的排除,越到后来,案情就越明朗化。
另外,决不要使游戏显得冗长。过于罗嗦的进行一个事件的描述会使游戏者失去继续进行游戏的兴趣,要不断的给游戏者以新的挑战和刺激。
(八) 游戏的风格要一致
在一款游戏中,从头到尾保持一致的风格是很重要的。风格一致包括人物与背景的一致,游戏风格定位的一致等等。在一般的游戏中,如果不是游戏剧情的特殊需要,不要使人物说出超过当时历史时期的语言,要注意时代特征。
二 电影语言在游戏中的应用
(一) 铁的法则--摄影机不能跨越轴线
当摄影机拍摄两个物体时--比如说是两个面对面对话的人,物体之间的连线称之为轴线。当在摄影机在机位1先拍摄物体2后,下一个镜头应该在机位2的位置拍摄物体1,使物体在屏幕上的方向是相对的,这样即便在镜头剪辑以后再播放,也不会造成方向上的混乱。严禁在机位1先拍摄物体2后,到机位2a拍摄物体1,这样就使人物在屏幕上"一顺儿"了,这是拍摄时的大忌。换句话说,拍摄时严禁跨越轴线。
如果要跨越轴线,也不是不可以,那就一定要让观众能够看见摄影机的移动过程,不要将绕行的过程剪辑掉。这些手法一般在游戏的过场动画中会有所应用。
(二) 电影中的对话
对话在电影中占据了非常重要的位置。一定要保证各人有各人说话的风格,使每个人的性格和特点在对话中表现出来,同时,游戏的主题要在对话中得以体现。对话是体现主人公性格特点的最佳方法。对话不要单调呆板,要尽量夸张一些,也有必要带上一些幽默的成分。游戏毕竟是娱乐产品,让游戏者得到最大的享受和放松才是它最突出的功能。如果不是题材被严格限定于正正经经的严肃题材的话,不妨适当的放松对话的设计尺度,不必完全拘泥于时代和题材的限制。
对话对于体现游戏中各个人物的个性起着至观重要的作用。无论是在戏剧、电影还是游戏中,各人性格在对话的内容上体现得最为突出。
(三) 剪辑在游戏中的应用
很多原先从事影视创作的人员,非常喜欢在游戏中利用剪辑的手法来衔接游戏中的各个场景。其实在游戏中,除了特殊需要,剪辑手法很少应用到实际制作中。因为游戏总是跟着主人公的遭遇来发展的,很少有数线并行的情况发生。不过对于交代剧情和展示全局,剪辑是不错的选择。
(四) 视点在游戏中的应用
同戏剧部分一样,在电影的手法中也有第一人称视点和第三人称视点。要注意一点的是,在同一部游戏中,不要做视点之间的切换--即一会儿用第一视点,一会儿用第三视点,这样会造成游戏者的困惑和游戏概念的混淆。
目前有很多游戏设计就是犯了在游戏中切换视点的毛病,尤其是在游戏中的过关演示动画或游戏中交代剧情的动画中,才用了与游戏中不同的视点。最常见的是游戏全部以第一人称视角进行,但过场全部是第三视角的。
三 游戏剧本设计
(一) 游戏的类型(简单举例)
1 即时战略游戏
2 Doomtoo 类游戏
3 RPG
4 AVG
5 混合类型:融合若干游戏类型的游戏,最具前景的游戏。很可能以后所有的游戏类型全部要由这种游戏类型所代替。
(二) 游戏设计中的一些诀窍
1 定时器的作用
在游戏中,定时器的作用是给游戏者一个相对的时间概念,使游戏的向前发展有一个参考系统。
在游戏设计中,可以将两种定时器混合使用,但不能造成玩家的困扰。
2 界面的设计
在游戏中,界面应该设计得尽量的简单,易于游戏者理解,要尽量体贴玩家。多采用图象的、符号式的界面设计,少采用单调、呆板的文字菜单方式。而且也不一定是菜单式的,要更新界面设计的观念。
3 游戏中的真实与虚构
游戏者在玩游戏时,主要是可以体验不同于生活的历程,得到心灵上的解放。所以游戏的世界可以是虚构的,但游戏中的人物、感情等东西则必须是真实的。游戏的本质核心要贴近生活,但游戏的题材可以是各种各样的。
4 设计道具
道具的设计要注意合理。不可能将一辆坦克装到自己的背包中去。另外注意的是思考要全面。比如在游戏中,游戏者需要将一枚钉子钉进墙壁中,那么他需要一把铁锤,这也是游戏设计者设计的难题之一。可是如果这是在旁边有一块石头可以捡起来,在现实生活中,我们是可以用石头钉钉子的,那么在游戏中,你也应该允许游戏者使用石头在钉子上,而不能在游戏者使用石头在钉子上时,出现"喔,你不能这样使用"的提示,从而必须让游戏者按你所设计的方式进行游戏,这是不合理的。如果你的设计非让游戏者找铁锤不可,那么你就不要给他石头。
有一点要值得游戏设计者十分重视的是:你的任务是尽量帮助游戏者,而不是百般刁难他们。
5 RPG游戏设计的误区
RPG游戏中最常见的两个误区是:死路和游荡
死路指游戏者将游戏进行到一定程度以后,突然发现自己进入了死路,没有可以进行下去的线索和场景了。通常出现这种情况是因为游戏设计者没有做到设计全面,没有将所有游戏的可能流程全部设计出来,而游戏者又没有按照游戏设计者所规定的路线前进,从而造成了在游戏过程中的死路。
游荡指游戏者在广阔的地图上任意移动而难以发现将游戏进一步发展下去的线索和途径。这种现象在表现上很类似于死路,但两者有本质的不同。解决游荡的方法是在故事发展到一定程度的时候,就缩小世界的范围,使游戏者可以到达的地方减少;或者使线索再更加明显,给予更多的提示,让游戏者能够轻松的找到自己的目标。
6 游戏的交互性与非线性
交互性指游戏对游戏者在游戏中所做的动作或选择有反应。举个很简单的例子,当一名英雄到达一座城镇中后,城中没有人知道他,但当他解决了城镇居民所遇到的难题后,他在城镇中应该就成为了一名知名人士。居民们见到他以后会有反应。还有例子就是,当主人公帮助了一名NPC后,这名NPC以后见到主人公的态度应该有所不同。更加完善的设计是给主人公加上某个参数,使他一系列的所作所为,最后影响到游戏的进程和结局。
非线性指游戏应该是开放时的结构,而不是单纯的单线或是单纯的多线制。即游戏的结构应该是网状,而不是线状或是树状。即游戏中的分支之间允许互相跳转,不是单纯的树状。
线状结构 树状结构 网状结构
7 游戏中的奖励和隐藏设计
游戏进行到一定程度要给游戏者一些奖励,比如漂亮的画面、精彩的过场动画甚至是有用的道具等在游戏过程中得不到的东西。
与奖励类似的是游戏中的隐藏设计,比如Cheat Mode、无敌密码还有隐藏关卡、隐藏人物等设计。这些设计非常有意思,也很有必要加上,但是要注意这些设计不要影响游戏的正常进程,毕竟它们是属于噱头的范畴。
8 关于游戏中的死亡
要让游戏者从自己的死亡中学到东西,死亡这种惩罚措施才是有益的。
9 游戏中的对话
游戏中的对话种类分3种:
(1)无对话游戏:例如MYST
(2)有限对话游戏:例如Diablo
(3)自然对话游戏:
对话的设计要带有情绪性,才能明确的让游戏者做出他想做的选择。
如果游戏者选择对话的一个,那么其他话题将消失,以后的话题是有他所选择的第一个引发的,不要让游戏者重复的看见以前的话题。
好的游戏设计者应该能够写出出乎游戏者意料的对话。
对话不要单调的重复,一般要有50句左右的常用无意义的对话,它们之间互相组合,才可以是游戏者不觉得对话单调。不要遇到某个NPC的话总是:"你好"、"你好",而尽量要做到每次不同。
(三) 游戏设计者与其他部门人员之间的合作
1 如何合作
设计者超前的设计如果能够与编程人员合作恰当,能够创造出惊人的效果和成功的游戏
在编程人员水平不足的情况下,双方要相互协调,达成一致的结果,能够让双方都能接受。
组员中每个人对于游戏都有自己的想法,设计人员要充分采纳建议中好的部分,但一定要有一个明确的主设计思想和一个能够为整个游戏负责的人,当出现不一致的情况时,他可以有最终决定权。
2 游戏制作的关系
游戏制作的三方面可以是一个稳固的三角形,这个三角形可以沿中心旋转,三方面任何一方都可以处于顶点位置,即以任何一方作为游戏制作的侧重点,都有可能制作出一款好游戏。
四 多人在线游戏(MUD)
(一) 理想的MUD结构
示意图为:一个大圆圈里画着许多小圆圈.
图中的大圈表示整个游戏世界,小圈表示有意思的事情的发生地点,其他的空白地方代表世界中的原野、城镇、乡村……游戏者在世界中不受限制,可以任意移动,随意触发事件。事件与事件之间没有必然的联系,但如果某件事件发生了以后,会对整个世界造成影响,比如其他地方的人们知道了事件的发生,从而对游戏者改变态度。
(二) 混沌理论
所谓混沌理论应用在游戏中,指事件接近随机的发生,但实际上是有规律可循的。
Lee Sheldon先生对此有他自己的一个理论:"糟糕的一天"理论。
比如,以下事件发生对你是有影响的:
1 领带皱了
2 和同事吵架了
3 被领导斥责
4 没有中午饭吃
5 钱包丢了
6 车子坏了
…… ……
这些事情可以在你的任何一天发生,但你又不知道它们什么时候发生,将要发生什么,但一旦它们发生了,肯定会对你的情绪有影响,而且发生的件数越多,对你的情绪影响就越大。当它们发生的次数足够多的时候,你就会认为你度过了"糟糕的一天"。
在游戏中的情形也类似。游戏者不知道他将会遇到什么,如果遇到一定数量的事件,就可以让游戏者有感觉了。
结语
目前,国内的游戏设计者们基本全部是从玩家们成长起来的,大家对游戏制作热情有余而经验、理论不足。所以我认为象这种讲座对我们游戏设计者来讲,是非常有必要的。由国外有经验的游戏设计者从理论到实际向我们讲述游戏的设计,对我们提高游戏的设计水平大有裨益。
实际上,游戏设计是一门非常特殊的艺术,它要求就业者有较高的综合素质。不仅要有创造力、文学功底,甚至对于电影、戏剧、历史、文化等都要有一定程度的根底,最好还对编程和美术有一定的了解,这样才能成为一名成功的游戏设计人员。目前国内业界流传着这样的话:"会编程的当程序员,会画画的当美工,什么都不会的当策划。"这在一定程度上反应了目前大陆游戏制作人员的情况,也指出只有游戏设计是非专业人员在从事这一份工作。我们在痛心的同时,一方面通过自己的努力,自己摸索前进;一方面也在迫切的寻找任何可以提高我们专业水平的机会。