如何用C语言编写一个俄罗斯方块的小游戏(配注释) c语言 编写俄罗斯方块的程序 要求有详细的中文注释

C\u8bed\u8a00\u7f16\u5199\u7684\u4fc4\u7f57\u65af\u65b9\u5757\u7a0b\u5e8f \u5b8c\u6574\u7684\u6700\u597d\u5e26\u4e0a\u6ce8\u91ca \u80fd\u8ba9\u521a\u521a\u5b66\u7684\u4e5f\u80fd\u770b\u7684\u61c2

\u9700\u8981\u5728tc\u4e0b

/*------------- Compile ------------------------------ */
/* [in os mode:] */
/* bgiobj egavga */
/* tlib lib\graphics.lib+egavga */
/* [in TC: ] */
/* make exe */
/*-------------------------------------------------------*/
#include
#include
#include
#define mDRAW 5
#define mLINE 6
#define mADOWN 7
#define mGEN 8
#define mLEFT 75
#define mRIGHT 77
#define mSPACE 57
#define mDOWN 80
#define mESC 1
#define TIMEINT 2
#define MAXX 9
#define MAXY 30
#define BACKCOLOR BLACK
#define WINX 50
#define WINY 470
#define GAP 6
#define AREAX (WINX+GAP)
#define AREAY (WINY-GAP)
#define BOXW 15

int oldarea[MAXY+1][MAXX];
int area[MAXY+1][MAXX];
int actW,actH,actX,actY;
int curX,curY,curColor,curW,curH;
int newX,newY,newColor,newW,newH;
int active;
int box[4][4];
int FORCOLOR;
int MESSAGE;
int BOX[7][4][4]={
{
{1,1,1,1},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}
},{
{1,1,1,0},
{1,0,0,0},
{0,0,0,0},
{0,0,0,0}
},{
{1,1,1,0},
{0,0,1,0},
{0,0,0,0},
{0,0,0,0}

},{
{1,1,1,0},
{0,1,0,0},
{0,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,1,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}
}
};


void init();
void draw();
int genBox();
int getKey();
void lineFull();
int moveLeft();
int moveRight();
int moveDown();
int rotate();
int getW();
int getH();
void clearOldBox();
void putNewBox();
int collisionRotate(int box[][4]);
void getMessage();
void dispatchMessage();
int timeCome();
void fallDown();
int gameOver();

main()
{
int i;
init();
do
{
getMessage();
dispatchMessage();
}
while(!gameOver());

getch();
closegraph();
}

void getMessage()
{
if(MESSAGE) return;
if(timeCome())
{
MESSAGE=mADOWN;
return;
}
if(bioskey(1))
{
MESSAGE=bioskey(0)>>8;
return;
}
}

void dispatchMessage()
{
switch(MESSAGE)
{
case mLEFT: moveLeft();break;
case mRIGHT: moveRight();break;
case mADOWN: moveDown();break;
case mSPACE: rotate();break;
case mDOWN: fallDown(); break;
case mDRAW: draw();break;
case mLINE: lineFull();break;
case mGEN: genBox();break;
case mESC: closegraph(); exit(0);
default: MESSAGE=0;
}
}

void fallDown()
{
while(active)
{
moveDown(); draw();
}

MESSAGE=mLINE;
}

int timeCome()
{

static long tm, old;
tm=biostime(0,tm);
if(tm-old<TIMEINT) return 0;
else
{
old=tm; return 1;
}
}

void init()
{
int i,j,x1,y1,x2,y2;
int driver=DETECT, mode=0;
randomize();
registerbgidriver(EGAVGA_driver);
initgraph(&driver,&mode,"");
cleardevice();
setfillstyle(SOLID_FILL,BLUE);
bar(0,0,639,479);
x1=AREAX;
y1=AREAY-BOXW*MAXY;
x2=AREAX+MAXX*BOXW;
y2=AREAY;
rectangle(--x1,--y1,++x2,++y2);
setfillstyle(SOLID_FILL,BLACK);
bar(++x1,++y1,--x2,--y2);
y1=AREAY-MAXY*BOXW; y2=AREAY;
setcolor(DARKGRAY);
for(i=0;i<MAXX;i++)
{
x1=AREAX+i*BOXW;
line(x1,y1,x1,y2);
}

x1=AREAX; x2=x1+MAXX*BOXW;
for(j=0;j<MAXY;j++)
{
y1=AREAY-j*BOXW;
line(x1,y1,x2,y1);
}
for(j=0;j<MAXY;j++)
for(i=0;i<MAXX;i++)
area[j][i]=oldarea[j][i]=0;
actX=0; actY=0; actW=MAXX-1; actH=MAXY-1;
draw();
MESSAGE=mGEN;
}

int genBox()
{
int i,j,boxidx;
boxidx=random(7); FORCOLOR=random(7)+1;
for(j=0;j<4;j++)
for(i=0;i<4;i++)
box[j][i]=BOX[boxidx][j][i];
curW=getW(); curH=getH();
curX=(MAXX+curW)/2;
if(curX+curW>=MAXX)curX=MAXX-1-curW;
curY=MAXY-1-curH;
newX=curX; newY=curY; actX=curX;actY=curY;
actW=newW=curW; actH=newH=curH;
active=1;
if(collision(box)) return 0;
putNewBox();
draw(); MESSAGE=0;
return 1;
}

void lineFull()
{
int row,col, rowEnd,full,i,j;
rowEnd=newY+newH;
if(rowEnd>=MAXY-1) rowEnd=MAXY-2;
for(row=newY; row<=rowEnd;)
{
full=1;
for(col=0;col<MAXX;col++)
if(!area[row][col]){full=0; break;}
if(!full){++row; continue;}
for(j=row; j<MAXY-1;j++)
for(i=0;i<MAXX;i++)
area[j][i]=area[j+1][i];
actX=0;actY=row; actW=MAXX-1; actH=MAXY-1-row;
draw(); rowEnd--;
}
MESSAGE=mGEN;
}

void draw()
{
int row,col,x1,y1,x2,y2;
for(row=actY;row<=actY+actH;row++)
for(col=actX;col<=actX+actW;col++)
if(area[row][col]!=oldarea[row][col])
{
if(area[row][col]==0)
setfillstyle(SOLID_FILL,BACKCOLOR);
else
setfillstyle(SOLID_FILL,FORCOLOR);

x1=AREAX+col*BOXW; x2=x1+BOXW;
y1=AREAY-(row+1)*BOXW; y2=y1+BOXW;
bar(++x1,++y1,--x2,--y2);
oldarea[row][col]=area[row][col];
}

MESSAGE=0;
}

int moveLeft()
{
newX=curX-1; clearOldBox();
if(collision(box))
{
newX=curX;
putNewBox();
MESSAGE=0;
return 0;
}
putNewBox();
actW=curW+1; actX=curX=newX;
MESSAGE=mDRAW;
return 1;
}

int moveRight()
{
newX=curX+1; clearOldBox();
if(collision(box))
{
newX=curX;
putNewBox();
MESSAGE=0;
return 0;
}
putNewBox();
actW=curW+1; actX=curX; curX=newX;
MESSAGE=mDRAW;
return 1;
}

int moveDown()
{
int i,j;
newY=curY-1;
clearOldBox();
if(collision(box))
{
newY=curY;
putNewBox();
active=0;
MESSAGE=mLINE;
return 0;
}
putNewBox();
actH=curH+1; actY=newY; curY=newY;
MESSAGE=mDRAW;
return 1;
}

