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

Posted lvhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我罗斯方块最终篇(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种方块,因此无法用到继承方面的知识,这是感觉很遗憾的地方,也看到了其他组有的同学运用继承的知识写,想在今后学习中也能使用继承,而不仅仅限于做题。














以上是关于我罗斯方块最终篇(Block类)的主要内容,如果未能解决你的问题,请参考以下文章

C++俄罗斯方块

java的俄罗斯方块代码

求用JAVA编写俄罗斯方块游戏的源代码

[Unity XLua]热更新XLua入门-俄罗斯方块实例篇

根据俄罗斯方块游戏创建的数组为 JTable 单元着色

python俄罗斯方块