我罗斯方块汇报(1)
作业所属课程 | 2020年面向对象程序设计 |
作业要求 | 我罗斯方块汇报(1) |
博客内容 | 本阶段作业进度汇报 |
小组成员 | 031902539 孙巧 031902543 邹莹 |
项目GitHub地址 | 项目地址 |
1、首先,是首界面的问题,提示用户输入难度系数(还没有进行美化) | |
2、这次要完成的作业最终是双人模式,但是这个阶段我们小组主要目标是单人模式; |
单人模式
先把要实现的方块功能函数写出来,再去考虑组装问题。
控制台上不同形状的显示
问题:各个形状的绘制
解决:每个形状由四个方块构成,先在纸上画出来,然后将各个方块的坐标存进数组
//不同类型的俄罗斯方块的各个点的坐标
int b_type[17][8]=
{
{0,0,1,0,0,1,1,1},
{1,0,0,1,1,1,0,2},{0,0,1,0,1,1,2,1},
{0,0,0,1,0,2,0,3},{0,0,1,0,2,0,3,0},
{1,0,1,1,0,2,1,2},{0,0,0,1,1,1,2,1},{0,0,1,0,0,1,0,2},{0,0,1,0,2,0,2,1},
{1,0,0,1,1,1,2,1},{0,0,0,1,1,1,0,2},{0,0,0,1,0,2,1,1},{1,0,0,1,1,1,1,2},
{0,0,1,0,1,1,1,2},{2,0,0,1,1,1,2,1},{0,0,0,1,0,2,1,2},{0,0,1,0,2,0,0,1}
};
问题:怎么让光标出现在任意位置从而实现特定形状的输出。
解决:定义set_xy函数,利用windows.h
头文件下的SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos)
函数,pos为COORD
类型变量,用来存储光标位置的横纵坐标
void set_xy(int i, int j)
{
COORD x_y = { i, j };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), x_y);
}
在这个过程中需要注意的一个地方,就是使用的正方形方块占了两个空格的位置
方块旋转功能
问题:怎么知道旋转后是什么图形
解决:由同一个形状旋转而成的图形归为一组,每个图形都有自己对应的ID,运用switch
函数来得到旋转后的图形ID,清除掉界面原先的图形,显示旋转后的图形
图形移动的实现
从网上找的资料:_getch()
函数对于方向键的第一次返回值是224,第二次才是真实的键值。_getch()
是一个不回显函数,用户按下某个字符时,函数自动读取,无需按回车
问题:如何让程序知道键盘的输入
解决:使用_kbhit()
函数来检查当前键盘是否有输入,如果有,利用_getch()函数来获取输入键的键值,从而来判断是哪个键。
问题:如何在控制台上实现移动
解决:需要先清除掉原先位置显示的图形,可以用空格来覆盖原先的图形(这里要注意的是因为原先的方块占两个空格,因此这里一个方块需要用两个空格覆盖),接着在控制台上输出移动后的位置上要显示的图形,
在这个步骤中同样需要用到set_xy()函数。
问题:怎么知道当前位置能否继续移动
解决:需要在建立一个标记数组,当当前位置存在方块或者当前位置位于游戏边框边界时,赋值为1,否则为0;
分数的获取
问题:如何判断是否消行
解决:每次落定一个方块,就判断一次从方块落定的最低行到最高行是否存在整行标记为1的,若存在,则从消行处开始,每一行等于上一行
游戏过程中图形的随机显示
问题:如何让每次出现的图形都是随机的
解决:需要用到随机数,srand((int)time(0))
和rand()
函数搭配使用
srand函数以当前时间对应的int值作为起点,这样就可以保证不同时间对应的随机数不一样。
关于双人模式的思考
在这段时间里,大概把单人的思路理清楚了,接下来试着进行双人模式的思考。
通过百度,查到双人模式可能需要用到双线程,这个还没有着手去学习,不了解是不是真的需要用到。
问题:分别用wasd和上下左右键操作方块
思考:首先需要在单人的基础上再增加程序对wasd的响应,因此就需要获取wasd的键值。
问题:怎么样才能在一个界面上完成两个对象的操作,还没有统一一种方法来使用wasd和上下左右的操作
思路:玩家一也有自己的独特的函数,玩家二有自己的一些独特函数,最后整理出相同的函数
关于美化
使用SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), n)函数进行方块和文字的颜色设置,这样能使界面更精彩一点。
绘制一个观感比较好的长宽适宜的游戏边框,同样需要用set_xy()函数进行绘制
以上为该阶段的进度。
附上参考资料:https://www.bilibili.com/video/BV1T441117na/?p=5