阅读背景:

C语言-控制台俄罗斯方块

来源:互联网 


/*//定义了一个RandBlock[4][4]用来存方块BlockGroup[][]用来绘制界面//*/#include <conio.h>#include<iostream>#include<time.h>#include<windows.h>#include <stdlib.h>using namespace std;#define Level 100//初始难度;#define Score 0//初始分数;const int WallWide_x = 20;//墙的宽度const int WallLength_y = 28;//墙的长度int TempGroup[4][4];//用于旋转时存放方块int BlockGroup[WallWide_x][WallLength_y];//定义一个数组用来显示界面,及初始化背景int RandBlock[2][4];//定义一个数组用来存方块int main(){void ShowFirstWindow();void CreateBlock(int RandBlock[2][4]);//创建随机方块void GotoXY(int, int);//设置光标位置void PutBlockToBack();//把方块放到背景里面去void BlockMoveDown();void ShowGame();//控制方块移动void BlockMoveLeft();void BlockMoveRight();void BlockRotate();void BlockMoveDownFast();//srand((unsigned(time(NULL))));//以时间作为种子产生随机数for (int i = 0; i < WallLength_y; i++)//y坐标{BlockGroup[0][i] = 1;//初始化最左边的墙for (int j = 1; j < WallWide_x; j++)//x坐标{if (i == 0)//初始化最上面的墙{BlockGroup[j][0] = 1;}else{if (i == WallLength_y - 1)//初始化最下面的墙{BlockGroup[j][WallLength_y - 1] = 1;}elseBlockGroup[j][i] = 0;}}BlockGroup[WallWide_x - 1][i] = 1;//初始化最右边的墙}CreateBlock(RandBlock);//先产生方块PutBlockToBack();//把方块放到背景里面去ShowFirstWindow();//显示游戏开始界面;GotoXY(1, 1);while(1!=BlockGroup[9][3])//第2行值为1代表方块堆满了,游戏结束{BlockMoveDown();//方块下落ShowGame();//判断方块能否下落,以及处理方块叠加while(_kbhit()){char a = _getch();switch(a){case 'a':BlockMoveLeft();break;case 'd':BlockMoveRight();break;case 'w':BlockRotate();break;}}GotoXY(1, 1);Sleep(Level);}GotoXY(10, 10);//显示游戏结束cout<<"GAME OVER!"<<endl;GotoXY(1, 29);return 0;}//////////////////////////////////////////////////////////////////设置光标位置///////////////////////////////////////////////////////////////////////////void GotoXY(int x, int y){COORD c;c.X = x - 1;c.Y = y - 1;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c);}//产生随机方块void CreateBlock(int RandBlock[2][4]){int BlockType = rand() % 5;switch (BlockType){case 0:{RandBlock[0][0] = 0, RandBlock[0][1] = 2, RandBlock[0][2] = 2, RandBlock[0][3] = 0;RandBlock[1][0] = 2, RandBlock[1][1] = 2, RandBlock[1][2] = 0, RandBlock[1][3] = 0;break;}case 1:{RandBlock[0][0] = 0, RandBlock[0][1] = 2, RandBlock[0][2] = 2, RandBlock[0][3] = 0;RandBlock[1][0] = 0, RandBlock[1][1] = 2, RandBlock[1][2] = 2, RandBlock[1][3] = 0;break;}case 2:{RandBlock[0][0] = 0, RandBlock[0][1] = 2, RandBlock[0][2] = 0, RandBlock[0][3] = 0;RandBlock[1][0] = 2, RandBlock[1][1] = 2, RandBlock[1][2] = 2, RandBlock[1][3] = 0;break;}case 3:{RandBlock[0][0] = 2, RandBlock[0][1] = 0, RandBlock[0][2] = 0, RandBlock[0][3] = 0;RandBlock[1][0] = 2, RandBlock[1][1] = 2, RandBlock[1][2] = 2, RandBlock[1][3] = 0;break;}case 4:{RandBlock[0][0] = 2, RandBlock[0][1] = 2, RandBlock[0][2] = 2, RandBlock[0][3] = 2;RandBlock[1][0] = 0, RandBlock[1][1] = 0, RandBlock[1][2] = 0, RandBlock[1][3] = 0;break;}}}//把产生随机方块数组中的方块放到背景中去void PutBlockToBack(){for(int i = 0; i<2; i++)for(int j = 0; j<4; j++){BlockGroup[j+8][i+1] = RandBlock[i][j];}}//方块向下移动void BlockMoveDown(){for(int i = WallLength_y-1; i>0; i--)for(int j = 0; j<WallWide_x; j++)if(2==BlockGroup[j][i]){BlockGroup[j][i+1] = BlockGroup[j][i];BlockGroup[j][i] = 0;}}//进入游戏显示游戏界面void ShowFirstWindow(){GotoXY(24, 6);cout<<"俄罗斯方块";GotoXY(24, 8);cout<<"版本1.0";GotoXY(24, 10);cout<<"按enter查看游戏说明!";_getch();system("cls");GotoXY(24, 6);cout<<"游戏说明";GotoXY(24, 8);cout<<"W:旋转方块, S:让方块直接下落, A:方块左移, D:方块右移";GotoXY(24, 10);cout<<"按enter进入游戏!";_getch();system("cls");}//方块左移void BlockMoveLeft(){for(int j = 0; j<WallLength_y; j++){for(int i = 1; i<WallWide_x; i++){if(2 == BlockGroup[i][j]){if(1 != BlockGroup[i-1][j]){BlockGroup[i-1][j] = BlockGroup[i][j];BlockGroup[i][j] = 0;}}}}}//方块右移void BlockMoveRight(){for(int j = 0; j<WallLength_y; j++){for(int i = WallWide_x-1; i>0; i--){if(2 == BlockGroup[i][j]){if(1 != BlockGroup[i+1][j]){BlockGroup[i+1][j] = BlockGroup[i][j];BlockGroup[i][j] = 0;}}}}}//方块旋转void  BlockRotate(){for(int j = 0; j<WallLength_y; j++){for(int i = 0; i<WallWide_x; i++){if(2 == BlockGroup[i][j]){for(int k = 0; k<4; k++){for(int f = 0; f<4; f++){TempGroup[k][f] = BlockGroup[i][j-2];}}}}}int TempBlockGroup[WallWide_x][WallLength_y];for(int i = 0; i<WallLength_y; i++){for(int j = 0; j<WallWide_x; j++){TempBlockGroup[j][i] = BlockGroup[j][i];}}for(i = 0; i<WallLength_y; i++){for(int j = 0; j<WallWide_x; j++){BlockGroup[i][j] = TempBlockGroup[j][i];}}}//方块快速下落void BlockMoveDownFast(){}//判断方块能否下落,以及处理方块叠加void ShowGame(){for (int i = 0; i < WallLength_y; i++){for(int j = 0; j<WallWide_x; j++){if (BlockGroup[j][i] == 0)cout << "  ";else{if (BlockGroup[j][i] == 2){if(1==BlockGroup[j][i+1] || 1==BlockGroup[j+1][i+1] || 1==BlockGroup[j+2][i+1] || 1==BlockGroup[j+3][i+1]){{BlockGroup[j][i]=1;if(2 == BlockGroup[j+1][i])BlockGroup[j+1][i]=1;if(2 == BlockGroup[j+2][i])BlockGroup[j+2][i]=1;if(2 == BlockGroup[j+3][i])BlockGroup[j+3][i]=1;if(2==BlockGroup[j][i-1])BlockGroup[j][i-1]=1;if(2==BlockGroup[j+1][i-1])BlockGroup[j+1][i-1]=1;if(2==BlockGroup[j+2][i-1])BlockGroup[j+2][i-1]=1;if(2==BlockGroup[j+3][i-1])BlockGroup[j+3][i-1]=1;if(2==BlockGroup[j+4][i-1])BlockGroup[j+4][i-1]=1;if(2==BlockGroup[j+5][i-1])BlockGroup[j+5][i-1]=1;}cout << "█";CreateBlock(RandBlock);//先产生方块PutBlockToBack();//把方块放到背景里面去}elsecout<<"□";}elsecout << "█";}}cout << endl;}}/*//定义了一个RandBlock[4][4]用来存方块BlockGroup[]



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: