我罗斯开发日记

我罗斯开发日记

这个作业要求在哪里 2020面向对象程序设计
这个作业要求在哪里 我罗斯方块汇报(1)
这个作业的目标 汇报自己这个阶段的开发进度,制作一篇开发日记
参考文献 C++如何移动光标
参考文献 C语言控制台读取上下键指令
参考文献 _kbhit()函数百度百科
github地址
小组成员 学号
肖清江 131901121
陈上委 031902303
黄朝威 031902309

这里是在未采用windows.h下仅仅使用输入出流来处理图形界面
的开发汇报,目前已经完成能够打印边界并生成不同的方块实现
方块的自由下落以及接收来自键盘的信号指示仅能够向左向右
以及加速下落还未能够实现旋转或者说旋转仍旧处在不稳定的
的试用阶段,实现了边界的检测使得向左向右的范围不会与图形
边界相互冲突也能够实现方块下落不会与底部边界,底部已经存
在的方块相互冲突,看似就实现了基础的功能甚至旋转消行都未
可这开发的过程可是真的bug不少。

首先出现的问题就是如何打印边界的问题,这里起初采用的是使
循环来解决问题非边界区的打出空格边界区打印■貌似能轻松解
结果一个循环下来输出的界面仍旧只有控制台漆黑的背景,单独
进行Debug时候发现如果使用一直打印的方法会使得■互相重叠

for(int i=0;i<23;i++)cout << "■";

后来纠正了这一问题但是又想到此次的思路是构建一个数组将
正在下落的方块的数据值计为1着地的方块计为2边界的方块数
据计为3并且配合多个函数使用使用其中一个函数将正在下落
的区域赋值为0后再配合另一个函数根据方块对象数据中的坐标
来重新将变化后的方块区域进行赋值最后再绘图出来在修改如何
处理边界的时候又冒出来个棘手的问题如果按照修改的方案输出
空格和图形那么光标此时已经在整个图形区域的右下方此时处理
输出的内容是不会出现在边界之内简而言之就是如何移动光标让
其到达我想要处理图形的位置,百度后解决了问题。

刷新界面与生成方块比较容易解决,接下来便是如何处理方块的
由下落起初采取的方式便是直接套一个循环确实表面解决结果
发现方块下落速度貌似不受控制还是使用一个局部变量根据局
变量的值的变化来解决以何种速度下降,解决下落的问题后便着
急地加入了局部变量来接受键盘输入的信号按照参考文献加入了
接收指令的switch之后在运行时发现有一个棘手的问题方块不能
够自由下落调试时候发现程序一直在等待我在控制台界面输入指
令旋即发现需要一个能够判断是否有从键盘输入的函数按照现有
知识不够又启动面向百度编程便找到了_kbhit()函数用于非阻塞
地响应键盘输入事件,之后对整个循环进行了重构使得能够接收
信号并处理变化后的图形,有了接收信号并未急于开发旋转模块
这部分功能比较复杂在构建思路中需要先检测条件是否允许以及
如何变化极有可能造成已重构的代码整体的变动,所以先处理下
落中碰底后停止变化并且生成新的方块以及左右移动不会碰壁的
这一问题结果一开始的思路是结合方块对象中的数据成员来判断
是否有出现变形的情况就衍生了先针对方块的种类后针对方块的
状态进行判断是否到达边界的思路,这就很麻烦了因为基本思路
是根据数组的某个位置的值来判断该区域是个什么东西,方块的
基本形状加上方块的旋转能产生15种不同的状态在处理边界的函
数上需要写出至少45个函数处理,代码量就会上升就苦于如何解
绝这一问题直至讨论后得出的解决方法是利用找到每个方块下方
是否是边界或者着地的方块:

1111
221111
222222

像上图中1组成的Z字形方块通过循环找到1下方确实是2此时接收
加速下落的信号是无效的处理为落地并生成新的方块,针对左右
也是通过循环找到是否下落的方块的左右侧是否存在方块或者边
以此来判断能否继续向左移动向右移动,看上去是解决了问题然
而在实际检验的过程中却会出现本该着地的方块的回弹:

           1111
1111         1111   1111  3    1111    3
221111  -> 22         11113  ->  1111  3
222222     222222

调试了一圈过去才发现是因为循环条件设置的错误检查下落的应该
从下往上而不是从上往下,重新调整好循环设置重新运行后还是出
现了问题如果一次性接收太多指令很有可能使得方块重叠:

1111    
221111 ->2222
222222   222222

这个问题就很棘手了直到写这篇开发日记时也未能成功处理这个问题.

总结

遇到比较大的问题 是否解决以及简略过程
边界方块互相重叠 是,添加局部变量解决
无法控制光标位置 是,百度资料后获取相应解决方案,并未了解其中原理
方块速度不受控制 是,通过循环解决问题
无输入方块不下落 是,通过百度资料后使用_kbhit()函数解决
判断边界代码过长 是,通过寻找某个值令其作为判断依据
将要落地方块回弹 是,改变某个循环条件
信号过多处理出错 否,不断敲击键盘方块会互相重叠

模块

模块功能 是否添加
打印方块
下落左右移动
旋转
消行
此消彼长

猜你喜欢

转载自www.cnblogs.com/pekkasuper/p/12918021.html