• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

老程序员教你一天时间完成C++俄罗斯方块游戏

c++ 搞代码 4年前 (2022-01-06) 20次浏览 已收录 0个评论
文章目录[隐藏]

俄罗斯方块游戏大家应该非常熟悉,非常经典的一款游戏,本文来详细讲解下俄罗斯方块游戏的制作过程,赶紧来看下吧!希望能给你带来帮助

首先,看下效果图:

图1 游戏运行过程

下面详细讲解下制作过程。

一、主要文件

文件包含三个:tetris.cpp、tetris.h、main.cpp,各个文件的用途如下:

tetris.cpp 文件:函数实现;

tetris.h : 类和函数声明;

main.cpp : 主函数;

二、界面设计

 bool vis[100][100]; // 用于标记坐标 int Co[100][100]; // 坐标的颜色 

其中:

vis[100][100] 用于标记界面坐标,true表示有内容,false 表示空;

Co[100][100] 用于标记界面坐标的颜色;

设置框架函数,如下所示:

 //设置框架 void setFrame() { color(5); getCoord(30 ,1); cout<<"    "<<endl<<endl; color(10); // 主要框架 int x = LF_up_x ,y = 3; //横向边上下两条边 for(int i = 0; i <30; ++i) { getCoord(x ,2);  vis[x][2] = true;  cout<<"□"; getCoord(x ,23); vis[x][23] = true; cout<<"□"; x += 2; } //竖向两条边和小框左边竖线 for(int i = 0; i <21; ++i) { getCoord(LF_up_x ,y) ; vis[LF_up_x][y] = true ; cout<<"□" ; getCoord(71 ,y) ;      vis[71][y] = true ; cout<<"□" ; getCoord(51 ,y) ;      vis[51][y] = true ; cout<<"□" ; y += 1 ; } //小框架中间横线 for(int i = 53 ;i <= 69 ; i += 2) { getCoord(i ,11); vis[i][11] = true; cout<<"□"; } //小框内容 color(10); getCoord(53 ,3);  cout<<" Next Block : " ; color(11) ; getCoord(54 ,13) ; cout<<"开始 :  Enter 键" ; getCoord(54 ,15) ; cout<<"暂停 :  T 键" ; getCoord(54 ,17) ; cout<<"退出 :  Q 键" ; getCoord(54 ,19) ;  cout<<"Score:" ; getCoord(54 ,21) ; cout<<"Rank :" ; T_Box::staticNum(0) ; } 

设置整体的界面,如下图所示:

图2 界面图

三、方块设计

