团队作业2
-
代码规范
-
a) 代码设计规范
-
1.分不同函数完成不同的特定的任务
代码编写过程中,应该尽量把要实现的功能分函数去写,每个函数完成特定的一部分功能,即函数的功能就像邹欣老师说的那样——“只做一件事,并且要做好” !最后通过main函数把其他实现特定功能的函数整合起来。 -
将功能分函数处理可以避免我们在后续开发过程中代码的重复书写,而造成结构混乱。而且这样做也有利于我们逻辑清晰。
-
2.使用goto达到函数唯一出口的目的
这个我就不细说了,我不太赞成这种观点,函数可以使用if,else,else if,break,continue,或者其他布尔型变量来实现这个,使用过多的goto会降低代码可读性。 -
3.通过添加“断言”的方式对参数进行验证
程序要有能力去判断用户传入的参数是否正确,这就需要用到断言![在这学期之前,从没听说过什么断言!这学期,通过看这本书,才了解的。] 断言的使用,有利于更好的防止bug的发生,防患于未然!是一种一打一的好方法! -
4.异常处理
一段代码的鲁棒性就体现在异常处理上,我们要考虑清楚,除数是否为0,数组是否越界等等常见的错误,另外我们需要注意,捕捉一场,是为了处理他,不要什么都不做就这样过去了!对异常进行一定处理,是代码具有鲁棒性才是我们进行异常处理的目的。
异常情况并不总是会发生,所以在进行异常处理时,还要考虑清楚它的时间开销空间开销,是否值得我们去处理。 -
5.类——class
我们都知道,一些面向对象的程序语言设计,如C++,java,都是基于类实现的。在类的设计上应该注意以下几点:
考虑安全因素,数据成员要分清类别:public,private,protected
数据成员如果声明成public是很危险的,用inline取而代之。 具体的用法请参加下面的博客
java中public ,private,protected的区别
C++中public,private,protected的区别
Python中public,private区别
......
构造函数
构造函数中只对数据成员进行简单的初始化就行,没必要执行过于复杂的操作,这个和上面1.是一样的,每个函数只执行特定的功能。
析构函数
就比如,C语言指针一定要手动释放,析构函数有他要做的事——清理工作。
拿不定主意的时候,用成员函数,避免使用运算符
使用const关键字的对参数进行保护
使用const将参数指向的数据声明成只读的,避免在不必要的地方修改了这个数据。
-
-
b)代码风格规范——简单,易读,无二异性(这一部分,只是编写代码的习惯,并不是硬性要求)
-
1.变量命名
函数或者参数的命名,除了要准寻命名规则外,还应该应该避免过多的描述,简单又能清晰地让队友知道变量的作用。尽量避免表意不清的变量,如i,j,ilovefang等等,这种不能准确表达出变量作用的名字。我们在开发过程中遵循以上原则。 -
2.使用下划线简短变量命名
下划线的作用:用来分隔变量名字中的作用域标注和变量的语法,如m_name。 下划线也可以做前缀。个人理解:使用下划线去命名的目的,是为了防止变量命名太长太大,可读性差。 -
3.变量命名还应该注意大小写
对于有多个单词组成的变量名,除了可以使用下划线来缩写以外,还可以使用大小写来区分。例如:jumpduration,全小写不利于读写,这样:JumpDuration就好一些,还可以使用jump_dura进行缩写处理。 -
4.注释
我们都知道,程序——是给人看的,不只仅仅是机器!这样,注释就显得必不可少了!在适当的地方添加适当的注释,又利于代码后期的维护和团队其他成员的理解。就比如:主函数中包含的其他函数,要注释他们是干什么的,即作用。
但同时要注意,不应该过分添加注释,是当注释有利于代码理解,但过分注释就有些多余,起不到关键的作用。 -
5.缩进
使用Tab键代替2,4,8个空格,这也是一种隐形规范。 -
6.使用括号标明优先级
对于一个复杂的表达式,括号的使用显得很有必要,就比如:++*i,这种就让人不太容易理解了,可以替换成"++(*i) ",这种一看就知道优先级的
-
7.分行
尽量避免多行代码挤在一起的情况,对代码进行适度分行能提高代码可读性。
-
-
-
团队项目的数据库设计和ER图
- 我们的大作业没有用到数据库,所以这一部分就省略不写了。 那你可能会有疑惑了?那你们的数据(就比如成绩)存在哪里?
- 我们设置了本地的一个存储变量——ScoreDisplay,在游戏玩家得分之后,一方面会及时的在玩家屏幕上显示成绩,另一方面,会在本地保存一个成绩变量的副本,并且,播放相应的得分动画和得分音效。关于得分逻辑的相关js代码如下:
gainScore:function (pos) {
this.score += 1;
this.scoreDisplay.string = this.score.toString();
cc.sys.localStorage.setItem("ScoreDisplay",this.scoreDisplay.string);
var fx = cc.instantiate(this.scoreFXPrefab).getComponent('ScoreFX');
this.node.addChild(fx.node);
fx.node.setPosition(pos);
fx.play();
cc.audioEngine.playEffect(this.scoreAudio,false);
},
-
功能流程
- 1.场景选择功能,提供5个场景,**自由切换,同样的玩法却能带给你不一样的体验**。
![](https://images2018.cnblogs.com/blog/1283654/201806/1283654-20180618013337547-238984781.jpg)
- **2.成绩计算功能**。[内含一套独立的成绩计算逻辑]
![](https://images2018.cnblogs.com/blog/1283654/201806/1283654-20180618013432458-1401276005.jpg)
- 3.**通过点击鼠标(如果您是在电脑上)或者手机屏幕(如果您用手机打开),使主角跳跃躲避障碍物**
- 4.这里给出我们做的项目的二维码,当然,不是微信web开发者工具上的,那个必须要添加你为体验者权限才能使用,这里的二维码是cocos creator 上的项目二维码。**使用之前请注意:确保您的手机网速稳定保持在200kb以上,一般使用流量是打不开滴,校园网还有一线希望!可以尝试一下啊[嘻嘻]**
- ![](https://images2018.cnblogs.com/blog/1283654/201806/1283654-20180618015857427-920972666.jpg)
-
团队分工和贡献分
姓名 | 任务 | 分工比例 | 贡献分 |
---|---|---|---|
刘宇莹 | 游戏逻辑和脚本代码编写人员 | 50% | 10分 |
孟鑫菲 | 游戏前端设计和测试人员 | 50% | 10分 |
inuyasha