int rotate()
{
int newBox[4][4];
int i,j;
clearOldBox();

for(j=0;j<4;j++)
for(i=0;i<4;i++)
newBox[j][i]=0;

for(j=0;j<4;j++)
for(i=0;i<4;i++)
newBox[curW-i][j]=box[j][i];
newW=curH; newH=curW;
if(collisionRotate(newBox))
{
newW=curW; newH=curH; newX=curX; newY=curY;
putNewBox();
MESSAGE=0;
return 0;
}

for(j=0;j<4;j++)
for(i=0;i<4;i++)
box[j][i]=newBox[j][i];
putNewBox();
actH=newH>curH? newH:curH;
actW=curX+actH-newX;
actX=newX; actY=newY; curX=newX;
curY=newY; curW=newW; curH=newH;
MESSAGE=mDRAW;
return 1;
}

int getW()
{
int i,j;
for(i=3;i>0;i--)
for(j=0;j<4;j++)
if(box[j][i]) return i;
return 0;
}

int getH()
{
int i,j;
for(j=3;j>0;j--)
for(i=0;i<4;i++)
if(box[j][i]) return j;
return 0;
}


void clearOldBox()
{
int i,j;
for(j=0;j<=curH; j++)
for(i=0;i<=curW; i++)
if(box[j][i])
area[curY+j][curX+i]=0;
}

void putNewBox()
{
int i,j;
for(j=0;j<=newH;j++)
for(i=0;i<=newW;i++)
if(box[j][i])
area[newY+j][newX+i]=FORCOLOR;
}

int collision(int cbox[][4])
{
int i,j;
if(newX<0) return 1;
if(newX+newW>=MAXX) return 1;
if(newY<0) return 1;
for(j=0;j<=newH;j++)
for(i=0;i<=newW;i++)
if(area[newY+j][newX+i]&&cbox[j][i]) return 1;
return 0;
}

int collisionRotate(int cbox[][4])
{
int i,j;
if(newX+newW>=MAXX) newX=MAXX-1-newW;
if(newY+newH>=MAXY) newY=MAXY-1-newH;
if(collision(cbox)) return 1;
for(i=0;i<=newW;i++)
for(j=0;j<=newH;j++)
if(area[newY+j][newX+i])
{
newX-=newW-i+1; goto L;
}
L: return collision(cbox);
}

int gameOver()
{
if(!active &&(curY+curH>MAXY-3)) return 1;
else return 0;
}

/* the end */

\u521a\u5b66c\u7684\u65f6\u5019\u7f16\u7684\uff0c\u6240\u4ee5\u7a0b\u5e8f\u89c4\u8303\u6027\u4ee5\u53ca\u4ee3\u7801\u7684\u6267\u884c\u6548\u7387\u90fd\u4e0d\u9ad8\uff0c\u800c\u4e14\u7a0b\u5e8f\u8d85\u957f\u3002\u4f46\u5e94\u8be5\u6ca1\u6709\u592a\u96be\u7684\u8bed\u53e5\u3002
#include
#include
#include
#include
#include
#include
int dx[4],dy[4]; /*\u5b9a\u4e49\u5168\u5c40\u53d8\u91cf*/
int zt1,zt2,str[15][19];
/*str[15][19]\u662f\u628a\u6574\u4e2a\u5c4f\u5e55\u5206\u4e3a15*19\u4e2a\u65b9\u683c\uff0c\u6bcf\u4e00\u4e2a\u65b9\u683c\u7528\u4e00\u4e2a\u6570\u7ec4\u5355\u5143\u8868\u793a\uff0c
\u5982\u679c=15\uff0c\u5219\u8fd9\u4e2a\u65b9\u683c\u5df2\u88ab\u5360\u7528\uff0c=0\uff0c\u5219\u8fd8\u662f\u7a7a\u7684*/
int cx[8][5][4],cy[8][5][4]; /*\u8be5\u53d8\u91cf\u8868\u793a\u6bcf\u79cd\u72b6\u6001\u4e0b\uff0c\u65cb\u8f6c\u65f6\u5750\u6807\u7684\u6539\u53d8*/
int x,y,j,ji,c;
int maxzt[8]={0,2,1,4,2,2,4,4}; /*\u5404\u4e2a\u79cd\u7c7b\u7684\u65b9\u5757\u5206\u522b\u6709\u51e0\u79cd\u72b6\u6001*/
cir() /*\u65cb\u8f6c\u7684\u5904\u7406\u51fd\u6570*/
{ dx[0]=dx[0]+cx[zt1][zt2][0];dy[0]=dy[0]+cy[zt1][zt2][0];
dx[2]=dx[2]+cx[zt1][zt2][2];dy[2]=dy[2]+cy[zt1][zt2][2];
dx[3]=dx[3]+cx[zt1][zt2][3];dy[3]=dy[3]+cy[zt1][zt2][3];
}
jiance() /*\u68c0\u6d4b\u65cb\u8f6c\u6216\u79fb\u52a8\u80fd\u5426\u8fdb\u884c\u7684\u51fd\u6570\uff0c\u80fd\u5219j=1\uff0c\u4e0d\u80fdj=0*/
{ j=1;
for(ji=0;ji<4;ji++)
{ x=dx[ji];y=dy[ji];
if(str[x][y]!=' ') j=0;
}
c=bioskey(1);
if(c!=0) c=bioskey(0);
}
main()
{ int dotx[4],doty[4],score; /*dotx[]doty[]\u8868\u793a\u4e00\u4e2a\u65b9\u5757\u4e2a\u70b9\u7684\u5750\u6807*/
int ddx,ddy;
int rzt1,rzt2,i,u,t=1;
int a[5],b[11],o,p,an,bn;
int rotx[4],roty[4],spd=0;
begin: system("cls"); /*\u6e38\u620f\u521d\u59cb\u5316\u9636\u6bb5*/
printf("londing...");
for(i=0;i<12;i++) /*\u53d8\u91cf\u521d\u59cb\u9636\u6bb5*/
{ for(u=0;u<19;u++)
str[i][u]=' ';
}
for(i=0;i<12;i++)
{ str[i][0]='-';str[i][18]='-'; }
for(u=0;u<19;u++)
{ str[0][u]='|';str[11][u]='|'; }
cx[1][1][0]=1;cx[1][1][2]=-1;cx[1][1][3]=-2; /*\u5bf9\u65cb\u8f6c\u53d8\u91cf\u8fdb\u884c\u8d4b\u503c*/
cy[1][1][0]=1;cy[1][1][2]=-1;cy[1][1][3]=-2;
cx[1][2][0]=-1;cx[1][2][2]=1;cx[1][2][3]=2;
cy[1][2][0]=-1;cy[1][2][2]=1;cy[1][2][3]=2;

cx[2][1][0]=0;cx[2][1][2]=0;cx[2][1][3]=0;
cy[2][1][0]=0;cy[2][1][2]=0;cy[2][1][3]=0;

cx[3][1][0]=1;cx[3][1][2]=-1;cx[3][1][3]=1;
cy[3][1][0]=-1;cy[3][1][2]=1;cy[3][1][3]=1;
cx[3][2][0]=1;cx[3][2][2]=-1;cx[3][2][3]=-1;
cy[3][2][0]=1;cy[3][2][2]=-1;cy[3][2][3]=1;
cx[3][3][0]=-1;cx[3][3][2]=1;cx[3][3][3]=-1;
cy[3][3][0]=1;cy[3][3][2]=-1;cy[3][3][3]=-1;
cx[3][4][0]=-1;cx[3][4][2]=1;cx[3][4][3]=1;
cy[3][4][0]=-1;cy[3][4][2]=1;cy[3][4][3]=-1;

cx[4][1][0]=-1;cx[4][1][2]=1;cx[4][1][3]=2;
cy[4][1][0]=1;cy[4][1][2]=1;cy[4][1][3]=0;
cx[4][2][0]=1;cx[4][2][2]=-1;cx[4][2][3]=-2;
cy[4][2][0]=-1;cy[4][2][2]=-1;cy[4][2][3]=0;

cx[5][1][0]=1;cx[5][1][2]=1;cx[5][1][3]=0;
cy[5][1][0]=-1;cy[5][1][2]=1;cy[5][1][3]=2;
cx[5][2][0]=-1;cx[5][2][2]=-1;cx[5][2][3]=0;
cy[5][2][0]=1;cy[5][2][2]=-1;cy[5][2][3]=-2;

cx[6][1][0]=1;cx[6][1][2]=-1;cx[6][1][3]=0;
cy[6][1][0]=-1;cy[6][1][2]=1;cy[6][1][3]=2;
cx[6][2][0]=1;cx[6][2][2]=-1;cx[6][2][3]=-2;
cy[6][2][0]=1;cy[6][2][2]=-1;cy[6][2][3]=0;
cx[6][3][0]=-1;cx[6][3][2]=1;cx[6][3][3]=0;
cy[6][3][0]=1;cy[6][3][2]=-1;cy[6][3][3]=-2;
cx[6][4][0]=-1;cx[6][4][2]=1;cx[6][4][3]=2;
cy[6][4][0]=-1;cy[6][4][2]=1;cy[6][4][3]=0;

cx[7][1][0]=-1;cx[7][1][2]=1;cx[7][1][3]=2;
cy[7][1][0]=1;cy[7][1][2]=-1;cy[7][1][3]=0;
cx[7][2][0]=-1;cx[7][2][2]=1;cx[7][2][3]=0;
cy[7][2][0]=-1;cy[7][2][2]=1;cy[7][2][3]=2;
cx[7][3][0]=1;cx[7][3][2]=-1;cx[7][3][3]=-2;
cy[7][3][0]=-1;cy[7][3][2]=1;cy[7][3][3]=0;
cx[7][4][0]=1;cx[7][4][2]=-1;cx[7][4][3]=0;
cy[7][4][0]=1;cy[7][4][2]=-1;cy[7][4][3]=-2;

srand(time(0)); /*\u5bf9\u968f\u673a\u6570\u51fd\u6570rand()\u8fdb\u884c\u521d\u59cb\u5316*/
zt1=rand()%7+1; /*\u751f\u6210\u7b2c\u4e00\u3001\u4e8c\u4e2a\u65b9\u5757*/
if(zt1==2) zt2=1;
if(zt1==1||zt1==4||zt1==5) zt2=rand()%2+1;
if(zt1==3||zt1==6||zt1==7) zt2=rand()%4+1;
rzt1=rand()%7+1;
if(rzt1==2) rzt2=1;
if(rzt1==1||rzt1==4||rzt1==5) rzt2=rand()%2+1;
if(rzt1==3||rzt1==6||rzt1==7) rzt2=rand()%4+1;
score=0;
for(o=1;o<11;o++) b[o]=0;
switch(zt1*10+zt2)
/*zt1\u548czt2\u5206\u522b\u4ee3\u8868\u65b9\u5757\u7684\u79cd\u7c7b\u548c\u72b6\u6001\uff0c\u8fd9\u6b65\u662f\u6839\u636e\u8fd9\u4e24\u4e2a\u53d8\u91cf\u786e\u5b9a\u65b9\u5757\u7684\u56db\u4e2a\u70b9\u7684\u5750\u6807*/
{ case 11: dotx[0]=4;dotx[1]=5;dotx[2]=6;dotx[3]=7;
doty[0]=2;doty[1]=2;doty[2]=2;doty[3]=2;
break;
case 12: dotx[0]=5;dotx[1]=5;dotx[2]=5;dotx[3]=5;
doty[0]=4;doty[1]=3;doty[2]=2;doty[3]=1;
break;
case 21: dotx[0]=5;dotx[1]=6;dotx[2]=5;dotx[3]=6;
doty[0]=1;doty[1]=1;doty[2]=2;doty[3]=2;
break;
case 31: dotx[0]=4;dotx[1]=5;dotx[2]=6;dotx[3]=5;
doty[0]=2;doty[1]=2;doty[2]=2;doty[3]=1;
break;
case 32: dotx[0]=5;dotx[1]=5;dotx[2]=5;dotx[3]=6;
doty[0]=1;doty[1]=2;doty[2]=3;doty[3]=2;
break;
case 33: dotx[0]=6;dotx[1]=5;dotx[2]=4;dotx[3]=5;
doty[0]=1;doty[1]=1;doty[2]=1;doty[3]=2;
break;
case 34: dotx[0]=6;dotx[1]=6;dotx[2]=6;dotx[3]=5;
doty[0]=3;doty[1]=2;doty[2]=1;doty[3]=2;
break;
case 41: dotx[0]=6;dotx[1]=5;dotx[2]=5;dotx[3]=4;
doty[0]=2;doty[1]=2;doty[2]=1;doty[3]=1;
break;
case 42: dotx[0]=5;dotx[1]=5;dotx[2]=6;dotx[3]=6;
doty[0]=3;doty[1]=2;doty[2]=2;doty[3]=1;
break;
case 51: dotx[0]=4;dotx[1]=5;dotx[2]=5;dotx[3]=6;
doty[0]=2;doty[1]=2;doty[2]=1;doty[3]=1;
break;
case 52: dotx[0]=5;dotx[1]=5;dotx[2]=6;dotx[3]=6;
doty[0]=1;doty[1]=2;doty[2]=2;doty[3]=3;
break;
case 61: dotx[0]=4;dotx[1]=5;dotx[2]=6;dotx[3]=6;
doty[0]=2;doty[1]=2;doty[2]=2;doty[3]=1;
break;
case 62: dotx[0]=5;dotx[1]=5;dotx[2]=5;dotx[3]=6;
doty[0]=1;doty[1]=2;doty[2]=3;doty[3]=3;
break;
case 63: dotx[0]=6;dotx[1]=5;dotx[2]=4;dotx[3]=4;
doty[0]=1;doty[1]=1;doty[2]=1;doty[3]=2;
break;
case 64: dotx[0]=6;dotx[1]=6;dotx[2]=6;dotx[3]=5;
doty[0]=3;doty[1]=2;doty[2]=1;doty[3]=1;
break;
case 71: dotx[0]=6;dotx[1]=5;dotx[2]=4;dotx[3]=4;
doty[0]=2;doty[1]=2;doty[2]=2;doty[3]=1;
break;
case 72: dotx[0]=5;dotx[1]=5;dotx[2]=5;dotx[3]=6;
doty[0]=3;doty[1]=2;doty[2]=1;doty[3]=1;
break;
case 73: dotx[0]=4;dotx[1]=5;dotx[2]=6;dotx[3]=6;
doty[0]=1;doty[1]=1;doty[2]=1;doty[3]=2;
break;
case 74: dotx[0]=6;dotx[1]=6;dotx[2]=6;dotx[3]=5;
doty[0]=1;doty[1]=2;doty[2]=3;doty[3]=3;
break;
}
switch(rzt1*10+rzt2) /*\u786e\u5b9a\u7b2c\u4e8c\u4e2a\u65b9\u5757\u5404\u4e2a\u70b9\u7684\u5750\u6807*/
{ case 11: rotx[0]=4;rotx[1]=5;rotx[2]=6;rotx[3]=7;
roty[0]=2;roty[1]=2;roty[2]=2;roty[3]=2;
break;
case 12: rotx[0]=5;rotx[1]=5;rotx[2]=5;rotx[3]=5;
roty[0]=4;roty[1]=3;roty[2]=2;roty[3]=1;
break;
case 21: rotx[0]=5;rotx[1]=6;rotx[2]=5;rotx[3]=6;
roty[0]=1;roty[1]=1;roty[2]=2;roty[3]=2;
break;
case 31: rotx[0]=4;rotx[1]=5;rotx[2]=6;rotx[3]=5;
roty[0]=2;roty[1]=2;roty[2]=2;roty[3]=1;
break;
case 32: rotx[0]=5;rotx[1]=5;rotx[2]=5;rotx[3]=6;
roty[0]=1;roty[1]=2;roty[2]=3;roty[3]=2;
break;
case 33: rotx[0]=6;rotx[1]=5;rotx[2]=4;rotx[3]=5;
roty[0]=1;roty[1]=1;roty[2]=1;roty[3]=2;
break;
case 34: rotx[0]=6;rotx[1]=6;rotx[2]=6;rotx[3]=5;
roty[0]=3;roty[1]=2;roty[2]=1;roty[3]=2;
break;
case 41: rotx[0]=6;rotx[1]=5;rotx[2]=5;rotx[3]=4;
roty[0]=2;roty[1]=2;roty[2]=1;roty[3]=1;
break;
case 42: rotx[0]=5;rotx[1]=5;rotx[2]=6;rotx[3]=6;
roty[0]=3;roty[1]=2;roty[2]=2;roty[3]=1;
break;
case 51: rotx[0]=4;rotx[1]=5;rotx[2]=5;rotx[3]=6;
roty[0]=2;roty[1]=2;roty[2]=1;roty[3]=1;
break;
case 52: rotx[0]=5;rotx[1]=5;rotx[2]=6;rotx[3]=6;
roty[0]=1;roty[1]=2;roty[2]=2;roty[3]=3;
break;
case 61: rotx[0]=4;rotx[1]=5;rotx[2]=6;rotx[3]=6;
roty[0]=2;roty[1]=2;roty[2]=2;roty[3]=1;
break;
case 62: rotx[0]=5;rotx[1]=5;rotx[2]=5;rotx[3]=6;
roty[0]=1;roty[1]=2;roty[2]=3;roty[3]=3;
break;
case 63: rotx[0]=6;rotx[1]=5;rotx[2]=4;rotx[3]=4;
roty[0]=1;roty[1]=1;roty[2]=1;roty[3]=2;
break;
case 64: rotx[0]=6;rotx[1]=6;rotx[2]=6;rotx[3]=5;
roty[0]=3;roty[1]=2;roty[2]=1;roty[3]=1;
break;
case 71: rotx[0]=6;rotx[1]=5;rotx[2]=4;rotx[3]=4;
roty[0]=2;roty[1]=2;roty[2]=2;roty[3]=1;
break;
case 72: rotx[0]=5;rotx[1]=5;rotx[2]=5;rotx[3]=6;
roty[0]=3;roty[1]=2;roty[2]=1;roty[3]=1;
break;
case 73: rotx[0]=4;rotx[1]=5;rotx[2]=6;rotx[3]=6;
roty[0]=1;roty[1]=1;roty[2]=1;roty[3]=2;
break;
case 74: rotx[0]=6;rotx[1]=6;rotx[2]=6;rotx[3]=5;
roty[0]=1;roty[1]=2;roty[2]=3;roty[3]=3;
break;
}
system("cls"); /*\u663e\u793a\u521d\u59cb\u9636\u6bb5*/
printf("\n\n\n"); /*\u6e38\u620f\u533a\u57df\u4e0b\u79fb3*/
for(u=0;u<19;u++)
{ for(i=0;i<12;i++)
printf("%c",str[i][u]);
printf("\n");
}
gotoxy(16,5);printf("--------");
gotoxy(16,12);printf("--------");
for(i=6;i<12;i++)
{ gotoxy(16,i);printf("|");gotoxy(23,i);printf("|"); }
for(i=6;i<12;i++)
{ gotoxy(16,i);printf("|");gotoxy(23,i);printf("|"); }
for(i=0;i<4;i++)
{ gotoxy(rotx[i]+14,roty[i]+6);printf("%c",15);
}
begin2: delay(26000); /*\u6e38\u620f\u5f00\u59cb\uff0c\u5ef6\u8fdf1*/
speed: delay(10000); /*\u52a0\u901f\uff0c\u5ef6\u8fdf2*/
gotoxy(16,14);printf("Score:%d",score);
for(i=0;i<4;i++)
{ gotoxy(dotx[i]+1,doty[i]+4);printf(" ");
ddx=dotx[i];ddy=doty[i];
str[ddx][ddy]=' ';
}
an=an-0.4; /*\u8868\u793a\u6309\u952e\u662f\u5426\u4e00\u76f4\u6309\u7740\uff0c\u7528\u4e8e\u65b9\u5757\u843d\u5730\u540e\u7684\u79fb\u52a8*/
c=bioskey(1); /*\u6309\u952e\u5904\u7406\u90e8\u5206*/
/*bioskey(1)\u662f\u7528\u6765\u68c0\u6d4b\u662f\u5426\u6309\u4e0b\u6848\u4ef6\u7684\u51fd\u6570*/
if(c!=0)
{ c=bioskey(0);
if(c==8292||c==19712)
{ for(i=0;i<4;i++)
{ dx[i]=dotx[i]+1;dy[i]=doty[i]; }
jiance();
for(i=0;i<4;i++)
dotx[i]=(j)? dx[i] : dotx[i];
an=(j||bn);
}
if(c==7777||c==19200)
{ for(i=0;i<4;i++)
{ dx[i]=dotx[i]-1;dy[i]=doty[i]; }
jiance();
for(i=0;i<4;i++)
dotx[i]=(j)? dx[i] : dotx[i];
an=(j||bn);
}
if(c==6512) /*\u6682\u505c\u7684\u5904\u7406*/
{ while(1)
{ c=bioskey(0);
if(c==6512) break;
}
goto begin3;
}
if(c==8051||c==20480) spd=1; /*\u52a0\u901f\uff08spd==1\u8868\u793a\u52a0\u901f\u72b6\u6001\uff09*/
if(c==4471||c==18432) /*\u65cb\u8f6c\u7684\u5904\u7406*/
{ for(i=0;i<4;i++)
{ dx[i]=dotx[i];dy[i]=doty[i]; }
/*dx[]\u4e0edy[]\u662f\u4e34\u65f6\u53d8\u91cf\uff0c\u8fd9\u6837\u4e00\u65e6\u5224\u65ad\u4e3a\u4e0d\u80fd\u65cb\u8f6c\uff0c\u5c31\u53ef\u65b9\u4fbf\u7684\u56de\u590d\u65cb\u8f6c\u524d\u7684\u5750\u6807*/
cir(); /*\u65cb\u8f6c*/
jiance(); /*\u5224\u65ad\u65cb\u8f6c\u662f\u5426\u80fd\u8fdb\u884c*/
for(i=0;i<4;i++)
{ dotx[i]=(j)? dx[i] : dotx[i]; doty[i]=(j)?dy[i] : doty[i]; }
/*\u6839\u636ejiance()\u5f97\u5230\u7684j\u503c\uff0c\u5224\u65ad\u662f\u5bf9dotx[]\u4e0edoty[]\u8d4b\u65cb\u8f6c\u540e\u7684\u8fd8\u662f\u65cb\u8f6c\u524d\u7684\u503c*/
if(j==1) /*\u5982\u679c\u65cb\u8f6c\u53ef\u5df2\u7ecf\u884c\uff0c\u5c31\u5bf9\u539f\u65b9\u5757\u7684\u72b6\u6001\u8fdb\u884c\u6539\u53d8*/
{ an=(j||bn);zt2=zt2+1;
if(zt2>maxzt[zt1]) zt2=1;
goto overif; /*\u7ed3\u675f\u65cb\u8f6c\u7684\u5904\u7406*/
}
for(i=0;i<4;i++)
{ dx[i]=dotx[i]+1;dy[i]=doty[i]; }
/*\u5982\u679c\u4e0d\u80fd\u65cb\u8f6c\uff0c\u518d\u5224\u65ad\u5750\u6807\u53f3\u79fb\u4e00\u4e2a\u540e\u80fd\u5426\u65cb\u8f6c*/
cir();
jiance();
for(i=0;i<4;i++)
{ dotx[i]=(j)? dx[i] : dotx[i]; doty[i]=(j)?dy[i] : doty[i]; }
if(j==1)
{ an=(j||bn);zt2=zt2+1;
if(zt2>maxzt[zt1]) zt2=1;
goto overif;
}
if(dotx[2]==1) goto overif;
for(i=0;i<4;i++)
{ dx[i]=dotx[i]-1;dy[i]=doty[i]; }
/*\u5224\u65ad\u5750\u6807\u5de6\u79fb\u4e00\u4e2a\u540e\u80fd\u5426\u65cb\u8f6c*/
cir();
jiance();
for(i=0;i<4;i++)
{ dotx[i]=(j)? dx[i] : dotx[i]; doty[i]=(j)?dy[i] : doty[i]; }
if(j==1)
{ an=(j||bn);zt2=zt2+1;
if(zt2>maxzt[zt1]) zt2=1;
goto overif;
}
overif: ;
}
}
begin3: for(i=0;i<4;i++) /*\u65b9\u5757\u4e0b\u79fb\u7684\u5904\u7406*/
{ dx[i]=dotx[i];dy[i]=doty[i]+1; }
jiance();
bn=j;
for(i=0;i<4;i++)
doty[i]=(j)? dy[i] : doty[i];
for(i=0;i<4;i++)
{ gotoxy(dotx[i]+1,doty[i]+4);printf("%c",15);
ddx=dotx[i];ddy=doty[i];
str[ddx][ddy]=15;
}
if(j==1&&spd==1) { spd=0;goto speed; }
if(j==1||an>0) goto begin2;
for(u=17;u>0;u--) /*\u65b9\u5757\u505c\u6b62\u4e0b\u79fb\uff08\u65b9\u5757\u79fb\u52a8\u5230\u5e95\u4e86\uff09\u7684\u5904\u7406*/
{ for(i=1;i<11;i++) /*\u5224\u65ad\u6bcf\u4e00\u884c\u662f\u5426\u6392\u6ee1*/
if(str[i][u]==15) b[i]=1;
if (b[1]+b[2]+b[3]+b[4]+b[5]+b[6]+b[7]+b[8]+b[9]+b[10]<10)
{ for(o=1;o<11;o++) b[o]=0;
continue;
}
for(o=1;o<11;o++) b[o]=0;
a[t]=u;t++;
}
score+=(t)*(t-1)/2;
for(i=1;i<11;i++)
if(str[i][1]==15) b[i]=1;
if (b[1]+b[2]+b[3]+b[4]+b[5]+b[6]+b[7]+b[8]+b[9]+b[10]>0 &&t==1) goto over;
for(o=1;o<11;o++) b[o]=0;
if(t==1) goto ran;
switch(t) /*\u6d88\u9664\u65b9\u5757\u7684\u5904\u7406\uff0ct=\u8981\u6d88\u9664\u7684\u51fd\u6570+1*/
{ case 5: for(u=a[4];u>1;u--) { for(i=1;i<11;i++) str[i][u]=str[i][u-1]; }
/*\u5c06\u8981\u6d88\u9664\u7684\u884c\u4e2d\uff0c\u6700\u4e0a\u9762\u4e00\u884c\uff0c\u4e0a\u9762\u7684\u65b9\u683c\u6574\u4f53\u4e0b\u79fb\uff0c\u4e0b\u9762\u7684case 4,3,2\u7c7b\u4f3c*/
case 4: for(u=a[3];u>1;u--) { for(i=1;i<11;i++) str[i][u]=str[i][u-1]; }
case 3: for(u=a[2];u>1;u--) { for(i=1;i<11;i++) str[i][u]=str[i][u-1]; }
case 2: for(u=a[1];u>1;u--) { for(i=1;i<11;i++) str[i][u]=str[i][u-1]; }
}
t=1;
for(u=1;u<18;u++)
{ for(i=1;i<11;i++)
{ gotoxy(i+1,u+4);
printf("%c",str[i][u]);
}
}
ran: zt1=rzt1;zt2=rzt2;rzt1=rand()%7+1; /*\u751f\u6210\u4e0b\u4e24\u4e2a\u65b9\u5757*/
if(rzt1==2) rzt2=1;
if(rzt1==1||rzt1==4||rzt1==5) rzt2=rand()%2+1;
if(rzt1==3||rzt1==6||rzt1==7) rzt2=rand()%4+1;
for(i=0;i<4;i++)
{ dotx[i]=rotx[i];doty[i]=roty[i];
gotoxy(dotx[i]+1,doty[i]+4);printf("%c",15);
}
switch(rzt1*10+rzt2)
{ case 11: rotx[0]=4;rotx[1]=5;rotx[2]=6;rotx[3]=7;
roty[0]=2;roty[1]=2;roty[2]=2;roty[3]=2;
break;
case 12: rotx[0]=5;rotx[1]=5;rotx[2]=5;rotx[3]=5;
roty[0]=4;roty[1]=3;roty[2]=2;roty[3]=1;
break;
case 21: rotx[0]=5;rotx[1]=6;rotx[2]=5;rotx[3]=6;
roty[0]=1;roty[1]=1;roty[2]=2;roty[3]=2;
break;
case 31: rotx[0]=4;rotx[1]=5;rotx[2]=6;rotx[3]=5;
roty[0]=2;roty[1]=2;roty[2]=2;roty[3]=1;
break;
case 32: rotx[0]=5;rotx[1]=5;rotx[2]=5;rotx[3]=6;
roty[0]=1;roty[1]=2;roty[2]=3;roty[3]=2;
break;
case 33: rotx[0]=6;rotx[1]=5;rotx[2]=4;rotx[3]=5;
roty[0]=1;roty[1]=1;roty[2]=1;roty[3]=2;
break;
case 34: rotx[0]=6;rotx[1]=6;rotx[2]=6;rotx[3]=5;
roty[0]=3;roty[1]=2;roty[2]=1;roty[3]=2;
break;
case 41: rotx[0]=6;rotx[1]=5;rotx[2]=5;rotx[3]=4;
roty[0]=2;roty[1]=2;roty[2]=1;roty[3]=1;
break;
case 42: rotx[0]=5;rotx[1]=5;rotx[2]=6;rotx[3]=6;
roty[0]=3;roty[1]=2;roty[2]=2;roty[3]=1;
break;
case 51: rotx[0]=4;rotx[1]=5;rotx[2]=5;rotx[3]=6;
roty[0]=2;roty[1]=2;roty[2]=1;roty[3]=1;
break;
case 52: rotx[0]=5;rotx[1]=5;rotx[2]=6;rotx[3]=6;
roty[0]=1;roty[1]=2;roty[2]=2;roty[3]=3;
break;
case 61: rotx[0]=4;rotx[1]=5;rotx[2]=6;rotx[3]=6;
roty[0]=2;roty[1]=2;roty[2]=2;roty[3]=1;
break;
case 62: rotx[0]=5;rotx[1]=5;rotx[2]=5;rotx[3]=6;
roty[0]=1;roty[1]=2;roty[2]=3;roty[3]=3;
break;
case 63: rotx[0]=6;rotx[1]=5;rotx[2]=4;rotx[3]=4;
roty[0]=1;roty[1]=1;roty[2]=1;roty[3]=2;
break;
case 64: rotx[0]=6;rotx[1]=6;rotx[2]=6;rotx[3]=5;
roty[0]=3;roty[1]=2;roty[2]=1;roty[3]=1;
break;
case 71: rotx[0]=6;rotx[1]=5;rotx[2]=4;rotx[3]=4;
roty[0]=2;roty[1]=2;roty[2]=2;roty[3]=1;
break;
case 72: rotx[0]=5;rotx[1]=5;rotx[2]=5;rotx[3]=6;
roty[0]=3;roty[1]=2;roty[2]=1;roty[3]=1;
break;
case 73: rotx[0]=4;rotx[1]=5;rotx[2]=6;rotx[3]=6;
roty[0]=1;roty[1]=1;roty[2]=1;roty[3]=2;
break;
case 74: rotx[0]=6;rotx[1]=6;rotx[2]=6;rotx[3]=5;
roty[0]=1;roty[1]=2;roty[2]=3;roty[3]=3;
break;
}
for(i=6;i<12;i++) /*\u5237\u65b0\u4e00\u4e0b\u7528\u6765\u663e\u793a\u4e0b\u4e00\u4e2a\u65b9\u5757\u7684\u90a3\u4e2a\u533a\u57df*/
{ gotoxy(16,i);printf("|");gotoxy(23,i);printf("|"); }
for(i=6;i<12;i++)
for(u=17;u<23;u++) { gotoxy(u,i);printf("%c",32); }
for(i=0;i<4;i++)
{ gotoxy(rotx[i]+14,roty[i]+6);printf("%c",15); }
c=bioskey(1);an=0;
if(c!=0) c=bioskey(0);
if(spd==1) { spd=0;goto speed; }
goto begin2;
over: system("cls");
gotoxy(36,11);printf("GAME OVER");
bioskey(0);
system("cls");
printf("Your score is %d\n\n",score);
printf("Press 'Q' to exit\nIf you want to play again,please press other keys.");
score=0;
c=bioskey(0);
if(c!=4209) goto begin;
}

