#include "graphics.h"
#include "dos.h"
/********************************/
#define CELL 20
#define MAXX 12
#define MAXY 18
#define LEFT -1
#define RIGHT 1
/*******************************/
int iNow,iNext,iScore;
unsigned char End=0,chWork[MAXY][MAXX]={0};
/*******************************/
struct Square
{
int x;
int y;
}SQUARE[28][4],truck[4];
/*******************************/
/****FRIST**/
void init();
void DefinedSquare();
void OpenPlay();
void PlayGame();
/****SECOND**/
void SquareEnter();
void MoveSquare(int);
void FlipSquare();
void FallSquare();
void DownSquare();
/****THIRD**/
void KillLine();
void PaintNext();
void PaintSquare(int,int,int,int);
void GetScore();
/*****************MAIN*********************/
main()
{
char time[11];
struct time tim,temp;
iScore=0;
init();
DefinedSquare();
gettime(&temp);
/*set text model*/
setfillstyle(SOLID_FILL,CYAN);
setcolor(YELLOW);
settextstyle(0,0,1);
while(!kbhit())
{
gettime(&tim);
if(tim.ti_sec!=temp.ti_sec)
{
bar(75,440,140,450);
temp.ti_sec=tim.ti_sec;
sprintf(time,"%02d:%02d:%02d",tim.ti_hour,tim.ti_min,tim.ti_sec);
outtextxy(75,440,time);
}
}
getch();
OpenPlay();
PlayGame();
closegraph();
}
/****************DefindeSquare************/
void DefinedSquare()
{/*SQUARE[i][0] is center*/
SQUARE[0][0].y=0;SQUARE[0][1].y=0;SQUARE[0][2].y=1;SQUARE[0][3].y=1;
SQUARE[0][0].x=1;SQUARE[0][1].x=2;SQUARE[0][2].x=1;SQUARE[0][3].x=2;
SQUARE[1][0].y=0;SQUARE[1][1].y=0;SQUARE[1][2].y=1;SQUARE[1][3].y=1;
SQUARE[1][0].x=1;SQUARE[1][1].x=2;SQUARE[1][2].x=1;SQUARE[1][3].x=2;
SQUARE[2][0].y=0;SQUARE[2][1].y=0;SQUARE[2][2].y=1;SQUARE[2][3].y=1;
SQUARE[2][0].x=1;SQUARE[2][1].x=2;SQUARE[2][2].x=1;SQUARE[2][3].x=2;/* _ _ */
SQUARE[3][0].y=0;SQUARE[3][1].y=0;SQUARE[3][2].y=1;SQUARE[3][3].y=1;/*|_|_|*/
SQUARE[3][0].x=1;SQUARE[3][1].x=2;SQUARE[3][2].x=1;SQUARE[3][3].x=2;/*|_|_|*/
SQUARE[4][0].y=0;SQUARE[4][1].y=0;SQUARE[4][2].y=0;SQUARE[4][3].y=0;
SQUARE[4][0].x=1;SQUARE[4][1].x=0;SQUARE[4][2].x=2;SQUARE[4][3].x=3;
SQUARE[5][0].y=1;SQUARE[5][1].y=0;SQUARE[5][2].y=2;SQUARE[5][3].y=3;
SQUARE[5][0].x=1;SQUARE[5][1].x=1;SQUARE[5][2].x=1;SQUARE[5][3].x=1;
SQUARE[6][0].y=0;SQUARE[6][1].y=0;SQUARE[6][2].y=0;SQUARE[6][3].y=0;
SQUARE[6][0].x=1;SQUARE[6][1].x=0;SQUARE[6][2].x=2;SQUARE[6][3].x=3;
SQUARE[7][0].y=1;SQUARE[7][1].y=0;SQUARE[7][2].y=2;SQUARE[7][3].y=3;/* _ _ _ _*/
SQUARE[7][0].x=1;SQUARE[7][1].x=1;SQUARE[7][2].x=1;SQUARE[7][3].x=1;/*|_|_|_|_|*/
SQUARE[8][0].y=1;SQUARE[8][1].y=0;SQUARE[8][2].y=2;SQUARE[8][3].y=2;
SQUARE[8][0].x=1;SQUARE[8][1].x=1;SQUARE[8][2].x=1;SQUARE[8][3].x=2;
SQUARE[9][0].y=0;SQUARE[9][1].y=0;SQUARE[9][2].y=0;SQUARE[9][3].y=1;
SQUARE[9][0].x=1;SQUARE[9][1].x=0;SQUARE[9][2].x=2;SQUARE[9][3].x=0;
SQUARE[10][0].y=1;SQUARE[10][1].y=0;SQUARE[10][2].y=0;SQUARE[10][3].y=2;/* _ */
SQUARE[10][0].x=2;SQUARE[10][1].x=1;SQUARE[10][2].x=2;SQUARE[10][3].x=2;/*|_| */
SQUARE[11][0].y=1;SQUARE[11][1].y=0;SQUARE[11][2].y=1;SQUARE[11][3].y=1;/*|_|_ */
SQUARE[11][0].x=1;SQUARE[11][1].x=2;SQUARE[11][2].x=0;SQUARE[11][3].x=2;/*|_|_|*/
SQUARE[12][0].y=1;SQUARE[12][1].y=0;SQUARE[12][2].y=2;SQUARE[12][3].y=2;
SQUARE[12][0].x=2;SQUARE[12][1].x=2;SQUARE[12][2].x=1;SQUARE[12][3].x=2;
SQUARE[13][0].y=1;SQUARE[13][1].y=0;SQUARE[13][2].y=1;SQUARE[13][3].y=1;
SQUARE[13][0].x=1;SQUARE[13][1].x=0;SQUARE[13][2].x=0;SQUARE[13][3].x=2;
SQUARE[14][0].y=1;SQUARE[14][1].y=0;SQUARE[14][2].y=0;SQUARE[14][3].y=2;/* _ */
SQUARE[14][0].x=1;SQUARE[14][1].x=1;SQUARE[14][2].x=2;SQUARE[14][3].x=1;/* |_|*/
SQUARE[15][0].y=0;SQUARE[15][1].y=0;SQUARE[15][2].y=0;SQUARE[15][3].y=1;/* _|_|*/
SQUARE[15][0].x=1;SQUARE[15][1].x=0;SQUARE[15][2].x=2;SQUARE[15][3].x=2;/*|_|_|*/
SQUARE[16][0].y=1;SQUARE[16][1].y=0;SQUARE[16][2].y=1;SQUARE[16][3].y=1;
SQUARE[16][0].x=1;SQUARE[16][1].x=1;SQUARE[16][2].x=0;SQUARE[16][3].x=2;
SQUARE[17][0].y=1;SQUARE[17][1].y=0;SQUARE[17][2].y=1;SQUARE[17][3].y=2;
SQUARE[17][0].x=1;SQUARE[17][1].x=1;SQUARE[17][2].x=2;SQUARE[17][3].x=1;
SQUARE[18][0].y=0;SQUARE[18][1].y=0;SQUARE[18][2].y=0;SQUARE[18][3].y=1;
SQUARE[18][0].x=1;SQUARE[18][1].x=0;SQUARE[18][2].x=2;SQUARE[18][3].x=1;/* _ */
SQUARE[19][0].y=1;SQUARE[19][1].y=0;SQUARE[19][2].y=1;SQUARE[19][3].y=2;/* _|_|_ */
SQUARE[19][0].x=2;SQUARE[19][1].x=2;SQUARE[19][2].x=1;SQUARE[19][3].x=2;/*|_|_|_|*/
SQUARE[20][0].y=1;SQUARE[20][1].y=0;SQUARE[20][2].y=1;SQUARE[20][3].y=2;
SQUARE[20][0].x=1;SQUARE[20][1].x=1;SQUARE[20][2].x=2;SQUARE[20][3].x=2;
SQUARE[21][0].y=0;SQUARE[21][1].y=0;SQUARE[21][2].y=1;SQUARE[21][3].y=1;
SQUARE[21][0].x=1;SQUARE[21][1].x=2;SQUARE[21][2].x=0;SQUARE[21][3].x=1;
SQUARE[22][0].y=1;SQUARE[22][1].y=0;SQUARE[22][2].y=1;SQUARE[22][3].y=2;/* _ */
SQUARE[22][0].x=1;SQUARE[22][1].x=1;SQUARE[22][2].x=2;SQUARE[22][3].x=2;/*|_|_ */
SQUARE[23][0].y=0;SQUARE[23][1].y=0;SQUARE[23][2].y=1;SQUARE[23][3].y=1;/*|_|_|*/
SQUARE[23][0].x=1;SQUARE[23][1].x=2;SQUARE[23][2].x=0;SQUARE[23][3].x=1;/* |_|*/
SQUARE[24][0].y=1;SQUARE[24][1].y=0;SQUARE[24][2].y=1;SQUARE[24][3].y=2;
SQUARE[24][0].x=1;SQUARE[24][1].x=2;SQUARE[24][2].x=2;SQUARE[24][3].x=1;
SQUARE[25][0].y=0;SQUARE[25][1].y=0;SQUARE[25][2].y=1;SQUARE[25][3].y=1;
SQUARE[25][0].x=1;SQUARE[25][1].x=0;SQUARE[25][2].x=1;SQUARE[25][3].x=2;
SQUARE[26][0].y=1;SQUARE[26][1].y=0;SQUARE[26][2].y=1;SQUARE[26][3].y=2;/* _ */
SQUARE[26][0].x=1;SQUARE[26][1].x=2;SQUARE[26][2].x=2;SQUARE[26][3].x=1;/* _|_|*/
SQUARE[27][0].y=0;SQUARE[27][1].y=0;SQUARE[27][2].y=1;SQUARE[27][3].y=1;/*|_|_|*/
SQUARE[27][0].x=1;SQUARE[27][1].x=0;SQUARE[27][2].x=1;SQUARE[27][3].x=2;/*|_| */
return;
}
/****************init*********************/
void init()
{
int graphdriver,graphmode;
char time[11],data[11],info[24];
struct time tim;
struct date dat;
graphdriver=DETECT;
initgraph(&graphdriver,&graphmode," ");
setbkcolor(CYAN);
setfillstyle(SOLID_FILL,GREEN);
bar(75,70,75+MAXX*CELL,70+MAXY*CELL);
setcolor(YELLOW);
settextstyle(0,0,2);
/*write mesage*/
sprintf(info,"Press any key to Begin:");
outtextxy(75,50,info);
sprintf(info,"Next:");
outtextxy(330,70,info);
sprintf(info,"Left: A a %c(K)",27);
outtextxy(330,190,info);
sprintf(info,"Right: D d %c(M)",26);
outtextxy(330,210,info);
sprintf(info,"Flip: W w %c(H)",24);
outtextxy(330,230,info);
sprintf(info,"Fall: S s %c(P)",25);
outtextxy(330,250,info);
sprintf(info,"Down: Space");
outtextxy(330,270,info);
sprintf(info,"Exit: Q q Esc");
outtextxy(330,290,info);
sprintf(info,"Sorce:");
outtextxy(330,330,info);
settextstyle(0,0,1);
sprintf(info,"Yang Jianhong");
outtextxy(330,380,info);
sprintf(info,"QQ:18222469");
outtextxy(450,380,info);
sprintf(info,"Industrial and");
outtextxy(330,395,info);
sprintf(info,"Commercial Mangement");
outtextxy(450,395,info);
sprintf(info,"Xinzhou Teachers");
outtextxy(330,410,info);
sprintf(info,"University");
outtextxy(470,410,info);
/*write date*/
settextstyle(0,0,1);
gettime(&tim);
sprintf(time,"%02d:%02d:%02d",tim.ti_hour,tim.ti_min,tim.ti_sec);
outtextxy(75,440,time);
/*write time*/
getdate(&dat);
sprintf(data,"%02d-%02d-%02d",dat.da_year,dat.da_mon,dat.da_day);
outtextxy(240,440,data);
return;
}
/*************OpenPlay****************/
void OpenPlay()
{
int i=0,j;
while(i<MAXY)
{
for(j=0;j<MAXX;j++)
PaintSquare(75+j*CELL,70+i*CELL,75+(j+1)*CELL,70+(i+1)*CELL);
delay(10000);
i++;
}
setfillstyle(SOLID_FILL,GREEN);
while(i>0)
{
for(j=0;j<MAXX;j++)
{
chWork[i][j]=0;
bar(75+j*CELL,70+(i-1)*CELL,75+(j+1)*CELL,70+i*CELL);
}
delay(10000);
i--;
}
return;
}
/*************PlayGame********