#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
int r,p,q=0,score=0,speed=25;
int static b[20][10];
int static block[7][3][2]
={{-1,0,0,-1,1,-1},
{-1,-1,0,-1,1,0},
{-1,0,-1,1,1,0},
{-1,-1,-1,0,1,0},
{0,-1,1,0,1,-1},
{-2,0,-1,0,1,0},
{0,-1,0,1,-1,0}};
void Display(void);
void Block_Random(void);
void GotoXY(int x, int y);
void Fill_Block(void);
void Clean_Block(void);
void Move_Left(void);
void Move_Right(void);
void Move_Down(void);
void Fast_Down(void);
void End(void);
void Check_Block(void);
void Check_Line(void);
void Clean_Line(int);
void Change_Block(void);
void Swap(int&,int&);
void Welcome(void);
void Pause(void);
/*----------------------------------------*/
int main(void)
{int i,j,k;
char c;
p=1;
for(i=0;i<20;i++)
for(j=0;j<10;j++)
b[i][j]=0;
Block_Random();
Welcome();
Display();
while(1)
{
for(k=0;k<20;k++)
{
if(kbhit())
{c=getch();
switch(c)
{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 's':case '5':Fast_Down();break;
case 'x':case '2':Move_Down();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(speed);}
Move_Down();
}
return 0;}
/*----------------------------------------*/
void Display()
{int i,j;
Fill_Block();
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);
}
/*----------------------------------------*/
void GotoXY(int x, int y) {
COORD c;
c.X = x-1;
c.Y = y-1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
/*----------------------------------------*/
void Block_Random()
{
srand((unsigned)time(NULL));
int k,rr,i;
k=rand()%7;rr=rand()%4;
r=k;
for (i=0;i<=rr;i++)
Change_Block();
}
/*----------------------------------------*/
void Fill_Block()
{int i,x,y;
for(i=0;i<3;i++)
{x=block[r][i][0];
y=block[r][i][1];
if(b[x+p][5+y+q]!=2) b[x+p][5+y+q]=1; else End();
if(5+y+q>9) Move_Left();
if(5+y+q<0) Move_Right();
}
if(b[p][5+q]!=2) b[p][5+q]=1; else End();
}
/*----------------------------------------*/
void Clean_Block(void)
{int i,x,y;
for(i=0;i<3;i++)
{x=block[r][i][0];
y=block[r][i][1];
b[x+p][5+y+q]=0;
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
int r,p,q=0,score=0,speed=25;
int static b[20][10];
int static block[7][3][2]
={{-1,0,0,-1,1,-1},
{-1,-1,0,-1,1,0},
{-1,0,-1,1,1,0},
{-1,-1,-1,0,1,0},
{0,-1,1,0,1,-1},
{-2,0,-1,0,1,0},
{0,-1,0,1,-1,0}};
void Display(void);
void Block_Random(void);
void GotoXY(int x, int y);
void Fill_Block(void);
void Clean_Block(void);
void Move_Left(void);
void Move_Right(void);
void Move_Down(void);
void Fast_Down(void);
void End(void);
void Check_Block(void);
void Check_Line(void);
void Clean_Line(int);
void Change_Block(void);
void Swap(int&,int&);
void Welcome(void);
void Pause(void);
/*----------------------------------------*/
int main(void)
{int i,j,k;
char c;
p=1;
for(i=0;i<20;i++)
for(j=0;j<10;j++)
b[i][j]=0;
Block_Random();
Welcome();
Display();
while(1)
{
for(k=0;k<20;k++)
{
if(kbhit())
{c=getch();
switch(c)
{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 's':case '5':Fast_Down();break;
case 'x':case '2':Move_Down();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(speed);}
Move_Down();
}
return 0;}
/*----------------------------------------*/
void Display()
{int i,j;
Fill_Block();
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);
}
/*----------------------------------------*/
void GotoXY(int x, int y) {
COORD c;
c.X = x-1;
c.Y = y-1;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
/*----------------------------------------*/
void Block_Random()
{
srand((unsigned)time(NULL));
int k,rr,i;
k=rand()%7;rr=rand()%4;
r=k;
for (i=0;i<=rr;i++)
Change_Block();
}
/*----------------------------------------*/
void Fill_Block()
{int i,x,y;
for(i=0;i<3;i++)
{x=block[r][i][0];
y=block[r][i][1];
if(b[x+p][5+y+q]!=2) b[x+p][5+y+q]=1; else End();
if(5+y+q>9) Move_Left();
if(5+y+q<0) Move_Right();
}
if(b[p][5+q]!=2) b[p][5+q]=1; else End();
}
/*----------------------------------------*/
void Clean_Block(void)
{int i,x,y;
for(i=0;i<3;i++)
{x=block[r][i][0];
y=block[r][i][1];
b[x+p][5+y+q]=0;