#include<iostream>#include<graphics.h>#include<time.h>#include<conio.h>
using namespace std;int m, n, nindex, score =0;int t =500;int g_blackTetrisBlock[20][10]={0};int block[28][4][4]={{{1,0,0,0},{1,1,1,0},{0,0,0,0},{0,0,0,0},},{{1,1,0,0},{1,0,0,0},{1,0,0,0},{0,0,0,0},},{{1,1,1,0},{0,0,1,0},{0,0,0,0},{0,0,0,0},},{{0,1,0,0},{0,1,0,0},{1,1,0,0},{0,0,0,0},},{{0,0,1,0},{1,1,1,0},{0,0,0,0},{0,0,0,0},},{{1,0,0,0},{1,0,0,0},{1,1,0,0},{0,0,0,0},},{{1,1,1,0},{1,0,0,0},{0,0,0,0},{0,0,0,0},},{{1,1,0,0},{0,1,0,0},{0,1,0,0},{0,0,0,0},},{{1,1,0,0},{0,1,1,0},{0,0,0,0},{0,0,0,0},},{{0,1,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0},},{{1,1,0,0},{0,1,1,0},{0,0,0,0},{0,0,0,0},},{{0,1,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0},},{{0,1,1,0},{1,1,0,0},{0,0,0,0},{0,0,0,0},},{{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0},},{{0,1,1,0},{1,1,0,0},{0,0,0,0},{0,0,0,0},},{{1,0,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0},},{{0,1,0,0},{1,1,1,0},{0,0,0,0},{0,0,0,0},},{{1,0,0,0},{1,1,0,0},{1,0,0,0},{0,0,0,0},},{{1,1,1,0},{0,1,0,0},{0,0,0,0},{0,0,0,0},},{{0,1,0,0},{1,1,0,0},{0,1,0,0},{0,0,0,0},},{{1,1,1,1},{0,0,0,0},{0,0,0,0},{0,0,0,0},},{{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,0,0,0},},{{1,1,1,1},{0,0,0,0},{0,0,0,0},{0,0,0,0},},{{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,0,0,0},},{{1,1,0,0},{1,1,0,0},{0,0,0,0},{0,0,0,0},},{{1,1,0,0},{1,1,0,0},{0,0,0,0},{0,0,0,0},},{{1,1,0,0},{1,1,0,0},{0,0,0,0},{0,0,0,0},},{{1,1,0,0},{1,1,0,0},{0,0,0,0},{0,0,0,0},}};voidswap(int& a,int& b){int t = a;
a = b;
b = t;}voidoncreate(int n){for(int i =0; i <4; i++){for(int j =0; j <4; j++){if(g_blackTetrisBlock[i][j +3]!=2)
g_blackTetrisBlock[i][j +3]= block[n][i][j];}}}voiddrawrectangle(){for(int i =0; i <20; i++){for(int j =0; j <10; j++){if(g_blackTetrisBlock[i][j]==0){setfillcolor(WHITE);solidrectangle(30* j,30* i,30*(j +1),30*(i +1));}if(g_blackTetrisBlock[i][j]==1){setfillcolor(BLUE);fillrectangle(30* j,30* i,30*(j +1),30*(i +1));}if(g_blackTetrisBlock[i][j]==2){setfillcolor(RED);fillrectangle(30* j,30* i,30*(j +1),30*(i +1));}}}}voidjudge1(){for(int i =0; i <20; i++){int k =1;for(int j =0; j <10; j++){if(g_blackTetrisBlock[i][j]==0){
k =0;}}if(k){
score +=2;for(int j =0; j <10; j++){
g_blackTetrisBlock[i][j]=0;}for(int x = i -1; x >=0; x--){for(int y =0; y <10; y++){swap(g_blackTetrisBlock[x][y], g_blackTetrisBlock[x +1][y]);}}}}}voidtran2(){for(int i =0; i <20; i++){for(int j =0; j <10; j++){if(g_blackTetrisBlock[i][j]==1)
g_blackTetrisBlock[i][j]=2;}}judge1();}voidtransform(int n){int d =0, d1 =0, a =20, b =10;for(int i =0; i <20; i++){for(int j =0; j <10; j++){if(g_blackTetrisBlock[i][j]==1){if(i <= a)
a = i;if(j <= b)
b = j;break;}}}int r =3, w =2;if(n >=20&& n <24)
r =4, w =3;for(int x = r; x >=0; x--){for(int y = r; y >=0; y--){if(a + x >19|| b + y >10|| g_blackTetrisBlock[a + x -1][b + y -1]==2){
d1 =1;break;}}if(d1)break;}if(!d1){for(int x = w; x >=0; x--)for(int y = w; y >=0; y--)
g_blackTetrisBlock[a + x][b + y]= block[n][x][y];}}voidjudge2(){for(int i =0; i <20; i++){for(int j =0; j <10; j++){if(g_blackTetrisBlock[i][j]==2&& g_blackTetrisBlock[i -1][j]==1){tran2();
m =1;}if(g_blackTetrisBlock[19][j]==1){tran2();
m =1;}}}}voidmove(){if(!_kbhit()){judge2();for(int i =18; i >=0; i--){for(int j =9; j >=0; j--){if(g_blackTetrisBlock[i][j]==1){swap(g_blackTetrisBlock[i][j], g_blackTetrisBlock[i +1][j]);}}}}else{int w =1;int b =_getch();if(b ==112){getchar();}if(b ==224){int c =_getch();switch(c){case75:for(int i =0; i <20; i++){for(int j =0; j <10; j++){if(g_blackTetrisBlock[i][j]==1){if(g_blackTetrisBlock[i][j -1]==2|| j ==0){
w =0;}}}}if(w){for(int i =0; i <20; i++){for(int j =1; j <10; j++){if(g_blackTetrisBlock[i][j]==1&& g_blackTetrisBlock[i][j -1]==0){swap(g_blackTetrisBlock[i][j], g_blackTetrisBlock[i][j -1]);}}}}break;case77:for(int i =0; i <20; i++){for(int j =0; j <10; j++){if(g_blackTetrisBlock[i][j]==1){if(g_blackTetrisBlock[i][j +1]==2|| j ==9){
w =0;}}}}if(w){for(int i =0; i <20; i++){for(int j =8; j >=0; j--){if(g_blackTetrisBlock[i][j]==1&& g_blackTetrisBlock[i][j +1]==0){swap(g_blackTetrisBlock[i][j], g_blackTetrisBlock[i][j +1]);}}}}break;case72:
nindex++;transform(nindex);if(nindex %4==3)
nindex =4* n -1;break;case80:
t =100;break;}}}}voidpredictnext(int n){outtextxy(330,20,"下一个方块:");for(int i =0; i <4; i++)for(int j =0; j <4; j++){if(block[n][i][j]==0){setfillcolor(WHITE);solidrectangle(340+30* j,50+30* i,370+30* j,80+30* i);}if(block[n][i][j]==1){setfillcolor(BLUE);fillrectangle(340+30* j,50+30* i,370+30* j,80+30* i);}}}intendplay(){for(int j =0; j <10; j++)if(g_blackTetrisBlock[0][j]==2)return1;return0;}intmain(){int n1;char s[20]="";initgraph(500,600);setbkcolor(WHITE);cleardevice();setlinecolor(BLACK);srand((unsignedint)time(NULL));settextcolor(GREEN);settextstyle(20,10,"宋体");outtextxy(310,220,"按↑变形");outtextxy(310,240,"按↓加速下移");outtextxy(310,260,"按←左移");outtextxy(310,280,"按→右移");outtextxy(310,300,"按 p 暂停");
n1 =rand()%7;while(1){sprintf_s(s,"当前得分:%d", score);outtextxy(310,200, s);
t =500;
m =0;
n = n1;
n1 =rand()%7;oncreate(4* n);
nindex =4* n;predictnext(4* n1);if(endplay())break;while(true){line(301,0,301,600);drawrectangle();move();Sleep(t);if(m){break;}}}settextcolor(GREEN);outtextxy(330,330,"Game Over!");getchar();return0;}
easy-x插件需要自己在官网下载(附上链接)https://easyx.cn/安装好插件后用vs2019打开然后话不多说,附上源码#include<iostream>#include<graphics.h>#include<time.h>#include<conio.h>using namespace std;int m, n, nindex, score = 0;int t = 500;int g_blackTetrisBlock.