游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3351|回复: 12

游戏开发之路

[复制链接]

87

主题

790

帖子

806

积分

高级会员

Rank: 4

积分
806
QQ
发表于 2009-4-22 18:20:00 | 显示全部楼层 |阅读模式
这篇文章不打算写的过长,因为这篇文章的目的主要是给游戏开发指明发展方向,其中涉及到的一些内容已在或将在有关文章详细说明。在本文中,会涉及到《软件开发总结》,如有需要可以看http://www.downfans.com/sanguo/showthread.php?t=439
一、以代码为核心游戏开发的问题
目前的游戏开发以代码为核心,这种开发方法具有很大的弊端,因为代码其实是个藕合的产物,正是因为如此我们在写代码的时侯需要考虑各方面因素,这使得各方面因素不能得到真正深入的思考,从而影响了代码质量的提高。
现在,我们详细分析代码是由哪些部分组成的。代码是由语言来书写的,作为语言就有形式和内容两个部分。从内容上看,具有与平台无关的一部分,那部分对任何平台都适用(关于平台的定义,见《软件开发总结》的总论部分),称为逻辑。还有一部分与计算机有关,即平台相关,称为物理。从形式上看,是以字符组合的方式表达有关内容的。
从以上分析,我们可以看出,我们写代码的时侯,其实同时考虑了逻辑、物理及表达形式三个方面。这样的方法缺陷在于:第一,由于多个方面综合思考,使得考虑逻辑、物理等方面的时侯没有分清主次,抓不住关键,从而放慢了思考速度,更重要的是由于没有抓住关键,从而给找资料带来了困难,比如说:AI问题令很多人头疼,为什么呢?因为很多人想看现成的代码,或者想看计算机实现的思路。而这方面的资料的确很少,所以有人就得出了结论,AI方面资料太少。但实际上,如果我们把AI问题逻辑部分抽象出来,我们会发现有很多数学方面的东西给解决AI问题提供了很好的思路(如:一个君主决策时有多个目标,怎么权衡多个目标呢,运筹学里面就给了具体的办法,最后结果使得与预期目标差距最小。);第二,由于没分清主次,当出现了BUG或者需要修改时,常常难以寻找,因为在写代码的时侯只想着实现,而不明白这段代码为什么能实现这功能,这样自然难以寻找错在哪处或该改哪处;第三,由于各方面没有很好的分离,当以后需要解决类似的问题的时侯,就不方便复用之前的逻辑或物理,从而增加了重复开发时间,降低了开发效率。
当然,应该指出,对于逻辑简单而且又不需要太多维护的项目,这样的开发可以节省时间。但对于逻辑复杂需要维护的项目来说,这样的开发方法就带来了很多问题。
二、游戏开发的合理过程
正因为如此,软件工程里才提出了一些分工的方法,游戏开发也分为策划、程序和美工。这些分工在一定程度上促进了这几个方面思考的分离。但是由于分离的不彻底,很多时侯有些东西分不清到底该策划做还是程序做还是美工做。有些人还认为策划需要学习程序设计语言,了解一些程序的细节,这样的想法加重了策划的负担。实际上,如果我们按代码三方面组成来分,就不需要为策划到底该不该学语言而纠缠不清了。
在《软件开发总结》里,把游戏开发分为了逻辑设计,物理设计,实施设计三个方面。把逻辑、物理、语言形式三方面因素给剥离开了。对于其中的每一个分工都由自己的概念、表达法、表达工具等等,使得每一个分工都相对独立,这样每个分工只需要了解自己所做的分工就行了,能不能实现都可以根据该分工的有关理论来判定,从而减轻了各分工的学习负担。采用这种开发模式有如下优点:
第一,人的思想不受语言、工具的制约,因为逻辑设计是与平台无关的,跟开发工具更没有什么关系。我们可以用面向人的思维方法而不是面向机器的思维方法来解决问题。如果遇到问题,可以有很多方面的理论可以参考,而不是局限于计算机,这就给解决问题打开了思路。在逻辑设计方面,数学和哲学都对解决问题很有帮助。
第二,有利于学习不同工具的人相互合作。由于以代码为核心的开发模式,开发的结果都体现在代码上,因此要求不同开发者学习同门语言或者在同个开发平台下合作,这就限制了开发者之间的合作,而这种模式写代码的问题由专门的实施设计及实施的人员进行,这样就使得开发者可以不考虑语言工具方面的因素来参与开发。
第三,有利于提高开发效率。由于这种开发模式遵循了从抽象到具体的过程,因此越抽象的开发过程就越能得到复用。同时,在物理设计方面,计算机一些设备的组织也可以采用逻辑设计的成果,这就从另一个方面体现了高级别的抽象层次结果的复用。另外,由于层次清晰,对于复用和维护都很方便。
应当指出,这种方法存在着如下问题:
第一,由于目前的程序设计语言很多方面还是面向机器,与人的思维有很大差距,因此实施设计这个环节还需要花费很多时间,但是由于人的思维对解决问题可以开拓思路,这个时间的付出是值得的。
第二,逻辑设计、物理设计以及实施设计的理论基础还不完善。但是可以借鉴现有的开发方法,比如说面向对象就可以借鉴来作为逻辑设计,由操作系统的结构来借鉴作为物理设计。
三、使用这种开发过程的方法
这种开发方法把逻辑因素、平台因素、工具因素分离开,从而使逻辑设计可以自由思考,使物理设计可以对平台更有针对的设计以及方便跨平台,使变换工具的代价减少(因为仅仅变的是表达形式)。
在逻辑设计方面,一方面需要研究合理的思维方式,另一方面需要加强对问题域的了解。研究合理的思维方式可以通过两个途径。一是从实际问题出发分析,在分析过程中发现共性的东西,并把它总结出来;二是借鉴现有的理论,数学哲学相对比较重要,其中哲学一般是针对大局的问题,数学一般是针对具体问题。这两种途径中,后者更为重要。因为我们现在所需解决的问题,很多是前人已经解决过的,并且经过了实践的考验。我们没有必要另搞一套,然后再等待时间的检验。对于一些前人没解决过的或者没解决好的,才需要用第一个途径,这是对前人理论的发展。我们应该把主要时间用来解决新问题,而不是另起一套。加强对问题域的了解中,对于逻辑设计来说,需要加强对解决问题域的运作情况的了解,比如对于SLG类型游戏,就需要加强对SLG游戏结构的认识(需要用前面说的合理的思维方式来研究)。
在物理设计方面,需要应用逻辑设计方面的思维成果以及加强对平台的了解。对于计算机来说,就需要加强对计算机的了解,对于计算机总体结构的把握,这需要从软硬件角度入手,其中操作系统原理有很大的参考价值。
在实施设计方面,关键是在于对所用语言的认识,一门语言的学习不能仅仅限于完成任务,更重要的是从逻辑,物理,表达形式三方面的分析,要注意的是有些功能(比如:重载)它是为了解决表达形式的问题而不是问题域的问题。一旦一门语言能从这三方面分析了,内容和形式的转化规则就不难制定了。
四、一些问题的说明
1.本文说明的开发模式只是从项目的内容结构来说的,实际的开发中不一定非得按逻辑设计、物理设计及实施设计来分,因为这种分工可能会导致对每个开发者要求太高。事实上,可以把这些分工再细化成一些小分工,然后根据开发人员的特长,分配相应的小任务(前提是,各任务之间先后关系要理清),这样效果可能会更好些。另外,这种开发模式对于一个人的开发也适用,由于开发过程由抽象到具体,一个人的开发反而对这个具体的过程能够有更深刻的认识。
2.根据本文和《软件开发总结》所说,学习开发游戏不一定要从编程学起,因为代码本来就是个藕合的产物,学习开发的合理过程应该是从抽象到具体,这样能够对代码有个本质的认识,对今后的发展也有好处。可以从最简单的扫雷游戏分析起。这里要指出的是,逻辑设计、物理设计及实施设计的学习不一定非要把其中一方面了解深了再去了解另一方面,可以根据实际的项目需要学习有关的知识,对于物理设计来说,初学者不一定需要深入去了解,只需要有大致性了解就行。对于已经有实际编程经验的人来说,对自己所学工具以及所做过的项目来分析是种有效的方法,经验对于分析具有促进作用。
3.说明一下思想和工具的关系。思想其实就是逻辑设计,而工具是思想在物理设计和实施设计应用以后的结果。也就是说工具是思想的硬化,思想是工具的软化。所以,学习工具一个重要的目的就在于学习它的思想,从这个角度来说多学工具是有益的。但是工具毕竟是在具体环境下的产物,它必然包含了很多细节,它给学习者也带来了不利的因素,而思想来说,由于它忽略了很多实际因素,抓住了关键,学习起来相对容易。从开发角度来讲,工具可以为我们屏蔽很多细节,它可以促进开发速度。但是它仅能解决有限的问题,对于很多新问题,它的解决更需要思想而不是工具。所以,对于自己不感兴趣的方面而且已有工具可以解决时,可以直接用工具。而对于感兴趣的方面或没有现有工具可以解决时,可以通过思想。
4.说明一下思想和引擎的关系。引擎其实就是一种工具,它就是把思想应用于具体环境的结果。它跟游戏的区别在于层次不同,游戏是面向玩家的,而引擎是面向开发者的,因此它所面对的问题域是不同的。但是逻辑设计、物理设计及实施设计同样适用于引擎开发。做好引擎的架构的关键就在于逻辑设计,而提高引擎性能的关键就在于物理设计。实际上对引擎开发来说,逻辑设计和物理设计的交流胜过对代码的交流。
5.说明一下思想和算法的关系。算法实际上是把思想进行物理设计的过程。它考虑了计算机软硬件的情况。学习一个算法的关键在于对它思想的理解,我认为对于一个问题的解决应该从逻辑设计开始,而不是直接看算法,很多数学理论已经给出了逻辑设计的过程,在了解这个过程的前提下,再去看算法,会比直接看算法容易的多。设计算法也同样的道理。有些人觉得A*算法难学,实际上就是因为直接看算法引起的,其实它只不过是图论里最短路问题的发展。
6.逻辑设计,目前比较直接的理论是面向对象和数据结构。这两者其实不是对立的,数据结构其实是对面向对象抽象的结果,在需求发生变化时,数据和对象是可以相互转化的。面向对象最重要的原则,我认为是两个,一是系统性,它解决了各种不同任务如何分工的问题(按对象、按层次),由于需求的变化中对象、系统是相对稳定的,并且对象、系统的复用时常发生,因此面向对象对可维护性和复用有很好的支持;二是抽象性,它使得客观事物的运动能够在计算机里模拟,计算机所能模拟的事仅仅限于能够量化并且离散的事物。所以面向对象的模型应该先以原貌的形式建立,也就是只包括对象及关联,然后再以抽象模型建立,把对象抽象成属性操作等等。这个过程中数据结构起到了重要作用。
7.这套方法不仅仅适用于游戏开发,对于引擎开发,AI开发等等都是有效的。而且它也适用于认识事物,比如说认识操作系统,认识一个具体的引擎,对于认识事物来说一般只需要从逻辑设计和物理设计角度来看。对于难懂的代码也可以试着用这个思路去分析。
五、专向领域开发的应用
专向领域开发是指一个人或一个团队一直开发一类项目。比如我一直开发三国。在这种情况下,可以把每次开发的逻辑设计、物理设计和实施设计以及实施结果的东西收集起来,建立构件库,这样随着开发实践的深入,就有大量可复用构件,这样在以后开发中如果遇到类似需求,就可以直接用以前的成果。设想一下,如果三国游戏可以直接用之前的部队,城池等等,这对提高开发效率很有好处。(当前,前提是类似需求)
六、游戏开发之路
一个项目之所以能够开发成功,是因为它需要的成本能够被满足。对于业余开发来说,主要是时间成本。业余开发失败的根源就在于成本高。是为什么成本高呢?因为以代码为核心的开发模式有太多的藕合,使得人不能专心思考一个问题,很多问题的解决由于深陷细节而找不出好方法(或者找不到方向),很多问题的解决需要反复探索,同时由于缺乏复用,前人解决过的问题,后人重新解决,这浪费了大量时间。这也就是为什么项目越大越容易失败,实际上一个新项目所带来的新问题并不多,关键问题是很多人把时间都花在了前人解决过的问题中。当然很多人并不是不想使用前人的成果,从提倡开源就可以看出。实际上复用前人的结果不仅仅就是代码,逻辑设计、物理设计及实施设计都可以用来交流,为什么惟独是代码呢,实际上抽象层次高的东西反而突出重点,易于理解。我认为逻辑设计的交流是最重要的,大家应该多交流这方面的问题。如果能够深刻理解逻辑设计、物理设计及实施设计的关系,就不会认为逻辑是虚的而代码才是实的。
我想,随着开发方法的科学化以及复用程度的提高,一个人开发一个大规模的游戏不再是难事,短时间内开发一个一定规模的游戏也不是难事。对于业余开发来讲,不需要借助大团队,开发个满意的游戏也不是难事。
最后,推荐一本书,对逻辑设计很有好处,那就是《面向对象的系统分析》

