标题: 08年的开发回顾与总结
性别:未知-离线 陈珺

Rank: 6Rank: 6Rank: 6
组别 校尉
级别 军师将军
好贴 5
功绩 26
帖子 927
编号 3820
注册 2003-12-27
来自 福建福州


发表于 2009-1-7 22:58 资料 个人空间 短消息 看全部作者
08年的开发回顾与总结

总的来说,08年在实践方面做出了比前几年相对完整的作品-战争,在理论方面取得了大量的进展。
上半年主要精力放在战争开发上,同时也开始了新战略三国开发的初步筹备。其中,
1月到3月:主要精力放在完成战争的部件上,完成了滚动条、列表框等较为复杂的部件。在这期间对功能处理上作了一次改进,这就是把原来统一的功能对象分散到这个具体的部件,这样每一个部件管自己的操作,职责明确,也方便维护,在这次改进的过程中我悟到了一点面向对象的意义,这就是职责明确,面向对象之所以好维护,就是因为各个对象的职责划分的明确。
4月:学习了ADO和ADOX技术,完成了战争所需的数据存取底层的开发。
5月:月初,完成了战争逻辑和界面应用层的开发,并且发布了测试版本,在测试的时侯在设备重置方面发现了很多问题,然后在5月底6月花了一段时间把它解决了。战争1.0于6月3日正式发布,这个作品发到了很多论坛,是我近几年相对完整的一个作品。
战争的开发中由于发生了一些事,最后导致了对战争作品定位的改变而提早结束了开发。
1月的时侯,发现林度长期不上论坛,当时我就觉得战争开发下去比较艰难,后来我提出了对策划制度的改革,增加了若干执行策划,包括司马平安,7815,kuangua,并且也把策划分成界面策划,美工策划,数据策划,功能策划,AI策划等以便分工,从最后执行的结果来看,司马平安因为有事最后没坚持下去,而kuangua没有分配到任务,7815经过一段时间的努力最后在4月份完成了AI策划。可见,执行策划制度是不理想的。3月底,林度根据我07年所提的问题在发布了更新的策划(这份策划在表达方面有了很大的进步,我随后以这份策划所作的设计在5月初完成了战争应用层的开发),在这份策划的后记中林度说他没有时间了,结合当时执行策划制度的不理想,我作出决定,战争只做完战斗部分(原计划还包括后勤系统和职官系统),这样战争的内容跟原计划比就少了很多,因此也提前结束了战争的开发。不过战斗系统从战略三国到模拟三国都无法完成,要在战争中完成对于当时的我也不是件容易的事。最后在应用层采用了不是很好的办法解决了问题。
在3.21日,我和7815就开发组织的问题进行了交流,他提出了开发应该分期进行,并且程序人员不能离开等思想,最后就形成了《战争开发组章程》,可惜的是由于执行策划制度没有很好执行,这个章程也不能被执行。不过其中的很多思想被用于新战略三国的开发中,并且有的思想成为了宏观开发学里相关理论的思想来源。
由于战争的内容减少,导致三国游戏的很多要素没有体现出来,同时在战争开发过程中也发现了架构设计上的一些问题,这些问题只有重做才能得到解决。于是我又作出一个决定,开发新战略三国,但是由于林度不再是合作者了,因此新战略三国的策划都得我来做,而我对策划的了解又不够,因此在4-5月找了庄周,任毅,张衍等人咨询有关策划中的问题。其中庄周提出了很多想法,我个人认为虽然这些想法看起来不错,但是有一定难度。而张衍提供了很多关于架构设计上的建议,这是我08年下半年进行深入理论研究的起点。一开始,我给他看了战争的策划,他在策划中发现了很多问题,其中最大的一个问题是逻辑部分和界面部分混在一起,后来我又给他看了一些新战略三国的初步设计,让他作个框架图,他花了一段时间作出了框架图,在框架图里他把游戏策划划分为对象,系统和界面,我就这三方面整体的问题和细节问题与他交流一段时间,给了我很多启发。其中对象和系统的划分,解决了林度在模拟三国后记中的困惑,即很多功能硬归到系统里很牵强,但是归到对象里又有很多重复,而且不好理解。系统和界面的划分,解决了原来的功能设计中即写界面又写逻辑导致表达不清的问题。另外,地图是一个对象的设计,使得地图上的设计(战争应用层开发的一大难点)思路清晰了很多。任毅则是用实例给我提供了很多具体的建议,主要包括两大方面,第一是写法方面,把每个对象的属性详细介绍,用伪代码的形式给出了对属性的简单操作描述方式,用流程图的形式给出了对属性的复杂操作描述方式,值得一提的是在流程图中的每个流程都有“退出”这个动作,这使得以前我跟林度争论了一段时间的对流程的理解问题得到了很好的解决,因为所有的流程最后都会到“退出”动作这一步,消除了二义性;第二,在三国游戏内容上也以实例形式提供了很多建议,使我对三国游戏应该有哪些功能有了一些基本的认识。除了提建议之外,交流给了我更多的启发,我把张衍所提的建议以及我在任毅给的例子中发现的问题与任毅进行了交流,任毅发现了一些问题,为了解决这些问题讨论出了针对不同问题的不同解决方案,比如:属性功能、关联属性、对象和系统是有层次的。此外,4月我在三国群里认识了策划隐云之云,他也提供了很多建议,最重要的一个建议是策划需要设计数据结构,这就是我下半年研究数据结构的原因之一。
6月,在一次性能测试中发现在VB6中使用对象太多(主要是指对象的对象及其下的对象)会降低程序运行效率,在星河群提出了这个问题,云端提出了解决方案,就是用结构体数组代替类,我当时反对,原因在于数据和操作分开了,他当时回应大概是说可维护性和效率不可兼得。后来,我给云端看了战争的代码,他指出了很多代码的编写没有仔细的思考,后来他又指出数据结构与算法是程序本质,这又促成了我下半年研究数据结构。
7月,开始了新战略三国的初步开发,刚开始的两周时间里完成了消息、地图、武将、城池、部队、势力对象的设计,资源、内政、外交系统的设计,由于军事系统的设计中遇到了困难,暂时转向了引擎(注:这里的引擎不是很多人所认为的图形引擎,而是对界面管理的引擎)的开发,这次引擎的开发是在战争引擎基础上对代码作了一些略调,同时注重理清思路,这次引擎开发把原来很多是类改成了通用模块,在改的过程中体会到了很多控制类没有必要作成对象,对象是有重复才需要做的,没有重复的做成模块就可以(另外,需要被继承的也需要做成类)。
8月,一方面继续引擎的制作,一直做到八月底引擎还是没有完成,当时遇到了一个图片截取区域的麻烦问题,这是因为功能对战争引擎扩充引起的,后来因为这个就暂时停工了,其实这个问题多花点时间也是可以解决的,只不过要很多重复代码。另一方面,开始初步接触了数据结构,了解了时间复杂度和空间复杂度两个概念,这两个是用来评估设计复杂程度很好的工具,正好符合当时判断一个设计复杂度的需要。
8月底开始,暂时停止了新战略三国的程序开发,在接下来的四个多月里一方面学习了数据结构,另一方面在理论研究上取得了很多进展。
9月初到11月中旬的79天时间里,研究了数据结构。得到了如下启示:
1.在研究数据的一些指标的时侯,发现了数据的复杂度是跟规模和分布相关的,同时发现数据之间关系的本质几对几的关系,据此可以把数据结构分为集合、线性表、树和图。
2.在了解了数据结构分为逻辑结构和存储结构两种以后,初步发现了策划和程序之间的分工点,即策划负责设计逻辑结构,程序负责设计物理结构,这是后面深入研究的基础。在策划设计中不需要说数组,而是说线性表,因为线性表是逻辑结构,而数组是存储结构。
3.研究线性表的时侯,理解了指针的本质就是指向,链表所用的指针其实目的就在于给数据之间建立关系,使用数组同样可以通过下标建立这种数据关系,只不过指针是在内存层次上,而下标是在数组层次上的,效率会有区别。这也使我理解了为什么对象要设计ID,因为ID就是用来体现指向关系的。而所谓指针的指针其实也不复杂,就是指向一个用来指向的变量。最后我得出了一个结论,数据分为描述性和指向型的两种。
4.研究稀疏矩阵的时侯,意识到了在以前做战争小地图性能优化的时侯其实就是用了三元组的方法。
5.研究栈的时侯,了解了递归的原理,并且意识到实现多层界面可以通过栈来实现。
6.研究树的时侯,发现它可以用于描述官职系统。
7.研究图的时侯,发现djkistra算法与A*有很多相似之处,djkistra算法是以点和点之间关系给出的,而A*中是用格子之间的关系来体现点与点的关系,从这方面说A*是一种特例。从权值角度来说,djkistra是根据预先定好的权值来运行的,而A*的权值每走一步都会变,从这个角度来说djkistra算法又是A*的特例。另外,从djkistra算法可以看到A*算法优化的思路,这就是在寻最短路过程中所走过的点都肯定是最短路,因此对于同一个起点,不同终点的情况可以按这个思路优化。另外,发现图对于AI设计有很重要的作用。
8.理解了数据和数据结构可以互相转化的思想,理解了游戏的抽象层次不同,把数据转成数据结构是深化,把数据结构转成数据是抽象化。
9.理解了面向对象的本质就是一个数据结构对应一个算法,实际上是数据结构的一个发展,面向对象和数据结构并非平行关系,很多问题光靠面向对象无法解决,因为它只是数据结构一方面的发展。虽然面向对象有继承等机制,但那是从复用角度来说的,数据结构本身就有复用的思想。
对于数据结构来说,其实很有很多很深的问题还需要研究,比如说顺序存储和链式存储从逻辑角度有什么区别,这些都需要在09年进一步研究。
数据结构研究的期间还研究了运筹学,我觉得运筹学对于AI设计是很有帮助的(比如说指派问题可以解决内政人员的分配问题),特别是对于SLG游戏来说,因为SLG的本质就是要体现玩家如何利用资源能够获得胜利,体现运筹帷幄的感受,而运筹学就是研究如何有效利用资源的。上面提到的A*算法其实也是运筹学里djkistra算法的一种发展。总之,运筹学提供了一些类型问题通用的解决方案。这个通用的方案是由程序来完成的,至于一些具体的数据那是策划的任务。因此前面认为策划只管逻辑结构是不恰当的,策划应该管的是逻辑的个性的部分。
8月底到12月的时间里,取得了很多的理论进展。在此期间,与黑色幽默的交流给了我很多启发。
8.26发表了《论游戏程序》的文章,在里面指出了程序员的任务是把策划设计游戏逻辑体系转化成计算机体系,因此程序员就需要了解计算机体系,在这篇文章中仅仅指出了程序要把逻辑的转成物理的,而没说到把复杂逻辑转成简单逻辑。在9.14发表了《论游戏策划》的文章,里面指出策划要把握游戏性和可行性两方面,说明了保证可行性需要对计算机的数据结构和资源有所了解,可行性为游戏提供了可靠的表达方式,然后再以可行性为基础去提高游戏性。在10.6发表了《论网络团队纯业余开发》表明了业余开发其实就是个经济问题(虽然文章没有直接提及,但是文章里分析了游戏开发所需的东西,其实就是要表达这个意思),表面上看业余开发没有投入资金,实际上业余开发投入了时间和硬件资源的机会成本,另外,文章里没有指出一个游戏开发是需要投入一定的经济总量,而业余开发经常失败的原因就在于开发的工作量远远大于投入的经济总量,而对于业余开发来说初期要增加投入的经济总量不现实,因此只有走减少开发的工作量的路,但是减少开发的工作量往往就要降低开发的要求,这样就降低了游戏的质量,为了保证开发的要求不被降低,就需要减少开发环节本身的成本。在12.6建立起了关于三国游戏开发的理论体系,一共分为四块,第一块叫《微观开发学》,主要研究的是架构,也就是游戏从模糊零散的想法到计算机硬件,需要经历哪些过程,每个过程该怎么完成;第二块叫《宏观开发学》,主要是研究如何利用人力,物力等资源,来完成从模糊零散的想法到计算机硬件这个转化过程;第三块叫《业余开发学》,是针对业余开发的实际情况,说明业余的资源有哪些,有哪些特殊性,根据这些实际,如何有效的利用这些资源来开发;第四块叫《三国游戏业余开发学》,主要是根据三国游戏的游戏特点,确立游戏架构,并根据业余开发实际和游戏特点来制定开发方法。这套理论体系的建立,就把三国游戏开发涉及到不同因素方面给分离开了。实际上,下半年的理论研究的进展基本都可以归分这四个方面。
微观开发学角度,最重要的进展就是对程序本质的认识。认识经历了这么一个过程,早在战争开发的时侯,就有了逻辑和界面分离的概念,当时遇到存读档问题时,给架构带来了很大的麻烦,因为存读档既非逻辑又非界面。后来,把与数据处理相关的东西称为逻辑,与数据处理无关的东西叫作设备。而界面只是设备中的一种。后来研究数据结构的时侯,发现了一个问题,逻辑部分最后还是要靠设备来实现,那程序的本质是不是设备呢,显然不是,这个问题困惑了好一阵子。实际上,逻辑是独立的东西,设备只是实现它的工具,它是广泛存在的。逻辑和设备区别开了,但是还有个问题仍然没解决,为什么在不同平台下开发出的程序不一样呢,比如以操作系统为基础的开发工具和以网页为基础的开发工具,设计思路就有很大的差别。一开始认为系统的外部环境不同,但是这并没有认识到本质问题。后来经过进一步思考发现是由于外部环境不同而导致可以利用的资源不同,并且外部环境是多层次的。可见,程序最关键的并不是数据结构与算法,而是它所能利用的资源,所以说程序的本质是数据结构和算法的观点,其实,把很重要的一方面,资源,给忽略了。在12月底,概括程序本质为利用可用设备的先后顺序。这个本质说明了程序不等同于代码,代码只是程序让计算机执行的一种方式。这说明传统的开发中,以代码为核心是不科学的。虽然很多开发也有设计,但是这些设计并不全面,很多设计最终都到了代码这个层面才执行,比如变量名,代码格式等等,这就给开发的组织带来了很多困难,对业余开发来说人员变动频繁,这种做法危害性就更大了。
认识到代码只是执行工具的一种,也存在者一个认识的过程。这个问题的认识是从开发工具和语言的区别开始的,一开始与幸福无关告诉我,开发工具就是用来输入代码的东西,而且有一些辅助工具。经过一段时间的思考,明白了语言和开发工具的本质区别,语言的目的是用来告诉计算机要做什么事的,其实也就是程序运行所需要的数据,而开发工具则是对程序运行所需要的数据进行管理,包括输入,调试,编译,连接等等,与计算机将来要运行的程序是无关的。再后来又认识到描述如何利用资源,语言是必不可少的,即使只用零散的几个词,那也是语言,语言是数据组织的一种方式,组织的方式就是语法,所能利用的资源及其利用方式就是内容,语言是位于语法和内容之上的一个层。因此,可以说开发工具就是把语言输入到计算机中的工具,输完以后就明确了计算机要做什么事。(注:代码是语言的一种,代码是机器能识别的语言)
由于对程序本质的重新认识,开发框架也就重新认识了。一开始,只看到了游戏框架这一方面,没有看到引擎和执行方面。虽然当时也有引擎的概念,但是这两者关系搞不清楚。而执行是在很长一段时间以后才有的概念。最后的总结是,框架,引擎,执行是游戏开发的三个方面,引擎是对与游戏内容无关的共性的东西封装,从这个角度来说,其实一门语言也是引擎,操作系统也是引擎。很多时侯,已有的引擎并不能提供完备的与游戏内容无关的共性的东西,还有很多的东西需要自行开发,这部分仍然是属于引擎的。框架则是指用数据结构进行组织的游戏相关的东西,包括系统,界面,表现三个层面,框架是以引擎为基础的。一个好的框架取决于对游戏内容的认识,不是引擎所能解决的。执行是指跟计算机程序运行环境有关的东西,比如程序运行时分配的内存,读取的数据,它也包含系统,界面,表现三个层面,只不过它要解决的是计算机本身的问题以及如何使用框架的问题。
关于界面的问题也取得了重大进展,当时我在思考图形游戏和文字游戏区别时发现操作和表现形式可以不同,但是要输入和输入哪些内容其实都是一样的,这就使我产生了增加界面逻辑层的想法,界面逻辑层在属性上只有要输出的数据,在功能输入参数上,只有要输入的数据,在功能内容上有操作游戏系统和跳转界面两种,这样一样,界面逻辑和表现实现了分离,为同一个界面换不同的表现也不是难事了。
从宏观开发学的角度来说,最重要的是消差理论。游戏开发存在着从模糊零散的想法与计算机硬件可执行代码的一个差。游戏开发就是投入一定的工作量使其差消除的过程。消差需要综合利用各种资源才能完成。消差存在的从非逻辑到复杂逻辑,从复杂逻辑到简单逻辑,从简单逻辑到物理,从设计到实施的几个过程,每个消差过程都需要不同的知识,因而需要不同的人员完成,每个人完成不同内容的不同消差方面。可见,游戏开发的过程中是存在多种资源,需要进行有效的管理,这是宏观开发学所研究的重点内容。
在分工方面也产生了初步的理论,传统的策划,程序和美术的分工,尤其策划和程序的分工,存在着对人这个资源依赖过大的弊端,其原因是这些分工所产生的成果可理解性和可维护性弱,一旦处在人员不稳定的业余开发环境中,这个弊端可以直接导致游戏开发失败。因此,我认为游戏开发应该强化设计,淡化执行,并且设计时需要有易于理解和维护的语言和工具,而执行可以由设计着本身负责,但执行不能对设计有任何变动。当然,这样的做法的缺点是要花更多的时间,特别是现在没有把设计直接转化为成果的工具下,所以这个方案不能一步到位,可以逐步推行,先从最重要的程序方面着手,起码保证能开发出东西来。此外,传统的策划,程序和美术的分工界限不明确,这需要用消差理论给予明确的界定。当然,消差不是这些分工唯一的职责,交流也是这些分工职责之一。
对于业余开发学和三国游戏业余开发学,08年并没有太多深入的研究,所取得的成果在之前已经提过。
除了游戏开发理论取得进展外,对于游戏本质和游戏组成的认识也有了进展。游戏本质就是对一个现实系统在某个层次的抽象。这个结论说明了,三国游戏开发要做完整,不一定非要大地图,非要部队移动,其实只需要把三国时期的军事,内政,外交以某种形式抽象出来,游戏就完整了。这就促使我对于新战略三国的设计思路进行了再思考,最后决定第一期暂时取消大地图的表现模式而改用城池地图,当然作出决定还有策划和美术的因素。
关于游戏组成的问题,目前认为一个游戏由内容和模式组成,内容相当于数据,模式相当于数据结构,模式包括玩家可操作的资源,操作的规则以及游戏胜败的条件。游戏模式包括逻辑模式和表现模式(含图形、声效和操作)。以上都定义了,那么一个游戏的轮廓应该是明确了。分析一个游戏质量的好坏,一方面可以从内容和模式着手,另一方面则是从游戏运行的平台着手。对于后者属于保键因素,即做的好不会提高效用,做不好会损害效用。此外,游戏的质量和游戏开发的质量是有很大区别的,游戏开发的质量还需要考虑可扩展性,兼容性等等因素。
08年的下半年产生了一堆的理论成果,是继05年来开发的又一转折点,通过这次理论的研究,思想的重要性进一步被提升,工具的重要性进一步下降,我到目前为止掌握并使用的只有VB6和DX8,我认为工具虽然会影响思想的发挥,但并不是决定因素,开发游戏从长远发展来说,思想重于工具,因此目前先发展思想,至于工具,那是更新换代很快的东西,只需要在工具不适应思想或者是适应思想的成本太大时才需要换工具,目前VB6和DX8远未达到不适应思想或适应成本太大的程度。之所以08年产生了很多新的理论,除了多年的实践,还有一个很重要的原因,那就是看书。看书能激活人的思维,从与自己不同的角度来思考问题,从这一方面看,比自己在那想又想不全面要好得多。当然看书是需要一定的实践经验才能深入理解的,以前我由于实践经验等各种原因导致很多理论性的书看不懂,因而也不能强迫自己去看那些看不懂的书。在这种情况下,还是需要加强实践。另外,08年认识了很多有技术实力的人并与之交流也是一个重要因素。


顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2024-12-27 17:12
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.008920 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP