该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Display();
}
/*----------------------------------------*/
void Move_Right(void)
{if(p==0) return;
int i,x,y;
for(i=0;i<20;i++)
if(b[i][9]==1) return;
for(i=0;i<3;i++)
{x=block[r][i][0];
y=block[r][i][1];
if(b[x+p][6+y+q]==2) return;}
Clean_Block();
q++;
Fill_Block();
Display();
}
/*----------------------------------------*/
void Move_Down(void)
{
Clean_Block();
p++;
Display();
Check_Block();
}
/*----------------------------------------*/
void End()
{char c=0;
int i,j,x,y;
for(i=0;i<3;i++)
{x=block[r][i][0];
y=block[r][i][1];
b[x+p][5+y+q]=2;
}
b[p][5+q]=2;
GotoXY(1,1);
for(i=0;i<20;i++)
{printf("■");
for(j=0;j<10;j++)
{switch(b[i][j])
{case 0:printf(" ");break;
case 1:printf("□");break;
case 2:printf("■");break;}}
printf("■\n");}
for(i=0;i<12;i++)
printf("■");
GotoXY(1,22);printf("SCORE:%d",score);
GotoXY(1,23);printf("LEVEL=%d",score/100);
//Display();
GotoXY(1,24);printf("Game Over");
GotoXY(1,25);printf("Press Q to ESC...");
do
{c=getch();}
while(c!='q');
exit(1);
}
/*----------------------------------------*/
void Check_Block()
{int i,x,y,k;
char c;
Display();
for(i=0;i<10;i++)
if(b[0][i]==1&&b[1][i]==2) End();
for(i=0;i<3;i++)
{x=block[r][i][0];
y=block[r][i][1];
if(b[x+p+1][5+y+q]==2||b[p+1][5+q]==2||x+p==19)
{
/*-----------------v0.12b-----------------------*/
for(k=0;k<10;k++)
{
if(kbhit())
{c=getch();
switch©
{case 'a':case '4':Move_Left();break;
case 'd':case '6':Move_Right();break;
case 'w':case '8':Clean_Block();Change_Block();Display();break;
case 'p':Pause();break;
case 'q':{GotoXY(1,24);printf("Game Over");
GotoXY(1,25);printf("Press any key to ESC...");
c=getch();
exit(1);};break;
}}
Sleep(5);}
/*-----------------v0.12b-----------------------*/
if(!(b[x+p+1][5+y+q]==2||b[p+1][5+q]==2||x+p==19)) Check_Block();
for(i=0;i<3;i++)
{x=block[r][i][0];
y=block[r][i][1];
b[x+p][5+y+q]=2;
}
b[p][5+q]=2;Check_Line();Block_Random();p=0;q=0;Fill_Block();Check_Block();Display();}
}
}
/*----------------------------------------*/
void Check_Line()
{int i,j,s=0,t=0;
for(i=0;i<20;i++)
{s=0;
for(j=0;j<10;j++)
s+=b[i][j];
if (s==20) {s=0;Clean_Line(i);t++;}
}
switch (t)
{case 1:score++;break;
case 2:score+=3;break;
case 3:score+=5;break;
case 4:score+=8;break;
}
switch(score/100)
{case 0:speed=25;break;
case 1:speed=20;break;
case 2:speed=17;break;
case 3:speed=15;break;
case 4:speed=12;break;
case 5:speed=10;break;
case 6:speed=7;break;
case 7:speed=5;break;
case 8:speed=2;break;
case 9:{speed=0;break;}
}
}
/*----------------------------------------*/
void Clean_Line(int l)
{int i,j;
for(i=l-1;i>=0;i--)
for(j=0;j<10;j++)
b[i+1][j]=b[i][j];
for(i=0;i<10;i++)
b[0][j]=0;
}
/*----------------------------------------*/
void Change_Block(void)
{int i,yy;
if (r==4) return;
for(i=0;i<3;i++)
{
if(block[r][i][0]*block[r][i][1]>0) block[r][i][1]=(-1)*block[r][i][1]; else
if(block[r][i][0]*block[r][i][1]<0) block[r][i][0]=(-1)*block[r][i][0]; else
if(block[r][i][0]==0) Swap(block[r][i][0],block[r][i][1]); else