搞游戏的有很大一部分原来并不是计算机系的,所以写出来的程序比较野。尤其是业余的刚开始步入这个领域的。本人也正在经历这种转变。因此,在这里写一下我所领悟的一些东西。希望对初学者有益。 代码组织: .h 中 1) 用#ifndef xxxx #define xxxx #endif xxxx 来定义文件。 2) 尽量少包含其他的头文件,避免物理上的硬关联。 .cpp 1) 尽量在.cpp中包含其他用到的头文件,避免物理上的硬关联。 代码风格: 好的代码首先要有好的代码风格。因此,作为初学者相比较专业的转变的一个比较重要的是确定自己的风格。 变量,函数的格式: 如果写得比较多了,或是离的时间长了,又或是代码给别人看。那么,清楚的代码很大程度上就是靠变量函数的格式了。要让读者一目了然才行。 我一般这样定义: 类中的变量 d_ 开头(很多人喜欢用m_), 全局g_ 开头, 参数,局部变量就没有了。 后面紧跟的是类型,如 b ---- bool, lp-----指针, sz------字符串 等等。 再后面就是 首字母大写变量名。 举个例子。 d_bReady 表示类中变量, 一个bool型的, 标示着各类目前可用。 函数这样定义: 首字母大写。如:void DoLoop(); 等等。 这些自己去坚持着用去寻找自己的风格就好了。用小写加下划线不错,我喜欢。不过好像这种风格的linux下和网络下更喜欢用,windows客户端还是有些区分会比较好??这纯属个人喜好了。 结构,enum,等等的定义都挪进类中就好了。 如 class CFrame { public: enum{ DEF_ERR_NOTHING = 0, DEF_ERR_OUTOFMEM, }; struct node { ...... }; public: int GetCurErr() { return d_iErr; } private: int d_iErr; ... }; 调用的时候会强迫你把类的类型写上去,看上去繁琐一点,不过代码开始读会更清楚一点吧。 如 定义一个结构指针 CFrame:: node * lpNode; 代码中如: if( g_frame.GetErr() == CFrame:: DEF_ERR_NOTHING ) {.....} 最后聊一下程序的3种风格。 c,带类的c,面向对象。 其中,新人应该是对面向对象比较好奇吧。但是我感觉面向对象的的几种模式并不一定就是游戏风格的首选。例如很多情况下如单体类更像是extern xxxx。因为本身的最重要的关联关系没有做什么化解。相反程序还要多做很多工(虽然也并不多)。单体类存在的最大意义就是能保证工程中有唯一的实例。 这些还是留在下次再说吧。 |