团队作业3
一、编码规范和编码原则
1、代码风格规范
(1)在每个类声明之火、每个函数定义结束之后都要加空行
(2)if ,for,while,do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都加上{ },方便代码阅读,防止书写失误
(3)尽可能在定义变量的同时初始化该变量(就近原则),对于头文件的指针变量最好在构造函数中赋NULL
(4)'(’向后紧跟,‘,’,‘)’,‘;’向前紧跟,紧跟处不留空格
(5)‘,’之后要留空格,如Function(x, y, z), 如果‘;’不是一行的结束符号,其后要留空格,如for (int i = 0; i<n; ++i)
(6)对于“=”、“+=”、“>=”、“%”、“||”、“<<”等二元操作符的前后应当加空格
(7)对于“!”、“~”、“++”、“--”、“&”(取地址)等一元操作符前后不加空格
(8)对于表达式比较长的for语句和if语句,为了紧凑可以适当去掉一些空格,如for (i=0; i<10;++i)和if ((a<=b) && (c<=d))
(9)长表达式要在低优先级操作符处拆分成新行,操作符放在行首突出。拆分的新行要适当缩进,整齐排版
如:
if ((very_longer_varible1 >= very_longer_varible12)
&& (very_logner_varible2 >= very_longer_varible22)
&& (very_longer_varible3 >= very_longer_varible32))
2、代码设计规范
(1)变量命名规则首选Microsoft公司的“匈牙利”法:变量名=属性+类型+对象,若是指针变量加前缀p,常量全大写 const int MAX = 100,其他变量用类似方法
(2)不可将浮点变量用“==”或是“!=”与任何数据比较,正确方式:if ((x>=-EPSINON) && (x<=EPSINON)) ,EPSINON是允许误差,即精度
(3)if判断中 if (bool)或是if (int ==0)或是if (p==NULL),p为指针
(4)在多重循环中,如果允许,应当将最长的循环放在最内层,最短循环放在最外层,以减少CPU跨切循环的次数
(5)一般将目的参数放在前面,源参数放在后面:void StringCopy(char *strDestination, char *strSource)
(6)如果输入参数以值传递方式传递对象,应该用“const &”方式传递,节省临时对象的构造和析构过程,提高效率
(7)函数体的规模要小,尽量控制在50行以内,函数之间低耦合方便调用
(8)使用断言,assert仅在VS中debug版本起作用,帮助我们找到错误发生的原因,使用断言要明确注释
(9)在malloc或是new申请内存之后,应该立即检查指针值是否为NULL,方式使用指针为空的内存,free或是delete释放内存之后,立即将指针设置为NULL,防止产生“野指针”
(10)注意数组作为函数参数时会自动退化为指针
(11)关于野指针:"野指针不是NULL指针,是指向“‘垃圾’”内存的指针,一般不会错用NULL指针,因为用if语句容易判断,但是“野指针”没办法用if语句判断。生成野指针的主要原因:a)指针变量没有初始化,应该赋值为NULL或是指向合法内存。b)指针被free或是delete后没有置为NULL。如果一个指针是NULL指针,那么free多少次都不会出问题,如果不是NULL,那么连续free两次就会导致程序运行错误
(12)头文件只是用到类指针时,添加类的申明而不是整个类文件,避免生成的工程文件过大,节省编译时间,尤其是在Qt中。
(13)如果派生类的函数与基类的函数同名,但是参数不同,此时无论有无virtual关键字,基类的函数将被隐藏(区别于重载,重写(参数相同))
(14)参数缺省值只能出现在函数的声明中,而不能出现在定义体中,在编译时,缺省值由编译器自动插入。如果函数由多个参数,则只能由后到前挨个缺省。不合理的使用参数的缺省值会导致重载函数产生二义性(当只传入非缺省值时,编译器不能选择哪个重载函数)
(15)构造函数的初始化列表:如果类存在继承关系,派生类必须在其初始化表里调用基类的构造函数
(16)一个类中相同的代码,最好是提炼成一个独立的方法,方便调用。不同类中重复的代码,提炼成一个新的类
二、数据库设计
玩家
关卡
诗句
角色
三、项目E-R图
四、功能流程
1.点击“开始游戏”会发生.....
2.点击“选择人物”会发生....
五、分工及贡献分
杨爽:主要负责美工以及后期优化代码 贡献分:10
陆旺:主要负责主程序员 贡献分:10
胡骏驰:主要负责程序员及测试 贡献分:10
许欢:主要负责数据处理及产品管理 贡献分:10