#include <windows.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>
const int back=34;
const int speed[]={0,12,9,6,3,1};
const int number[]={0,2,3,5,7,11,15};
const int col[]={11,15,12,12,13,13,14};
int rank=1;
int level=0; //0表示既不是向右也不是向左,1表示向左,2表示向右
int kind;
int pri_kind; // 7大类,颜色标记,调用col[col_kind];
int revolve=0; // 旋转状态标记
struct
{
int x;
int y;
}current,before;
struct
{
int x;
int y;
int color;
bool having;
}board[15][25];
struct
{
int vary_x[4];
int vary_y[4];
} vary[]={
{{0, 2, 4, 6},{0, 0, 0, 0}},{{0, 0, 0, 0},{0,-1,-2,-3}},
{{0, 2, 2, 0},{0, 0,-1,-1}},{{0,-2,-2,-4},{0 ,0,-1,-1}},
{{0, 0, 2, 2},{0,-1,-1,-2}},{{0, 2, 2, 4},{0, 0,-1,-1}},
{{0, 0,-2,-2},{0,-1,-1,-2}},{{0, 0, 2, 4},{0,-1, 0, 0}},
{{0, 0, 0, 2},{0,-1,-2,-2}},{{0, 0,-2,-4},{0,-1,-1,-1}},
{{0, 2, 2, 2},{0, 0,-1,-2}},{{0, 2, 4, 4},{0, 0, 0,-1}},
{{0,-2,-2,-2},{0, 0,-1,-2}},{{0, 0, 2, 4},{0,-1,-1,-1}},
{{0, 0, 0,-2},{0,-1,-2,-2}},{{0 ,2, 4, 2},{0, 0, 0,-1}},
{{0, 0, 2, 0},{0,-1,-1,-2}},{{0,-2, 0, 2},{0,-1,-1,-1}},
{{0, 0,-2, 0},{0,-1,-1,-2}},
};
struct
{
int sum;
int connection_x[5];
int connection_y[5];
}connection[]={
{2,{-2,2},{0,1}},
{1,{0},{0}},
{2,{2,-2},{0,0}},
{2,{-2,2},{0,0}},
{4,{-2,0,4,-2},{0,0,-1,1}},
{4,{-4,2,-2,4},{0,0,-1,1}},
{4,{-2,2,0,0},{0,0,0,0}},
};
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void color(int b)
{
HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ;
SetConsoleTextAttribute(hConsole, b) ;
}
void PrintGarphy()
{
color(1593);
int i,j;
gotoxy(2,2);
for(i=0;i<26;i++)
printf("▓");
gotoxy(2,28);
for(i=0;i<26;i++)
printf("▓");
for(i=0;i<26;i++)
{
gotoxy(2,2+i);
puts("▓");
gotoxy(34,2+i);
if(i==8||i==16)
printf("▓▓▓▓▓▓▓▓▓");
else
puts("▓");
gotoxy(52,2+i);
puts("▓");
}
int t;
FILE *fp=fopen("C:\\els.txt","r");
fscanf (fp,"%d",&t);
fclose(fp);
color(43);
gotoxy(37,12);
printf("最高纪录: %d",t);
color(46);
gotoxy(37,14);
puts("当前得分: 0");
color(44);
gotoxy(37,16);
puts("级数 ");
color(39);
gotoxy(37,20);
puts(" ↑ ↓ ← →");
gotoxy(37,22);
puts(" 按空格 暂停");
gotoxy(37,24);
puts(" 按 ESC 退出");
gotoxy(37,26);
puts(" 编写人 ");
color(back);
for(i=0;i<15;i++)
{
for(j=0;j<25;j++)
{
board[i][j].x=4+2*i;
board[i][j].y=3+j;
board[i][j].having=0;
gotoxy(board[i][j].x,board[i][j].y);
puts(" ");
}
}
}
void GameOver()
{
color(391);
for(int i=24;i>=0;i--)
for(int j=0;j<15;j++)
{
gotoxy(32-j*2,3+i);
puts("▆");
Sleep(5);
}
color(back);
for(int j=0;j<25;j++)
for(int i=0;i<15;i++)
{
board[i][j].having=0;
gotoxy(4+2*i,j+3);
puts("▆");
Sleep(5);
}
gotoxy(42,16);
while(rank--)
printf(" ");
color(46);
gotoxy(47,14);
puts(" ");
}
void GetDepth(int *pdepth)
{
(*pdepth)=24;
for(int j=0;j<4;j++)
{
int sum=0;
int n=(current.x+vary[kind].vary_x[j]-4)/2;
int m=current.y+vary[kind].vary_y[j]-3;
if(m<0) m=0;
for(++m;m<25;m++)
if(board[n][m].having==0&&n>=0&&n<15&&m>=0&&m<25)
sum++;
else
break;
if(sum<(*pdepth))
(*pdepth)=sum;
}
}
void CheckFull(int *pscore)
{
int i,j;
int sum=0;
int s[]={0,1,3,6,10};
for(i=0;i<25;i++)
{
bool mark=1;
for(j=0;j<15;j++)
{
if(board[j][i].having==0)
{
mark=0;
board[j][i].color=back;
}
}
if(mark)
{
sum++;
for(int t=i;t>0;t--)
{
gotoxy(4,3+t);
for(j=0;j<15;j++)
{
if(board[j][t-1].having)
{
color(board[j][t-1].color);
printf("▆");
board[j][t].color=board[j][t-1].color;
board[j][t].having=1;
board[j][t-1].having=0;
}
else
{
color(back);
printf(" ");
board[j][t].color=board[j][t].color;
board[j][t].having=0;
board[j][t-1].having=0;
}
}
}
}
}
(*pscore)+=s[sum];
color(46);
gotoxy(47,14);
printf("%d",*pscore);
if(*pscore>=140) rank=5;
else if(*pscore>=90) rank=4;
else if(*pscore>=50) rank=3;
else if(*pscore>=20) rank=2;
else if(*pscore>=1) rank=1;
color(44);
gotoxy(42,16);
for(i=0;i<rank&&*pscore;i++)
printf("★");
int t;
FILE *fp=fopen("C:\\els.txt","r");
fscanf (fp,"%d",&t);
fclose(fp);
if(*pscore>t)
{
fp=fopen("C:\\els.txt","w");
fprintf (fp,"%d",*pscore);
fclose(fp);
color(43);
gotoxy(47,12);
printf("%d",*pscore);
}
fclose(fp);
}
void PrintNext(int pkind)
{
int i;
int x=43,y=6;
color(34);
for(i=0;i<4;i++)
{
gotoxy(x-3,y+i-2);
puts(" ");
}
pri_kind=pkind;
if(pkind==6) pkind=15,x--;
else if(pkind==5) pkind=11,x--;
else if(pkind==4) pkind=7,x--;
else if(pkind==3) pkind=5,x-=2;
else if(pkind==2) pkind=3,x+=2;
else if(pkind==1) pkind=2,x--;
else pkind=0,x-=3;
color(col[pri_kind]);
for(i=0;i<4;i++)
{
gotoxy(x+vary[pkind].vary_x[i],y+vary[pkind].vary_y[i]);
puts("▆");
}
}
void CheckBoundary()
{
int i,n,m;
for(i=0;i<4;i++)
{
m=current.x+vary[kind].vary_x[i];
if(m<4||m>32)
{
current.x+=(m<4?2:-2);
i=0;
}
}
for(i=0;i<4;i++) // 对四个方块分别检查
{
m=current.x+vary[kind].vary_x[i];
n=current.y+vary[kind].vary_y[i];
m=(m-4)/2;
n-=3;
if(n<0||n>24||board[m][n].having)
{
if(level==1) // 左移
current.x+=2; //复原
else if(level==2) // 右移
current.x-=2; //复原
level=0;
break;
}
}
}
void LevelMove()
{
CheckBoundary();
if(level==0) return;
int i;
color(back);
for(i=0;i<4;i++)
{
if(current.y+vary[kind].vary_y[i]>2)
{
gotoxy(before.x+vary[kind].vary_x[i],before.y+vary[kind].vary_y[i]);
puts(" ");
}
}
color(col[pri_kind]);
for(i=0;i<4;i++)
{
if(current.y+vary[kind].vary_y[i]>2)
{
gotoxy(current.x+vary[kind].vary_x[i],current.y+vary[kind].vary_y[i]);
puts("▆");
}
}
before.x=current.x;
}
void Revolve(int **prev_count) //旋转函数
{
int i;
before.x=current.x;
before.y=current.y;
(**prev_count)++;
(**prev_count)%=connection[pri_kind].sum;
current.x=current.x+connection[pri_kind].connection_x[**prev_count];
current.y=current.y+connection[pri_kind].connection_y[**prev_count];
CheckBoundary();
for(i=0;i<4;i++)
{
int m=(current.x-4+vary[number[pri_kind]+**prev_count].vary_x[i])/2;
int n=current.y+vary[number[pri_kind]+**prev_count].vary_y[i]-3;
if(board[m][n].having||m>14||m<0||n>24)
{
current.x=current.x-connection[pri_kind].connection_x[**prev_count];
current.y=current.y-connection[pri_kind].connection_y[**prev_count];
revolve=0;
(**prev_count)--;
before.x=current.x;
before.y=current.y;
return ;
}
}
color(back);
for(i=0;i<4;i++)
{
if(before.y+vary[kind].vary_y[i]>2)
{
gotoxy(before.x+vary[kind].vary_x[i],before.y+vary[kind].vary_y[i]);
puts(" ");
}
}
kind=number[pri_kind]+**prev_count;
color(col[pri_kind]);
for(i=0;i<4;i++)
{
if(current.y+vary[kind].vary_y[i]>2)
{
gotoxy(current.x+vary[kind].vary_x[i],current.y+vary[kind].vary_y[i]);
puts("▆");
}
}
Sleep(speed[rank]);
before.x=current.x;
before.y=current.y;
}
void ChoiceDirection(int *prev_count)
{
int t=50/rank;
while(t--)
{
if(_kbhit())
{
char c=_getch();
switch(c)
{
case 0x48:// up
revolve=1;
Revolve(&prev_count);
break;
case 0x50: //down
level=0;
return;
case 0x4b: //left
before.x=current.x;
current.x-=2;
level=1;
LevelMove();
break;
case 0x4d: //right
before.x=current.x;
current.x+=2;
level=2;
LevelMove();
break;
case ' ':
_getch();
break;
case 27:
color(back);
exit(1);
default:break;
}
}
Sleep(speed[rank]);
}
}
void StraightFall(int depth)
{
int i;
int rev_count=0;
before.x=current.x;
before.y=current.y;
while(GetDepth(&depth),depth--)
{
ChoiceDirection(&rev_count);
GetDepth(&depth);
if(depth==0)
{
revolve=0;
before.x=current.x;
before.y=current.y;
break;
}
color(back);
for(i=0;i<4;i++)
{
if(before.y+vary[kind].vary_y[i]>2)
{
gotoxy(before.x+vary[kind].vary_x[i],before.y+vary[kind].vary_y[i]);
puts(" ");
}
}
current.y++;
color(col[pri_kind]);
for(i=0;i<4;i++)
{
if(current.y+vary[kind].vary_y[i]>2)
{
gotoxy(current.x+vary[kind].vary_x[i],current.y+vary[kind].vary_y[i]);
puts("▆");
}
}
revolve=0;
before.x=current.x;
before.y=current.y;
}
ChoiceDirection(&rev_count);
if(level||revolve)
{
level=0;
revolve=0;
ChoiceDirection(&rev_count);
StraightFall(depth); //递归调用
}
}
int main()
{
srand((unsigned long)time(0));
system("mode con cols=56 lines=30");
system("color 24");
int score=0;
FILE *fp=fopen("C:\\els.txt","r");
if(fp==NULL)
{
fp=fopen("C:\\els.txt","w");
fprintf (fp,"%d",score);
fclose(fp);
}
PrintGarphy();
kind=rand()%7;
int depth;
while(1)
{
int pkind=rand()%7;
PrintNext(pkind);
current.x=18;
current.y=2; // 方块初始出现的坐标
GetDepth(&depth); // 初始深度
if(depth==0)
{
GameOver();
score=0;
rank=1;
}
pri_kind=kind;
if(kind==6) kind=15,current.x-=2;
else if(kind==5) kind=11;
else if(kind==4) kind=7;
else if(kind==3) kind=5;
else if(kind==2) kind=3,current.x+=2;
else if(kind==1) kind=2;
else kind=0,current.x-=2;
StraightFall(depth);
for(int i=0;i<4;i++)
{
int m=(current.x-4+vary[kind].vary_x[i])/2;
int n=current.y-3+vary[kind].vary_y[i];
board[m][n].having=1;
board[m][n].color=col[pri_kind];
}
CheckFull(&score);
kind=pkind;
}
return 0;
}

  • 鐢╟璇█缂栧啓淇勭綏鏂柟鍧绋嬪簭 姹傝瑙
    绛旓細姣忎竴涓瓧鑺傛槸8浣嶏紝鐢ㄦ瘡4浣嶈〃绀烘柟鍧椾腑鐨勪竴琛)unsigned int rockShapeBits ;int nextRockIndex ; //涓涓涓柟鍧锛屽湪鏁扮粍涓殑涓嬫爣 } RockType ;杩欐牱锛屽綋鎴戜滑鎸変笅涓婃柟鍚戦敭鏃讹紝鎶婁紶鍏ュ嚱鏁癉rawRock涓殑rockIndex鍙樹负褰撳墠鏂瑰潡缁撴瀯浣撲腑鐨刵extRockIndex鍗冲彲銆傚弬鑰冭祫鏂欙細C璇█鍥惧舰鐣岄潰绡 ...
  • 淇勭綏鏂柟鍧梒璇█鐨勪唬鐮
    绛旓細淇勭綏鏂柟鍧梒璇█鐨勪唬鐮 闄や簡绠鍗曠殑鍩烘湰瑕佹眰澶栬繕鏈:1.骞冲彴vc6.02.鑳藉瀹炵幇璁╂柟鍧椾笂鏈夋垜鎯宠鎹㈢殑鐓х墖3.鑳藉鎻掑叆鎴戞兂瑕佽缃殑澹伴煶甯屾湜2鍜3杩欎袱鐐瑰鐨勪唬鐮佷笂娓歌缁嗙殑瑙i噴... 闄や簡绠鍗曠殑鍩烘湰瑕佹眰澶栬繕鏈:1.骞冲彴vc6.0 2.鑳藉瀹炵幇璁╂柟鍧椾笂鏈夋垜鎯宠鎹㈢殑鐓х墖 3.鑳藉鎻掑叆鎴戞兂瑕佽缃殑澹伴煶 甯屾湜2鍜3杩欎袱鐐瑰鐨勪唬鐮佷笂娓歌缁...
  • 璋佽兘澶ц嚧鎻忚堪涓涓C璇█鍋氫縿缃楁柉鏂瑰潡鐨勬濇兂
    绛旓細鍏朵粬绫讳技闂 2016-05-23 淇勭綏鏂柟鍧 c璇█缂栫▼鎬濇兂 鎬庝箞瀹炵幇鐨涓涓鎬濊矾 6 2014-03-14 鎯鐢–璇█鍐涓瓧绗︿縿缃楁柉鏂瑰潡,璋佸憡璇変笅澶ц嚧鐨勮璁℃濊矾? 2009-06-19 璋佽兘鎻愪緵涓縿缃楁柉鏂瑰潡鐨凜璇█浠g爜??璋㈣阿 33 2018-04-18 涓涓畝鍗曠殑c璇█鍐欑殑淇勭綏鏂柟鍧楃▼搴? 4 ...
  • 姹涓涓猚璇█缂栧啓鐨淇勭綏鏂柟鍧娓告垙,瑕佸甫鍥惧舰鐨,涓嶈瀛楃鎷肩殑,鐩存帴鍙戜竴...
    绛旓細ret = new Array();//褰撳墠鍑虹幇鐨鏂瑰潡 nextret = new Array();//涓涓涓鍑虹幇鐨勬柟鍧 bg = new Array();//鑳屾櫙鏁扮粍 createEmptyMovieClip("panel", 1048575);//鎵鏈夋柟鍧楅兘鍦ㄦmc閲 for (i = 0; i < 5; i++) { //鍒濆鍖栨柟鍧楁暟缁,2*5鏍煎紡,鍓嶅洓琛屼唬琛ㄦ瘡涓柟鍧楃殑4涓皬鍧楃殑浣嶇疆鍧愭爣,鏈鍚庝竴琛岀涓鍒...
  • 淇勭綏鏂柟鍧鐨c璇█婧愪唬鐮 api瀹炵幇
    绛旓細鑰屼笖瑕佺敤api瀹炵幇,灏ゅ叾鏄獥鍙i儴鍒嗚娉ㄩ噴璇︾粏鐐,mfc灏卞厤浜嗗惂!涓鎼滀竴澶у爢銆傘傘傛湰浜哄垰鏉ヤ笉涔,鍙兘缁欒繖涔堝浜,璋簡!鍏塁涓嶈鍟,瑕乤pi瀹炵幇... 鐢╟璇█鎬庝箞鍐鍟?鑰屼笖瑕佺敤api瀹炵幇,灏ゅ叾鏄獥鍙i儴鍒嗚娉ㄩ噴璇︾粏鐐,mfc灏卞厤浜嗗惂!涓鎼滀竴澶у爢銆傘傘傛湰浜哄垰鏉ヤ笉涔,鍙兘缁欒繖涔堝浜,璋簡!鍏塁涓嶈鍟,瑕乤pi瀹炵幇 灞曞紑  鎴...
  • C璇█涓殑淇勭綏鏂柟鍧
    绛旓細2013-01-19 C璇█涓淇勭綏鏂柟鍧楁庝箞鍋 1 2013-04-14 鐢╟璇█缂栧啓淇勭綏鏂柟鍧绋嬪簭 姹傝瑙 62 2011-10-02 姹侰璇█淇勭綏鏂柟鍧椾唬鐮 546 2018-04-18 涓涓绠鍗曠殑c璇█鍐欑殑淇勭綏鏂柟鍧楃▼搴? 4 2017-12-16 C璇█淇勭綏鏂柟鍧椾唬鐮? 2016-10-26 c璇█淇勭綏鏂柟鍧椾唬鐮 2 2008-03-19 姹備竴浠鐢–璇█缂栧啓鐨勪縿缃楁柉鏂...
  • 鎬庢牱鐢–璇█鍐欎縿缃楁柉鏂瑰潡,姹傛寚鏁,璋㈣阿!
    绛旓細棣栧厛浣犺涓嬭浇vc++锛屽垵瀛﹁呭彲浠ョ敤vs98瀹夎濂藉悗鍦ㄩ」鐩腑鍙互娣诲姞濡備笅浠g爜 include "graphics.h"#include <conio.h>#include <stdlib.h>int gcW = 20, gcColor[] = {DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA,MAGENTA, YELLOW};struct tetris { int _pool[16][...
  • 姹c璇█鍋鐨淇勭綏鏂柟鍧,鍙鑳借繍琛屾垚鍔,灏辩粰鍒嗐
    绛旓細C璇█瀹炰緥鏁欑▼:淇勭綏鏂柟鍧鐨缂栧啓/* 鍏堝啓鍘熺悊: 鏈鐨勪縿缃楁柉鏂瑰潡浠g爜鍑哄叾鐨勭畝鍗,姣旀垜鍘诲勾鍐欑殑鍥涘崄鍑燢瑕佸皬寰楀 瀹為檯涓婃牳蹇冧唬鐮佸彧鏈3-4K,鑰屼笖寰堝鏄撶悊瑙,閫傚悎鏈変竴鐐笴璇█鍩虹骞跺姝 鏈夊叴瓒g殑浜. 杩欏墠闈㈠彧绮楃暐璁茶В鏍稿績绠楁硶: 杩欓噷鎶婃父鎴忕殑鍏抽敭璁捐鏀惧湪涓変釜鐩掑瓙鍜涓涓鍧愭爣涓: 澶х洅瀛:涓涓袱缁存暟缁,璁板綍鐫鏂瑰潡...
  • 澶у彅鐢–璇█瀹炵幇淇勭綏鏂柟鍧灏忔父鎴,楂樻墜鍦ㄦ皯闂!
    绛旓細鎴戣繖娆$粰澶у甯︽潵鐨勬槸锛淇勭綏鏂柟鍧鐨勫皬 娓告垙 锛屽湪杩欎釜绋嬪簭涓紝鎴戜滑鍑犱箮鐢ㄥ埌浜嗕箣鍓嶆墍鏈夌殑鐭ヨ瘑鐐癸紝杩樼敤鍒颁簡涓浜沞ge搴撻噷杈圭殑鍑芥暟鍜屽姛鑳斤紝姣斿锛氭寜閿鐞嗭紝鏂囧瓧杈撳嚭銆佸浘褰㈢粯鍒讹紝杩樻湁鍥剧墖鐨勬樉绀虹瓑銆備富瑕佷负澶у璇︾粏浠嬬粛浜哃inux涓C璇█瀹炵幇淇勭綏鏂柟鍧楀皬 娓告垙 锛屽叿鏈変竴瀹氱殑鍙傝冧环鍊硷紝鎰熷叴瓒g殑灏忎紮浼翠滑鍙互鍙傝冧竴涓 ...
  • 瀵绘眰c璇█鐗堢殑淇勭綏鏂柟鍧绋嬪簭
    绛旓細c=bioskey(1); if(c!=0) c=bioskey(0); } main() { int dotx[4],doty[4],score; /*dotx[]doty[]琛ㄧず涓涓柟鍧涓偣鐨勫潗鏍*/ int ddx,ddy; int rzt1,rzt2,i,u,t=1; int a[5],b[11],o,p,an,bn; int rotx[4],roty[4],spd=0; begin: system("cls"); /*娓告垙鍒濆鍖栭樁娈*/ ...
  • 扩展阅读:俄罗斯方块在线 ... 写一个c语言编译器 ... 俄罗斯方块游戏下载 ... 俄罗斯方块c语言简单 ... 经典俄罗斯方块 ... 俄罗斯语言基础入门 ... c语言免费教程 ... 俄罗斯方块代码编写 ... 俄罗斯方块简单代码c语言 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网