我罗斯方块第一次汇报

时间:2020-05-22
本文章向大家介绍我罗斯方块第一次汇报,主要包括我罗斯方块第一次汇报使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这个作业属于那个课程 【2020面向对象程序设计张栋班】(https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10729)
这个作业的目标 本阶段作业进度汇报以及提出遇到的问题
作业正文 【我罗斯方块第一次汇报】(https://www.cnblogs.com/dudu340/p/12934421.html)
参考文献 【C++ 比较完美的俄罗斯方块(VS2017)】(https://blog.csdn.net/qq_35294564/article/details/82762737)
项目地址 https://github.com/xanxusEX/Tetris
小组成员 031902102 方文昱 031902142詹珊

目前进度:

在我罗斯方块的开发中,我们组创建了Block(方块类)、Player(玩家类)、Game_window(游戏类)以及Render(渲染类)。
到目前为止,我们组主要是做了渲染类的部分,进行了界面的设计。

因为之前从来没有自己去设计过一个项目,也没有写过这么长的代码,因此,我们在做我罗斯的开发中主要采用的就是分块去写函数,一小部分一小部分的去搞定,从而在最后形成一个完整的游戏。
1)如何让光标移动到指定位置从而形成不同的方块类型:
对此,我们可以在渲染类中定义一个gotoxy的成员函数,利用windows.h下的SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos)函数,posCOORD型变量,利用它来改变光标的横纵坐标。

void Render::gotoxy(HANDLE hOut, int x, int y)
{
 COORD pos;
 pos.X = x;  //横坐标
 pos.Y = y;  //纵坐标
 SetConsoleCursorPosition(hOut, pos);
}

2)游戏界面中边框的实现:
首先可以利用HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE),则将hout定义成了一个句柄变量,将其赋初值为GetStdHandle(STD_OUTPUT_HANDLE),即标准输出句柄。
接下来还是要利用上述定义的gotoxy函数,利用横纵坐标的变化,从而实现一整个边框的形成。以下为该部分的代码:

void Render::set_frame(int x0,int y0 )
{
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  //定义显示器句柄变量
	if(y0==F_Y0)
               {
    	            gotoxy(hOut,x0+W_SINGLE-5,y0-2);   //打印游戏名称
                    cout<<"我罗斯方块"<<endl;
	      }
	gotoxy(hOut,x0+2*W_SINGLE+3,y0+3);
	if(y0==F_Y0)
	      {
		    cout<<"P1"<<endl;
		    gotoxy(hOut,x0+2*W_SINGLE+3,y0+5);
		    cout<<"SCORE :  "<<p.score<<endl;
	      }
	else
	      {
		   cout<<"P2"<<endl;
		   gotoxy(hOut,x0+2*W_SINGLE+3,y0+5);
		   cout<<"SCORE :  "<<p.score<<endl;
	      }
    gotoxy(hOut,x0+2*W_SINGLE+3,y0+7);  //打印选择菜单
    cout<<"**********下一个方块:"<<endl;
    gotoxy(hOut,x0+2*W_SINGLE+3,y0+13);
    cout<<"**********"<<endl;
    gotoxy(hOut,x0+2*W_SINGLE+3,y0+17);
    if(y0==F_Y0) cout<<"↑键:变体"<<endl;
    else cout<<"W 键:变体"<<endl;
    gotoxy(hOut,x0+2*W_SINGLE+3,y0+19);
    cout<<"空格:暂停游戏"<<endl;
    gotoxy(hOut,x0+2*W_SINGLE+3,y0+15);
    cout<<"Esc :退出游戏"<<endl;
    gotoxy(hOut,x0,y0);       //打印框角并记住该处已有图案
    cout<<"╔"<<endl;
    gotoxy(hOut,x0+2*W_SINGLE-2,y0);
    cout<<"╗"<<endl;
    gotoxy(hOut,x0,y0+H_SINGLE); 
    cout<<"╚"<<endl;
    gotoxy(hOut,x0+2*W_SINGLE-2,y0+H_SINGLE);
    cout<<"╝"<<endl;
    a[x0][y0+H_SINGLE]=2;     
    a[x0+2*W_SINGLE-2][y0+H_SINGLE]=2;
    for(i=2;i<2*W_SINGLE-2;i+=2)
          {
              gotoxy(hOut,x0+i,y0);
             cout<<"═"<<endl;         //打印上横框
          }
    for(i=2;i<2*W_SINGLE-2;i+=2)
          {
              gotoxy(hOut,x0+i,y0+H_SINGLE);
              cout<<"═"<<endl;         //打印下横框
              a[x0+i][y0+H_SINGLE]=2;    //记住下横框有图案
          }
   for(i=1;i<H_SINGLE;i++)
          {
              gotoxy(hOut,x0,y0+i); 
              cout<<"║"<<endl;         //打印左竖框
              a[x0][y0+i]=2;       //记住左竖框有图案
          }
   for(i=1;i<H_SINGLE;i++)
          {
             gotoxy(hOut,x0+2*W_SINGLE-2,y0+i); 
             cout<<"║"<<endl;         //打印右竖框
             a[x0+2*W_SINGLE-2][y0+i]=2;   //记住右竖框有图案
          } 
}

原文地址:https://www.cnblogs.com/dudu340/p/12934421.html