我罗斯方块最终篇
我罗斯方块最终篇
这个作业属于哪个课程 | 2020面向对象程序设计张栋班 |
---|---|
这个作业要求在哪里 | 我罗斯方块最终篇 |
这个作业的目标 | 获取运行截图,展示代码要点,展示收获与心得,提出依然存在的问题 |
作业正文 | https://www.cnblogs.com/Misanthropel/p/12822414.html |
小组成员 | 031902619吴俊玮 031902626许叶源 031902625徐因伯 |
git地址 | https://github.com/xyyuan1/Tetris |
游戏界面展示
代码要点
对于每个类的功能都要分清楚
整体思路是创建两个对象分别代表玩家一和玩家二,通过一个大循环判断按键的输入,并且对玩家一和玩家二的map做出相应操作完成整个我罗斯方块的过程
最为重要的就是player类,里面包括了对两个玩家的所有操作,移动变形碰撞消行等等。
其中花费时间最多以及出问题最多的就是消行与加行问题,经过不断努力完成相应操作
if (flag1 == 0)
{
g.gameover(hOut, p, b, block1, block2);
}
else
{
for (k = 1; k < 20; k++)//将整体map坐标上移
{
for (j = 1; j < 11; j++)
{
p.map[k - 1][j] = p.map[k][j];
}
}
for (k = 0; k < 20; k++)
{
for (j = 1; j < 11; j++)
{
gotoXY(hOut, 2 * j + a2, k);
cout << " ";
}
}
srand((unsigned)time(NULL));
for (j = 1; j < 11; j++)
{
p.map[19][j] = rand() % 2;
}
for (k = 0; k < 20; k++)
{
for (j = 1; j < 11; j++)
{
if (p.map[k][j] == 1)
{
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
gotoXY(hOut, 2 * j + a2, k);
cout << "■";
}
}
}
}
收获与心得
收获最大的就是在编写我罗斯方块过程中对于面向对象的理解加深,对于图形编程有了一定的了解。在不断编码过程中一步步解决问题,比如光标位置与数组位置相反,消行加行的一步步实现等等,在解决这些问题的过程中,对于自己的编码能力有了挺大的提升。最开始感觉双人问题很难处理,要同时进行操作是很难的一件事,当然在不断学习的过程中,逐渐领悟了一些,但是游戏仍旧有些瑕疵。
存在的问题
存在的问题难以解决
1.双人操作时不能同时按按键,不然会造成一方无法操作的问题,想学双线程但是有点难学。
2.在方块没有出来的时候,进行一些控制容易使方块脱离控制或者直接游戏结束这个问题也一直得不到解决
3.代码量很大,想要优化挺困难的,对于类和对象的运用较差,没有合理运用。