说来也滑稽,上一篇博客发出来之后,各种大事小情就排山倒海的来了,所以之前计划好的这样一个系列的文章,只好一直停留在腹稿阶段。最近忙里偷闲,把它真正写出来。
之前一直写的一个游戏,最近也决定把它变成网络版,所以代码需要全部重新写了,预计以后单机游戏这个方向,我是完全退出了。把1年多以来的感悟和经验发出来,大家权当借鉴吧。
很多新手程序员和大学生在编写程序的时候,总是习惯于大概想一下代码的结构,然后就开始动手写代码了,之后随时遇到问题随时解决。这种方法不一定是错误的,甚至对于小问题来说,是相当快速有效的。但是我个人认为,这种方法对于游戏程序已经不再适用了。游戏程序说大不大,但是说小也不小了。所以这些朋友如果着手进行游戏编程的话,一定要改掉这样一种习惯。把所有能想到的问题都计划好,要比毫无计划地乱写一气,然后不停地修改之前写过的代码这种方式好得太多。起码从个人心理上,总是修改自己以前的程序,会给人一种挫折感,久而久之就没有心情继续了。说了一大段,其实总结起来也就是前期准备很重要。
要读的书:软件工程,数据结构。无论你打算使用哪一种语言,哪一种引擎,这两本书是脱离开具体实现之外的准备工作。笔者个人认为,软件工程这一块有必要仔细研究一下,无论你买的是哪一本介绍软件工程的书,也就那么几种基本的软件开发方式,各位有必要把这几种方式的优缺点都了解一下,然后选择一种最适合自己实际情况的方式。数据结构这一块也有必要了解。最起码链表,队列,栈等等的基本结构特点要明确。宏观上明确他们的不同。具体实现的问题有很多种方法,比如使用数组来模拟,或者写一个类库,或者直接用C++的STL或者Java的类库,都可以实现这些数据结构的功能,但是遇到具体问题的时候,一定要可以想到用哪种数据结构。解决问题的过程并不困难,但是将问题抽象来建立模型却需要经验、运气很多因素。
然后针对你所使用的语言,再看一本该语言的书。比如C\C++,最好看C Primer或者C++ Primer。笔者个人认为谭浩强的书没有必要看。他的书其实都是针对于大学生入门来用的,既然你都已经打算编写游戏,那么在这种语言上,肯定已经有了一定的造诣。谭浩强的书深入简出,入门确实不错,但是很多具体的语言特性他却省略没有介绍。比如C语言里的一个函数
int function(){}
和C++里同样的函数有什么区别。这样的区别可能很微小,也不一定会特别使用到,但是以后如果在这样的地方犯了错误,绝对让你挠破头皮也找不出来。
再看一看你所使用的引擎所提供的文档。起码要大概知道你所使用的引擎都提供了什么样的功能,有可能以后不会用到,但是不至于以后想用的时候不知道有这么个功能,费了好大力气自己写了一份出来,还不一定有人家写的好。然后针对于那些常用的函数或者功能模块,好好的学习一下。
以上是要准备的资料,这些都完成之后,仍然不要着急动手写代码,先确定一套命名规则,可以使用现成的,也可以自己确定一套,起码要有一种原则,看见变量名要知道它的类型和具体用途,否则代码写着写着,自己就混乱了。比如单单看见一个变量名叫positionX,可以看出这个变量表示的是某个X轴的坐标,但是它的数据类型就看不出来了,这一点很关键,float和int类型做除法,最后的结果是不同的,很容易造成逻辑错误。
写代码之前,最后再画一下你的程序的大概的结构图。能想到什么画什么,一遍一遍修改,到最后越细致越好,不需要精确到每个函数具体细节,但是最好是能够精确到函数的每个程序块。比如绘制鼠标这一个函数是使用DrawMouse()或者DrawMouse( int x, int y),这个例子的区别很有代表性,前者需要在函数中或者全局变量中得到或者记录当前的鼠标位置,而后者则不需要考虑这些,直接根据参数来绘制就可以。这样的选择看起来差别很小,但是可能会对其他函数有一定的影响。比如如果你在全局变量中有两个记录鼠标位置的变量,那么当然不可以使用后边这种方式。注意,这里不是没有必要,而是不可以,传递参数是需要额外的内存和时间开销的,而这个函数每一帧都要被调用,这样1秒内可能被调用很多次,如果你有很多这样不必要的开销,将大大影响你的程序的效率。在画图的时候,你可能没有办法一次把所有事情都想到,你可以一遍一遍地画,每一遍都比前一遍详细一些,直到你认为没有什么需要再添加的为止。
这一篇就写到这里了,下一篇开始要具体开始编写代码了。
浙公网安备 33010602011771号