我罗斯方块第一次汇报
这个作业属于那个课程 | 【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)
函数,pos
为COORD
型变量,利用它来改变光标的横纵坐标。
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; //记住右竖框有图案
}
}
以上就是本阶段我们组开发我罗斯的进度,接下来继续努力,争取尽快完成!