我罗斯方块最终篇(Block类)
负责的任务
- 完善Block类的相关函数及变量;
- 对Block类中函数进行调整改进,并于其他人负责的类相互配合;
- 对Block类的函数功能进行调试;
- github项目地址。
效果图
- 具体可见总篇,一下仅为部分参考

代码要点
1.首先在写Block类过程中,我先把Block类分成了Block.h和Block.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类)的更多相关文章
- 我罗斯方块最终篇(Player类、Game类)
我罗斯方块最终篇(Player类.Game类) |--------------------项目GitHub地址--------------------| 目录 我罗斯方块最终篇(Player类.Gam ...
- 我罗斯方块最终篇(Interface类)
负责的任务 游戏过场及界面设计 Interface类的基础实现 根据队友需求完善Interface类功能 Interface类的本地测试 辅助队友改良游戏操作 代码要点 我们主要是通过控制台进行界面渲 ...
- 我罗斯方块第二次作业(Block类)
负责任务 完善Block类的相关函数及变量: 对Block类的函数功能进行调试: github项目地址. 开发日记 2020.5.11 今天和朋友们讨论了如何分工的工作,我负责的部分是Block类的完 ...
- 我罗斯方块第二次作业(Player类)
我罗斯方块第二次作业 我的任务 完成player类的编写 player类的测试 我的计划 类的设计: Player类作为一个玩家类,需要处理和玩家有关的所有信息,以及维护玩家的游戏页面map.关于玩家 ...
- #企业项目实战 .Net Core + Vue/Angular 分库分表日志系统六 | 最终篇-通过AOP自动连接数据库-完成日志业务
教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 06 | 最终篇-通过AOP自动连接数据库-完成日志业 ...
- cocos2dx游戏开发——别踩白块学习笔记(一)——Block类
一.Block类介绍 当然啦,Block类在这个游戏里就是必需品= =,因为整体都是由这个搞出来的,所以我们可以把游戏需要实现的功能都放在这里. 主要有下面这些功能(经典模式): 1.创建一个Bloc ...
- 12.5.3 UNIVERSAL:最终的祖先类:
<pre name="code" class="html">12.5.3 UNIVERSAL:最终的祖先类: 你可以把 UNIVERSAL 看作最终 ...
- 杂谈PID控制算法——最终篇:C语言实现51单片机中的PID算法
真遗憾,第二篇章没能够发表到首页上去.趁热打铁.把最终篇——代码篇给发上来. 代码的设计思想请移步前两篇文章 //pid.h #ifndef __PID__ #define __PID__ /*PID ...
- 一次有趣的XSS漏洞挖掘分析(3)最终篇
这真是最后一次了.真的再不逗这个程序员了.和预期一样,勤奋的程序员今天又更新程序了.因为前面写的payload都有一个致命的弱点,就是document.write()会完全破坏DOM结构.而且再“完事 ...
随机推荐
- ARC122C-Calculator【乱搞,构造】
正题 题目链接:https://atcoder.jp/contests/arc122/tasks/arc122_c 题目大意 一个数对开始是\((0,0)\),每次可以选择一个数加一或者让一个数加上另 ...
- 最详细的搭建web自动化测试网站,别再说你没有实战项目(文未有福利)
一步步教你搭建开源网站 环境准备: Tomcat shopping商城文件 jdk环境 Mysql环境 解压shopping.rar拷贝至tomcat/webapps 在navicat导入数据库db_ ...
- ❤️【Python从入门到精通】(二十六)用Python的PIL库(Pillow)处理图像真的得心应手❤️
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本篇重点介绍Python处理图像的标准库PIL库,处理图像真的的很方便. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题及需要,欢迎踊跃 ...
- 【死磕NIO】— 阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,这你真的分的清楚吗?
通过上篇文章([死磕NIO]- 阻塞.非阻塞.同步.异步,傻傻分不清楚),我想你应该能够区分了什么是阻塞.非阻塞.异步.非异步了,这篇文章我们来彻底弄清楚什么是阻塞IO,非阻塞IO,IO复用,信号驱动 ...
- gcc、g++、gdb安装
Windows安装 有闲工夫在Windows上安装g++/gcc/gdb,还不如装个虚拟机安装Linux,在Linux上安装 但是我还是要讲的 首先,需要安装MinGW,MinGW,是Minimali ...
- 网络基础--简单理解什么是DNS? TCP? UDP? Http? Socket?
什么是IP 协议? 协议就是为了实现网络通信而创建的一系列规范. 通常我们的网络模型从上到下共分为4层: 应用层, 传输层, 网络层 和数据链路层. IP协议属于网络层协议,它精确定义了网络通信中 ...
- CF123E Maze(期望dp,树形dp,式子)
题目大意: 给你一棵树,边权都是1,每一个点有一个是起点的概率和一个是终点的概率,你将以起点为根,开始在树上随机dfs,每到一个点,就会将他的所有儿子随机打乱成序列,然后按照那个随机顺序走完,直到走到 ...
- 北鲲云超算如何让仿真技术、HPC和人工智能之间的深度融合?
在CAE领域,随着仿真技术在多个行业的深度应用,也带来了仿真模型日益复杂.仿真过程数据倍增.仿真计算费用昂贵等问题,降阶模型.人工智能.云计算等多种技术和仿真技术的深度融合,成为了仿真技术的重要发展趋 ...
- 来说说JPA、Hibernate、Spring Data JPA之间的什么关系?
目录 JPA Hibernate Spring Data JPA 实践 来说说JPA.Hibernate.Spring Data JPA之间的什么关系 Java 持久层框架访问数据库的方式大致分为两种 ...
- Less-25 preg_replace2
Less-25: 核心语句: 各种回显也均有. 通过blacklist,我们可以发现,本题屏蔽了and和or. preg_replace函数中正则表达式后面的i是一个修饰符,代表正则匹配时不区分大小写 ...