我罗斯方块第二次做作业——汇报(1)
作业描述 | 详情 |
---|---|
这个作业属于哪个课程 | 2020面向对象程序设计 |
这个作业要求在哪里 | 我罗斯方块汇报(1) |
这个作业的目标 | 1.汇报自己这个阶段的开发进度。(完成了哪几个模块) 2.讲述自己遇到的问题和尝试解决的方法和最后的结果(解决与否) 3.制作一篇开发日记,例子如此,描述自己开发某一个模块的过程。 |
作业正文 | 如下 |
小组成员 | 031902535陈玉娜 031902537江舒颖 031902538李晓芳 |
参考文献 | EasyX的安装与使用 C++俄罗斯方块 俄罗斯方块(Tetris) VC 源代码 |
项目GitHub地址 | https://github.com/dump16/Tetris |
2020年5月15日
第一次讨论
在第二次的作业中,我们一开始讨论的是分工完成各个模块,但是在分工时,发现各个模块的基础几乎都建立在方块类上,如果等方块类写完再写其他模块,在时间分配上无疑是不理智的。而且对于方块类的想法大家都有所不同,实现过程中还会有其他问题出现,可能有一些功能暂时无法完善。在诸多因素的影响下,我们决定大家都去写一下,尽量完成各个模块,能写多少是多少,在周三的时候再次讨论。
2020年5月20日
第二次讨论
到今天还是有点没有方向,晓芳研究了EasyX库,并且做了游戏页面,我和玉娜都写了一下方块类。讨论开始时我们讨论了难以写下去的地方,分享了各自的参考资料,并且对接下来需要实现的地方进行了讨论。最后在这次讨论中更加具体地明确了分工。玉娜写方块类,晓芳负责了游戏界面及方块的移动,我负责写开发日记并且发布博客,并且准备做键盘相应和进一步的游戏界面。在周五时在进行结果的汇总。
2020年5月22日
关于方块类的编写
玉娜的思路:我在写的时候从方块类开始写,从基础的方块创造、打印、到移动、旋转、消行等。在创造方块的时候,最大的问题是方块的展现形式。如果追求简便,那么用简单的“*”或“#”表示方块当然可以,但是在美观性上无疑是大打折扣。如果想要较为美观的方块,那么书写难度将会提高。考虑之后,决定先试着能否实现较为美观的方块,如果实在无法实现再用简便方块。实现过程中,参考了一些单人俄罗斯方块中方块的实现,实现方法也是多种多样。有的是先实现7种基础方块,再考虑旋转,有的是考虑包括旋转的方块等等,实现过程和实现方法的多种多样,在选择上是有些困难的。最后在参考过后,我初步选择了一种实现方式(如果后期不适合再更换)。在打印方块时,要对方块进行染色,了解了一下之后,主要在“Easyx库”和“Windows.h”中选择。在了解两种方法对染色的实现方法后,我初步选择了“Windows.h”,因为在实现时只要一条染色语句即可,但是色彩不是特别丰富,不过目前时够用的。
代码已发送到github中(由于总结时认为晓芳的代码更为契合,最终选择晓芳的代码作为最终成果)
开发进度
目前已实现以下功能:
- 创建游戏窗口,绘制运行界面
- 设置方块,使方块自动下落(其中计时器的实现还很粗糙)
方块类实现随机出现、绘制、擦除、旋转功能,尚未接入键盘响应功能
遇到问题
-
实现方块类中基础方块的定义(已解决)
选用一种尽可能简单、容易理解、便于实现操作的定义方法是我们遇到的第一个难题。
针对7种方块,共28种旋转状态,我们主要采用 4*4 矩阵来存放方块形状,旋转状态在Rotate函数中实现。 -
不同类之间的函数调用(暂时解决)
暂时采用定义类的方式解决,正在探究使用友元函数 -
不同文件之间的宏调用(已解决)
在所有文件中复制相同的宏定义 -
对方块染色(已解决)
绘制染色是我们在设计过程中分析较难的一部分,但在Easyx库的函数下,似乎也很容易上手? -
计时器功能(未解决)
采用了Sleep函数,方块的自动下落还很僵硬。 -
同时对两个游戏池进行操作(未解决)