前面几篇文章讲了游戏程序开发什么是复杂度的问题,还进了游戏程序开发的实际意义的问题,现在就要来聊一聊游戏程序开发的复杂度控制的方法与实践。游戏程序开发避不开谈的一个问题,游戏的复杂度的问题。游戏的复杂度应该控制到多少游戏开发者应该细细实验才能得出最终的结果。在《The art of unix programming》中,复杂度的控制被看的非常的重,里面一句话提到编程项目的核心就是对于复杂度的控制,以及simple原则其实也在讲这个事情。
实践下来,复杂度控制的能力在我看来可以从三个方面来拆解:渴望,目标与时间积累。
渴望:
首先最有效的方式就是去承担实际的,要覆盖非常大范畴的开发任务,这种情况下,你就会对于复杂度有切肤之痛,你就会非常真切的了解到复杂度是什么,什么是重要的,让你抓狂的,什么只是虚张声势,无足轻重的,有了非常充分的渴望,那么后面的积累和实践就容易多了。
目标:
方法和实践会是非常的多,但是目标却简单很多,就是能够始终保持对于整个系统,在代码级别非常的清晰。在开发设计和做决定的时候,能有心如止水般的顺畅即可。所以一定程度上,可以说复杂度控制还是比较主观的,也很看火候的。比如有时候项目本来就比较小,即便复杂度控制不是很好游戏程序开发员,但是也非常的清晰,hold住,那就可以把更多的精力放在其他方面。
方法:
个人实践中,这几个方面可以注意下:
– 任务切分+代码整理:在较小型的任务结束的时候,就开始做小规模的代码整理,始终保持代码是干净的
– 模式+自然:积累更多的模式,比如一大片的代码,其实就是做了pool的事情,那么这一大片的复杂度就是一个词:pool。让所有的东西都更加自然,符合编程的优秀实践,这样需要你记和注意的东西就很少,那么它就是一个很低的复杂度。
比如下面这个代码:
int a[5];
for(int i=0; i{
printf("%d",a[5]);
这个在实际游戏程序开发中就不是一个好的实践,在看到这片代码的时候,应该本能的注意到a[5]如果它的大小变化了怎么办,就会出现for的访问越界的可能。
#define ARRAY_NUM(a) (sizeof(a)/sizeof(a[0]))
int a[5];
for(int i=0; i < ARRAY_NUM(a); i++)
printf("%d",a[i]);
那么再次看到这样的代码的时候,就会比较放心,一路就过去了,那么这个就可以认为是复杂度比较低的(需要注意的或者刻意要记的东西少)。
所以保持一个总结积累就变得非常重要,对于编程模式或者算法越来越多的积累,那么在开发和思考的时候,就可以以更高的维度去做,那么对于压缩复杂度,提升思维速度和质量就非常的重要了。
并且像素游戏素材,在这个层面上看,尽量返璞归真的编程风格是一个更加有力的编程风格。
复杂度控制的“敌人”
没有意识到“复杂度”的重要性
遇到不少程序员(甚至是大部分)对于复杂度无感,把一些算法和效率因素重要性远远放在复杂度之上,甚至是以写出很复杂的程序为荣。这一块不是很容易沟通,只有实际去承担大量的程序实现,对复杂度有切肤之痛的情况,才能有一个真实的认识。
还有就是没有及时和项目组沟通,争取足够的时间来处理复杂度问题以及清理代码游戏程序开发员,相当多的程序员都不会对复杂度有充分的认识,那么要求项目经理有足够的认识在我看来不太合理。基本上较有可行性的方法是程序员给予足够的沟通,以及在实现估时上留有充分的余量,而如果出现没有意识到,没有沟通充分,甚至是为了取悦manager而无视复杂度,疯狂追求实现时间的情况,这都太糟糕了。
进度问题
时间紧任务重的情况,这个前面已经提过了,但是实际项目中还是会反复出现,这块其实是可以是一个大的话题。
首先每个程序员需要建立一个代码实现的profile机制–我个人一直使用worklog,然后对于自己的开发效率有一个跟踪,这样才能知道哪种方法是正确的更快的。磨刀什么情况下才不误砍材工,profile了才知道。
根据具体情况采取具体的策略,个人经验下,相当的情况都是一边实现一边整理是更快的。
编程基本功人物立绘,就是快速稳定的实现了,这个需要长期的有意识的积累。
good for the programmer’s soul
“Low-level programming is good for the programmer’s soul.” – John Carmack
对于卡神的这句话,无比的赞同,做底层代码实现,对硬件和系统有透彻的理解,对于程序员去清晰的理解整个程序如何运行的至关重要,你就会更好的以底层的思维去思考。
同样的道理,也可以用于高层的复杂度控制上面,更多的优秀的编程实践,更好的理解要做的事情,理解系统本身,最后达到一个最简洁的实现,整个设计和实现的过程,可以让人进入心如止水的状态,同样的”good for the programmer’s soul“。一品威客网有专业的游戏程序开发人才,欢迎来一品威客网发任务。