我罗斯方块汇报(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

posted @ 2020-05-21 22:35  sl0805  阅读(246)  评论(0编辑  收藏  举报