表示方块的类,如下所示:

 class T_Box { static int Score ; static int Rank ; private : int x ,y ; // 坐标 int type ; // 类型 int fg ; // 某个图形的第 fg 个变化的图形 public : T_Box(int sx = 31 ,int sy = 3 ,int st = 0 ,int f = 0); static void staticNum(int num); void setValue(int sx = 31 ,int sy = 3 ,int st = 0 ,int f = 0) ; void Move(int stepA ,int stepB); bool Stop(); void printBox(); void eraseBox(); void Mark(); void Pause(); void nextBox(T_Box temp); void Transform(); bool Judge(); }; 

各种方块的设计函数如下所示:

 class Coord { public : int x; int y; int Col; }G[10][10][10]; 

其中:

x,y 是相对坐标;

Col 是方块颜色;

G[10][10][10] :一维表示方块类型,二维表示方块内的方格,三维表示方块的第几种表示形式;

来看下各个方块的设计,如下所示:

 // 设置各种图形 void setBox() { // 1 正方形 for(int i = 0 ;i </div><p>上面设置的是各个方块的相对坐标以及方块的颜色。</p><p class="maodian"></p><h2>四、设计思路</h2><p>先来看下方块的主要类,如下所示:</p><div class="gaodaimacode"><pre class="prettyprint linenums"> class T_Box { static int Score ; static int Rank ; private : int x ,y ; // 坐标 int type ; // 类型 int fg ; // 某个图形的第 fg 个变化的图形 public : T_Box(int sx = 31 ,int sy = 3 ,int st = 0 ,int f = 0) ; static void staticNum(int num) ; void setValue(int sx = 31 ,int sy = 3 ,int st = 0 ,int f = 0) ; void Move(int stepA ,int stepB) ; bool Stop() ; void printBox() ; void eraseBox() ; void Mark() ; void Pause() ; void nextBox(T_Box temp) ; void Transform() ; bool Judge() ; }; 

其中:

Score : 表示游戏分数;

Rank : 表示游戏等级,等级是根据分数计算的;

各个函数的用途如下:

T_Box :构造函数,初始化坐标类型;

staticNum : 更新分数和等级,显示在右下侧小框内;

setValue : 设置方块的初始坐标、类型以及第几种变化,其中类型和变化是随机值;

Move : 将下落的方块向左、右、下移动;

Stop : 计算游戏是否已结束;

printBox : 输出方块图形到界面;

eraseBox : 擦除界面上的方块;

Mark : 标记当前位置已有内容了;

Pause : 游戏暂停,等待开始;

nextBox : 在右上侧方格内显示下一个将要降落的方格;

Transform :在方格下落过程中变换方格样式;

Judge : 判断方格是否可以变换样式;

接下来就说下主程序的设计逻辑,代码如下所示:

 // 主程序 void Tetris() { srand(time(0)); // 取系统时间 setBox();    // 设置各种图形 T_Box  cd ,tempA ,tempB;   // 每个下降的方块的初始值 tempB.setValue<div style="color:transparent">来源gaodai.ma#com搞#代!码网</div>(); // 设置方块初始值 tempB.nextBox(tempA); for(int i = 0;   ; ++i) { if(!(i%2))   tempA.setValue(); else         tempB.setValue(); if(i%2)      tempB.nextBox(tempA) ,cd = tempA; else         tempA.nextBox(tempB) ,cd = tempB; while(1) { cd.printBox(); // 输出图形 if(cd.Stop()) { color(6); getCoord(20 ,10); cout<<"   T_T    游戏结束    T_T"; Exit(); } Sleep(350); cd.eraseBox(); //擦除图形 cd.Move(0 ,1); if(kbhit()) // 判断是否有按键按下,如果有则可能是旋转或者加速按键 { char ch = getch(); switch(ch) { case 'a' :   cd.Move(-2 ,0) ; break;    //  向左移动一格 case 'd' :   cd.Move(2 ,0) ;  break;    //  向右移动一格 case 'w' :   cd.Transform() ; break;                   //  变换方格 case 's' :   cd.Move(0 ,2) ; break;  //  急降方格 case 'T' :   cd.Pause() ; break; case 'Q' :   Exit();  break; default :    break; // 如果都不是则不执行 } } if(cd.Stop())  break; } cd.printBox(); cd.Mark(); Check(); // 检查是否可以消除 } } 

设计思路如下:

1. 首先,设置各种图形以及界面图形;

2. 产生当前方格和下一个方格,下一个方格显示到右上侧方框内;

3. 输出当前下落方格到界面;

4. 判断游戏是否结束;

5. 向下移动方格;

6. 监听用户输入,执行用户输入的操作,包括:移动、急降方格、变换方格样式、退出、暂停等。

7. 检测方格是否降落到底部,循环操作,一直到方格降落到底部;

8. 循环 2 ~ 7,一直到游戏结束;

五、总结

C++俄罗斯方块设计的重点在于界面的设计以及游戏的整体逻辑,其中,界面设计主要是获取对应坐标,在对应坐标处输出对应图形,整体逻辑是不断循环产生下落的方格,方格移动是通过擦除当前位置的方格,将方格坐标整体移动一个再次显示来实现的。

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注gaodaima搞代码网的更多内容!

以上就是老程序员教你一天时间完成C++俄罗斯方块游戏的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:老程序员教你一天时间完成C++俄罗斯方块游戏

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址