我罗斯方块汇报(1)
这个作业属于哪个课程 | 面向对象程序设计2020 |
---|---|
这个作业的要求在哪里 | 我罗斯方块 |
这个作业的目的 | 我罗斯方块开发进度汇报 |
作业正文 | 我罗斯方块 |
项目地址 | 我罗斯方块 |
其他参考文献 | Windows程序设计 |
小组成员 | 041901328 王真平 |
开发进展
1.重新设计了类的数据成员和成员函数。分为方块,窗口,玩家,和游戏引擎四个类。
(1)完成了窗口类,并重新设计了游戏界面的样式。如下图:
(2)游戏引擎类主要负责方块的运动,判定,目前实现了方块下落。
(3)实现了玩家类(暂时无功能函数)
(4)方块类,实现了随机产生成方块的功能
2.由于第一次博客完成后开发遇到了极大的阻碍,我决定先做一个单人的测试版,初步实现了我罗斯方块的部分功能,使其能正常下落,移动,变形(不够完善),捋清了设计思路。(此步骤参考了相关视频)
遇到的问题及解决
当完成第一次博客继续开发时,发现方块下落无法在窗口上实现,且不同类之间相互调用杂乱,接口繁多。在调试过后发现存在如下问题:
1.在windows编程绘制窗口时,在错误的消息下使用了成员函数,导致无法展示出下落的方块。这个问题在我将将函数放到正确的消息下后可以解决。
2.做第一次设计时,还没学到静态数据成员和友元函数,以及自己把类定义在错误的位置,导致的问题就是数据被反复的覆盖,没办法进行正常的游戏。
而且没有友元函数,导致我的函数不仅接口繁多,而且在很多功能的实现上无从下手。这也是我重新设计类的数据成员和成员函数的一个重要原因。
在已有程序出现这么多问题后,我决定推到重来,将背景数组和其他数据设置成静态变量,调整了几个类的关系,使功能需要配合使用的类设为了友元类,以简化接口复杂程度和实现功能的便捷性。
开发日记
5月19日
静态数据成员和友元函数像是给我打开了新世界的大门,我突然就相同了怎么把几个类进行联系。于是:
class Player
{
static int score1; 静态数据成员,就可以让我不必再担心在重复的定义类时让数据被覆盖,丢失!!!
static int score2;
};
class Windows; 这个友元类真是雪中送炭!!!我的老大难问题一下就解决了
class Square
{
public:
static int arr_square[2][4];
static int arr_square2[2][4];
static int P1_x_square;//方块类型
static int P1_y_square;//方块横纵坐标
static int P1_squareId;
static int P2_x_square;
static int P2_y_square;
static int P2_squareId;
public:
//产生随即块 ###这两个产生的随机块的函数终于可以更方便的运用,多亏了友元函数!!
int CreatRandomSquare();
int CreatRandomSquare2();
};
class Windows
{
friend Square;
//地图背景
static int arr_background1[20][10];
static int arr_background2[20][10];
public:
//画方框
void Onpaint(HDC hdc);
5月20日
接下来这几个函数实现就迎刃而解,真是太棒了!
//初始化
void OnCreat(Square & x) ;
//显示方块
void PaintSquare(HDC hmemdc);
//显示变2的方块+变色
变色我暂时还没太想好,不过这个函数可以写出来了
//void Showsquare_2(HDC hdc);
//把随机块贴进背景
void Copy_Square_Back(Square&x);
public:
//触底方块1变2
//void Change_1_2();
//消行函数
//void DestroyLine();
//增加行
//void AddLine();
};
class Engine
{
public:
//回车开始游戏
//void Onenter();
// 向左移
//void Onleft();
//向右移
//void Onright();
//加速下落
//void Ondown();
//变形
//void Onchange();
//计时器
//void Ontimer(HWND hwnd);
public:
//方块下落
//void Squaredown();
//方块右移
//void Squareright();
//方块左移
// void Squareleft();
//方块变形
//void Square_change();
//void SquareL_change();
public:
//判断是否触底
// bool Can_Down();
// bool Can_Down2();
////判断能否左移
//bool Can_Left();
//bool Can_Left2();
//判断能否右移
//bool Can_right();
//bool Can_right2();
//判断能否变形
//bool Can_change();
//bool Can_change_L();
//判断游戏是否结束
//bool Can_GameOver();
};
注释掉的函数功能有的还不完善,有的还没实现,为了节约篇幅,实现的具体代码放到GitHub里了。
这个框架经过第一次的大改,应该已经完善了,下面实现功能就会快很多了!