commit a4e500a36981112ee5079799f53885c8cf2ac9ae Author: 吴孔炎 <18408000117@stu.hut.edu.cn> Date: Sun Jan 6 13:24:17 2019 +0800 first commit diff --git a/main.c b/main.c new file mode 100644 index 0000000..4b5daa1 --- /dev/null +++ b/main.c @@ -0,0 +1,771 @@ +#include +#include +#include +#include + +#define FrameX 13 +#define FrameY 3 +#define Frame_height 20 +#define Frame_width 18 +int i,j,Temp,Temp1,Temp2; +int a[80][80]={0}; +int b[4]; +struct Tetris +{ + int x;// + int y;// + int flag;// + int next;//һ + int speed;//ٶ + int number;// + int score; + int level; +}; +HANDLE hOut; +void gotoxy(int x,int y);//ƶָλ +void DrawGameframe();//Ϸ߿ +void Flag(struct Tetris *tetris);//͵ +void MakeTetris(struct Tetris *tetris);//˹ +void PrintTetris(struct Tetris *tetris);//ӡ˹ +void CleanTetris(struct Tetris *tetris);//˹ĺۼ +int ifMove(struct Tetris *tetris);//жǷƶֵΪ1ƶ򣬲ƶ +void Del_Fullline(struct Tetris *tetris);//жǷвɾеĶ˹ +void Gameplay();//ʼϷ +void regulation();//Ϸ +void explation();//˵ +void welcome();//ӭ +void Replay(struct Tetris *tetris);//¿ʼϷ +void title();//ӭϷı +void close();//رϷ +/***ʾλ***/ +void gotoxy(int x,int y) +{ + COORD pos; + pos.X=x; + pos.Y=y; + SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); +} +/***ӭϵı***/ +void title() +{ + gotoxy(24,3); + printf(" ˹ "); + gotoxy(18,5); + printf(""); + gotoxy(18,6); + printf(""); + gotoxy(18,7); + printf(""); + gotoxy(26,6); + printf(""); + gotoxy(28,7); + printf(""); + gotoxy(36,6); + printf(""); + gotoxy(36,7); + printf(""); + gotoxy(45,5); + printf(""); + gotoxy(45,6); + printf(""); + gotoxy(45,7); + printf(""); +} +/***˵ѡ***/ +void welcome() +{ + int i,j=1,n; + for(i=9;i<=20;i++) + { + for(j=15;j<=60;j++) + { + gotoxy(j,i); + if(i==9||i==20) + { + printf("="); + } + else if(j==15||j==59) + printf("||"); + } + } + gotoxy(25,12); + printf("1.ʼϷ"); + gotoxy(40,12); + printf("2.˵"); + gotoxy(25,17); + printf("3.Ϸ"); + gotoxy(40,17); + printf("4.˳Ϸ"); + gotoxy(21,22); + printf("ѡ[1 2 3 4]:[ ]\b\b"); + scanf("%d",&n); + switch(n) + { + case 1: + system("cls");// + DrawGameframe(); + Gameplay(); + break; + case 2: + explation(); + break; + case 3: + regulation(); + break; + case 4: + close(); + break; + } +} +/***Ϸ***/ +void DrawGameframe() +{ + gotoxy(FrameX+Frame_width-7,FrameY-2); + printf("˹"); + gotoxy(FrameX,FrameY); + printf("X"); + gotoxy(FrameX+2*Frame_width-2,FrameY); + printf("["); + gotoxy(FrameX,FrameY+Frame_height); + printf("^") ; + gotoxy(FrameX+2*Frame_width-2,FrameY+Frame_height); + printf("a"); + for(i=2;i<2*Frame_width-2;i+=2) + { + gotoxy(FrameX+i,FrameY); + printf("T"); +} +for(i=2;i<2*Frame_width-2;i+=2) + { + gotoxy(FrameX+i,FrameY+Frame_height); + printf("T"); + a[FrameX+i][FrameY+Frame_height] =2; + } + for(i=1;ix][tetris->y]=b[0]; + switch(tetris->flag) + { + case 1: + { + a[tetris->x][tetris->y-1]=b[1]; + a[tetris->x+2][tetris->y-1]=b[2]; + a[tetris->x+2][tetris->y]=b[3]; + break; + } + case 2: + { + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x+2][tetris->y]=b[2]; + a[tetris->x+4][tetris->y]=b[3]; + break; + } + case 3: + { + a[tetris->x][tetris->y-1]=b[1]; + a[tetris->x][tetris->y-2]=b[2]; + a[tetris->x][tetris->y+1]=b[3]; + break; + } + case 4: + { + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x+2][tetris->y]=b[2]; + a[tetris->x][tetris->y+1]=b[3]; + break; + } + case 5: + { + a[tetris->x][tetris->y-1]=b[1]; + a[tetris->x][tetris->y+1]=b[2]; + a[tetris->x-2][tetris->y]=b[3]; + break; + } + case 6: + { + a[tetris->x][tetris->y-1]=b[1]; + a[tetris->x-2][tetris->y]=b[2]; + a[tetris->x+2][tetris->y]=b[3]; + break; + } + case 7: + { + a[tetris->x][tetris->y+1]=b[1]; + a[tetris->x][tetris->y-1]=b[2]; + a[tetris->x+2][tetris->y]=b[3]; + break; + } + case 8: + { + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x][tetris->y+1]=b[2]; + a[tetris->x+2][tetris->y+1]=b[3]; + break; + } + case 9: + { + a[tetris->x][tetris->y-1]=b[1]; + a[tetris->x-2][tetris->y]=b[2]; + a[tetris->x-2][tetris->y+1]=b[3]; + break; + } + case 10: + { + a[tetris->x+2][tetris->y]=b[1]; + a[tetris->x][tetris->y-1]=b[2]; + a[tetris->x-2][tetris->y-1]=b[3]; + break; + } + case 11: + { + a[tetris->x][tetris->y+1]=b[1]; + a[tetris->x-2][tetris->y]=b[2]; + a[tetris->x-2][tetris->y-1]=b[3]; + break; + } + case 12: + { + a[tetris->x][tetris->y+1]=b[1]; + a[tetris->x][tetris->y-1]=b[2]; + a[tetris->x-2][tetris->y-1]=b[3]; + break; + } + case 13: + { + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x+2][tetris->y-1]=b[2]; + a[tetris->x+2][tetris->y]=b[3]; + break; + } + case 14: + { + a[tetris->x][tetris->y-1]=b[1]; + a[tetris->x][tetris->y+1]=b[2]; + a[tetris->x+2][tetris->y+1]=b[3]; + break; + } + case 15: + { + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x-2][tetris->y+1]=b[2]; + a[tetris->x+2][tetris->y]=b[3]; + break; + } + case 16: + { + a[tetris->x][tetris->y+1]=b[1]; + a[tetris->x][tetris->y-1]=b[2]; + a[tetris->x+2][tetris->y-1]=b[3]; + break; + } + case 17: + { + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x+2][tetris->y+1]=b[2]; + a[tetris->x+2][tetris->y]=b[3]; + break; + } + case 18: + { + a[tetris->x][tetris->y-1]=b[1]; + a[tetris->x][tetris->y+1]=b[2]; + a[tetris->x-2][tetris->y+1]=b[3]; + break; + } + case 19: + { + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x-2][tetris->y-1]=b[2]; + a[tetris->x+2][tetris->y]=b[3]; + break; + } + } +} +/***ӡ˹***/ +void PrintTetris(struct Tetris *tetris) +{ + for(i=0;i<4;i++) + { + b[i]=1; + } + MakeTetris(tetris); + for(i=tetris->x-2;i<=tetris->x+4;i+=2) + { + for(j=tetris->y-2;j<=tetris->y+1;j++) + { + if(a[i][j]==1&&j>FrameY) + { + gotoxy(i,j); + printf(""); + } + + } + } + /***ӡ˵Ϣ***/ + gotoxy(FrameX+2*Frame_width+3,FrameY+1); + printf("level: "); + printf("%d",tetris->level); + gotoxy(FrameX+2*Frame_width+3,FrameY+3); + printf("score: "); + printf("%d",tetris->score); + gotoxy(FrameX+2*Frame_width+3,FrameY+5); + printf("speed: "); + printf("%dms",tetris->speed); +} +/***жǷƶ***/ +int ifMove(struct Tetris *tetris) +{ + if(a[tetris->x][tetris->y]!=0) + { + return 0; + } + else + { + if + (tetris->flag==1&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x+2][tetris->y-1]==0&&a[tetris->x+2][tetris->y]==0)|| + + (tetris->flag==2&&(a[tetris->x-2][tetris->y]==0&& + a[tetris->x+2][tetris->y]==0&&a[tetris->x+4][tetris->y]==0))|| + + (tetris->flag==3&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x][tetris->y-2]==0&&a[tetris->x][tetris->y+1]==0))|| + + (tetris->flag==4&&(a[tetris->x-2][tetris->y]==0&& + a[tetris->x+2][tetris->y]==0&&a[tetris->x][tetris->y+1]==0))|| + + (tetris->flag==5&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x][tetris->y+1]==0&&a[tetris->x-2][tetris->y]==0))|| + + (tetris->flag==6&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x-2][tetris->y]==0&&a[tetris->x+2][tetris->y]==0))|| + + (tetris->flag==7&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x][tetris->y+1]==0&&a[tetris->x+2][tetris->y]==0))|| + + (tetris->flag==8&&(a[tetris->x][tetris->y+1]==0&& + a[tetris->x-2][tetris->y]==0&&a[tetris->x+2][tetris->y+1]==0))|| + + (tetris->flag==9&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x-2][tetris->y]==0&&a[tetris->x-2][tetris->y+1]==0))|| + + (tetris->flag==10&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x-2][tetris->y-1]==0&&a[tetris->x+2][tetris->y]==0))|| + + (tetris->flag==11&&(a[tetris->x][tetris->y+1]==0&& + a[tetris->x-2][tetris->y-1]==0&&a[tetris->x-2][tetris->y]==0))|| + + (tetris->flag==12&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x][tetris->y+1]==0&&a[tetris->x-2][tetris->y-1]==0))|| + + (tetris->flag==15&&(a[tetris->x-2][tetris->y]==0&& + a[tetris->x-2][tetris->y+1]==0&&a[tetris->x+2][tetris->y]==0))|| + + (tetris->flag==14&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x][tetris->y+1]==0&&a[tetris->x+2][tetris->y+1]==0))|| + + (tetris->flag==13&&(a[tetris->x-2][tetris->y]==0&& + a[tetris->x+2][tetris->y-1]==0&&a[tetris->x+2][tetris->y]==0))|| + + (tetris->flag==16&&(a[tetris->x][tetris->y+1]==0&& + a[tetris->x][tetris->y-1]==0&&a[tetris->x+2][tetris->y-1]==0))|| + + (tetris->flag==17&&(a[tetris->x-2][tetris->y]==0&& + a[tetris->x+2][tetris->y+1]==0&&a[tetris->x+2][tetris->y]==0))|| + + (tetris->flag==18&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x][tetris->y+1]==0&&a[tetris->x-2][tetris->y+1]==0))|| + + (tetris->flag==19&&(a[tetris->x-2][tetris->y]==0&& + a[tetris->x-2][tetris->y-1]==0&&a[tetris->x+2][tetris->y]==0)) + ) + { + return 1; + } +} +return 0; +} +/***˹ۼ***/ +void CleanTetris(struct Tetris *tetris) +{ + for(i=0;i<4;i++) + { + b[i]=0; + } + MakeTetris(tetris); + for(i=tetris->x-2;i<=tetris->x+4;i+=2) + { + for(j=tetris->y-2;j<=tetris->y+1;j++) + { + if(a[i][j]==0&&j>FrameY) + { + gotoxy(i,j); + printf(" "); + } + } + } +} +/***жǷвɾеķ***/ +void Del_Fullline(struct Tetris *tetris) +{ + int k,del_rows=0; + for(j=FrameY+Frame_height-1;j>=FrameY+1;j--) + { + k=0; + for(i=FrameX+2;iFrameY;k--) + { + for(i=FrameX+2;iscore+=100*del_rows; + if(del_rows>0&&(tetris->score%1000==0||tetris->score/1000>tetris->level-1)) + { + tetris->speed-=20; + tetris->level++; + } +} + +/**/ +void Flag(struct Tetris *tetris) +{ + tetris->number++; + srand(time(NULL)); + if(tetris->number==1) + { + tetris->flag=rand()%19+1; + } + tetris->next=rand()%19+1; +} + +/**ʼϷ**/ +void Gameplay() +{ + int n; + struct Tetris t,*tetris=&t; + char ch; + tetris->number=0; + tetris->speed=280; + tetris->level=1; + tetris->score=0; + while(1) + { + Flag(tetris); + Temp=tetris->flag; + tetris->x=FrameX+2*Frame_width+6; + tetris->y=FrameY+10; + tetris->flag=tetris->next; + PrintTetris(tetris); + tetris->x=FrameX+Frame_width; + tetris->y=FrameY-1; + tetris->flag=Temp; + + // + while(1) + { + label:PrintTetris(tetris); + Sleep(tetris->speed); + CleanTetris(tetris); + Temp1=tetris->x; + Temp2=tetris->flag; + if(kbhit()) + { + ch=getch(); + if(ch==75) + { + tetris->x-=2; + } + if(ch==77) + { + tetris->x+=2; + } + if(ch==80) + { + if(ifMove(tetris)!=0) + { + tetris->y+=2; + } + if(ifMove(tetris)==0) + { + tetris->y=FrameY+Frame_height-2; + } + } + if(ch==72) + { + if(tetris->flag>=2&&tetris->flag<=3) + { + tetris->flag++; + tetris->flag%=2; + tetris->flag+=2; + } + if(tetris->flag>=4&&tetris->flag<=7) + { + tetris->flag++; + tetris->flag%=4; + tetris->flag+=4; + } + if(tetris->flag>=8&&tetris->flag<=11) + { + tetris->flag++; + tetris->flag%=4; + tetris->flag+=8; + } + if(tetris->flag>=12&&tetris->flag<=15) + { + tetris->flag++; + tetris->flag%=4; + tetris->flag+=12; + } + if(tetris->flag>=16&&tetris->flag<=19) + { + tetris->flag++; + tetris->flag%=4; + tetris->flag+=16; + } + } + if(ch==32) + { + PrintTetris(tetris); + while(1) + { + if(kbhit()) + { + ch=getch(); + if(ch==32) + { + goto label; + } + } + } + } + if(ch==27) + { + system("cls"); + memset(a,0,6400*sizeof(int)); + welcome(); + } + if(ifMove(tetris)==0) + { + tetris->x=Temp1; + tetris->flag=Temp2; + } + else + {goto label; + } + } + tetris->y++; + if(ifMove(tetris)==0) + { + tetris->y--; + PrintTetris(tetris); + Del_Fullline(tetris); + break; + } + } + for(i=tetris->y-2;iy+2;i++) + { + if(i==FrameY) + { + system("cls"); + gotoxy(38,12); + printf("Ϸ\n"); + + gotoxy(17,18); + printf("Ҫһ--------1"); + gotoxy(44,18); + printf("ˣ˳-------2\n"); + int n; + gotoxy(32,20); + printf("ѡ1/2"); + scanf("%d",&n); + switch(n) + { + case 1: + system("cls"); + Replay(tetris); + break; + case 2: + exit(0); + break; + } + } + } + tetris->flag=tetris->next; + tetris->x=FrameX+2*Frame_width+6; + tetris->y=FrameY+10; + CleanTetris(tetris); + } +} + +/** +* ¿ʼϷ +*/ + void Replay(struct Tetris *tetris) + { + system("cls"); + memset(a,0,6400*sizeof(int)); + DrawGameframe(); + Gameplay(); + } + /** + *˵ + */ +void explation() +{ + int i,j=1; + system("cls"); + gotoxy(32,3); + printf("˵"); + for(i=6;i<=16;i++) + { + for(j=15;j<=60;j++) + { + gotoxy(j,i); + if(i==6||i==16) + { + printf("="); + } + else if(j==15||j==59) + { + printf("||"); + + } + } + } + gotoxy(18,7); + printf("tip1:ҿͨƶ"); + gotoxy(18,9); + printf("tip2:ͨʹת"); + gotoxy(18,11); + printf("tip3:ͨٷ"); + gotoxy(18,13); + printf("tip4:ոͣϷٰո"); + gotoxy(18,15); + printf("tip5:ESC˳Ϸ"); + getch(); + system("cls"); + main(); +} + +/** +*Ϸ +*/ +void regulation() +{ + int i,j=1; + system("cls"); + gotoxy(34,3); + printf("Ϸ"); + for (i=6;i<=18;i++) + { + for(j=12;j<=70;j++) + { + gotoxy(j,i); + if(i==6||i==18) + { + printf("="); + } + else if(j==12||j==69) + { + printf("||"); + } + } +} + gotoxy(16,7); + printf("tip1:ͬ״СĻϷ£ͨ"); + gotoxy(22,9); + printf("λúͷʹĻײƴ"); + gotoxy(22,11); + printf("һ"); + gotoxy(16,13); + printf("tip2ÿһУ100"); + gotoxy(16,15); + printf("tip3:ÿۼ1000֣һȼ"); + gotoxy(16,17); + printf("tip4ȼʹٶȼӿ죬ϷѶȼӴ"); + getch(); + system("cls"); + main(); + + } + /** + *˳Ϸ + */ + void close() + { + exit(0); + } +/**/ + + +int main() +{ + title(); + welcome(); +} + + + + + + + + + + + + diff --git a/main.exe b/main.exe new file mode 100644 index 0000000..eac194a Binary files /dev/null and b/main.exe differ