ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

我罗斯方块最终篇(Block类)

2020-06-11 12:02:00  阅读:253  来源: 互联网

标签:函数 罗斯 代码 int Block 类中 方块


负责的任务

  • 完善Block类的相关函数及变量;
  • 对Block类中函数进行调整改进,并于其他人负责的类相互配合;
  • 对Block类的函数功能进行调试;
  • github项目地址

效果图

  • 具体可见总篇,一下仅为部分参考

代码要点

1.首先在写Block类过程中,我先把Block类分成了Block.hBlock.cpp

  • Block.h中编写了Block类的雏形,包括私有数据成员以对应成员函数的声明;
  • Block.cpp中主要是对Block.h中成员函数进行定义;
    2.接下来就简要写写Block类中所负责的部分(即什么作用),具体代码在上面给出的github项目地址中可查看:
    在Block类中包括了以下几种函数:
   Block();  //初始化随机数 
   void RandBlock(); //随机生成方块
   void TurnBlock();//旋转方块: 顺时针
   int block[4][4];//存储生成方块
   int getColor(); //获取当前颜色 
   void Block_to_block(int BlockType_form_[][4]); // 方块拷贝到block数组
   void ChangeBlock(int BlockType_form_1[][4],int BlockType_form_2[][4],
   int BlockType_form_3[][4],int BlockType_form_4[][4]);  //配合TurnBlock(),进行方块的旋转
  • Block()这个函数是与上次代码修改很大的地方,在上次代码中,我采用的是在构造函数中将存在的18种数组进行数据初始化,而考虑到如果我们多次使用Block类,就需要多次对这十几种二维数组进行初始化,会使程序内存增大,效率降低。所以,这次把所以数组都改成了static形式,并且采用的直接赋值的方式打出数组内的值,而构造函数里面则是放了srand((int)time(0));播下种子初始化随机数,也解决了上次留下的问题;
  • RandBlock()随机生成方块的函数,在测试中我们发现,按照之前定义的数组变量,因为有些方块旋转后的形态和之前一样,我就没有重新定义数组,但是这样会导致:
    (1)随机生成方块时有些方块出现次数较低;
    (2)函数不够有相同性,使代码更加冗长;
    而在这次中我也新增加了数组,将每一类型的方块都补全了四种形态,并且将在RandBlock()中重复赋值操作写成了一个函数Block_to_block,在随机生成函数中调用,有效的解决了上面两点问题;
  • TurnBlock()主要的差别就是将原先的逆时针顺序写成了顺时针,增加了游戏体验感,并且搭配ChangeBlock函数,使其中相同操作,通过调用函数实现,简化了代码;
  • 最后就是getColor()这个函数主要是与interface类中的函数进行结合,我们原先是打算在随机生成方块的同时,也随机生成颜色,但是这样会显得程序不够简洁,页面也不是很舒服,最后我们就决定采用每一类型的方块固定一种颜色,通过调用此函数,interface类中的函数可以获取Block类对象中方块的color值进而赋予不同的颜色
    以上就是Block类中主要代码的要点及介绍,具体代码在上面给出的github项目地址中可查看、阅读,当然也知道代码中可能还存在很多需要改进的地方,希望大家能多交流指教!

收获与心得

1.在这次合作写游戏的过程中,认识了很多以前从来没有见过的头文件以及相应的函数,这是我觉得收获最大的地方。虽然其实很多地方写的都有参考网络上的代码,但是在参考中学习了很多知识。最重要的一点就是,自己开发游戏也好或者软件也好,感觉都和平常在PTA上的练习有很大的不同,特别是多文件处理方法,这一点也是我第一次使用的,也希望在今后学习中能够不断加强完善自己;
2.在合作过程中,我们采用github提交自己负责的代码,通过讨论、测试不断修改体会到了合作的重要性以及快乐,这是一种新的模式,从来没有接触过的模式,我相信在将来工作中也会有这样的情况,大家负责一部分,然后把共同组合成一个大程序,这种感觉真的无比的满足和快乐。最重要的是,在负责自己的代码同时,也可以看看别人负责部分的代码,不断学习,学习他们是怎样进行处理和调试的,这对我启发很多,也是我在他们身上学到的最重要的一点;
3.在测试修改代码中有过长期的卡壳,但是我们最终都做出来了,真的非常满足和自豪,还发给朋友们看了我们制作的游戏。没有想到,我们平常只会玩游戏而第一次学着做游戏,过程虽然很艰辛,但是最终成果却让我满足和自豪;
4.学习了C++面向对象的知识,再结合此次作业,我对比了c与c++方面的不同,也看到了c++在编写大程序中的好处以及方便性,希望能够在今后学习中,或者在以后自己开发过程中,能继续运用这个思想!

依然存在的问题

最后写写在这次开发过程中还存在着一些问题以及不满意的地方:
1.首先是代码不够简洁,由于ddl很快就到了,所以就没有再进一步进行优化,可能程序效率就没有那么的高,我想再之后可以将比如在类中定义的私有数据如Type、Form等能整合到方块数组中,使他们封装性更强,代码也更加简洁。因为如果改动的话,在Play类中碰撞部分就会有很大改动,这点这次就没有进行调整;
2.因为初始化随机数我们是采用time.h中的srand((int)time(0)); 语句进行的,所以双人模式下玩家在刚刚开始的前两个方块会相同,因为时间相同,所以需要进一步优化调整。原本上次想去试试助教给的建议,但是搜索完之后还是没怎么弄明白,所以就此作罢;
3.由于学习完继承相关的知识,一直想在方块中得到实现,但是由于我们采用列举出所有28种方块,因此无法用到继承方面的知识,这是感觉很遗憾的地方,也看到了其他组有的同学运用继承的知识写,想在今后学习中也能使用继承,而不仅仅限于做题。

标签:函数,罗斯,代码,int,Block,类中,方块
来源: https://www.cnblogs.com/lvhang/p/13092348.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有