12

主题

733

帖子

734

积分

高级会员

Rank: 4

积分
734
发表于 2009-4-24 00:39:00 | 显示全部楼层

Re:游戏开发之路

好贴,顶一下

6

主题

237

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
发表于 2009-4-27 18:29:00 | 显示全部楼层

Re:游戏开发之路

用VC的都应该回去反省!

12

主题

733

帖子

734

积分

高级会员

Rank: 4

积分
734
发表于 2009-4-27 20:17:00 | 显示全部楼层

Re: Re:游戏开发之路

游戏之冢站长: Re:游戏开发之路

用VC的都应该回去反省!


我是应该反省,当初怎么没把你射墙上

25

主题

259

帖子

263

积分

中级会员

Rank: 3Rank: 3

积分
263
发表于 2009-4-28 13:45:00 | 显示全部楼层

Re: Re: Re:游戏开发之路

打酱油的: Re: Re:游戏开发之路

我是应该反省,当初怎么没把你射墙上


你爸爸把你射在松下

10

主题

336

帖子

350

积分

中级会员

Rank: 3Rank: 3

积分
350
发表于 2009-5-18 23:30:00 | 显示全部楼层

Re:游戏开发之路

松下电器

10

主题

336

帖子

350

积分

中级会员

Rank: 3Rank: 3

积分
350
发表于 2009-5-18 23:30:00 | 显示全部楼层

Re:游戏开发之路

10

主题

336

帖子

350

积分

中级会员

Rank: 3Rank: 3

积分
350
发表于 2009-5-18 23:30:00 | 显示全部楼层

Re:游戏开发之路

路漫漫其修远兮

10

主题

336

帖子

350

积分

中级会员

Rank: 3Rank: 3

积分
350
发表于 2009-5-18 23:30:00 | 显示全部楼层

Re:游戏开发之路

吾将上下而求索

10

主题

336

帖子

350

积分

中级会员

Rank: 3Rank: 3

积分
350
发表于 2009-5-18 23:31:00 | 显示全部楼层

Re:游戏开发之路

写的很不错
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 07:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表