From fccaa599989ba2db4d9760dbde15875e93222536 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 3 Jan 2019 16:07:35 +0800 Subject: [PATCH] first commit --- 俄罗斯方块.c | 436 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 373 insertions(+), 63 deletions(-) diff --git a/俄罗斯方块.c b/俄罗斯方块.c index cfee48e..a889d85 100644 --- a/俄罗斯方块.c +++ b/俄罗斯方块.c @@ -1,8 +1,8 @@ /****ͷļ****/ -#include //׼/(scanfprintf) -#include //DOS(ȡ̨λáɫ -#include //ܼ/(kbhitgetch) -#include //ڻ +#include +#include +#include +#include /****궨****/ #define FrameX 13 //ϷϽǵXΪ13 #define FrameY 3 //ϷϽǵYΪ3 @@ -27,11 +27,13 @@ HANDLE hOut; // /********/ int color(int c); //ɫ void gotoxy(int x,int y); //ȡĻλ +void welcome(); //ҳ void Game(); //Ϸ void play(); //ʼϷ void explation(); //˵ void rule(); //Ϸ -void MakeTetris(struct Tetris *tetris); // +void MakeTetris(struct Tetris *); // +void PrintTetris(struct Tetris *); //ӡ /** *ɫ */ @@ -52,10 +54,18 @@ void gotoxy(int x,int y) SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); } +/** + * + */ +int main() +{ + welcome(); +} + /** *ҳ */ -void main() +void welcome() { /*ͼ*/ color(11); @@ -159,7 +169,7 @@ void main() case 1: system("cls"); Game(); - //play(); + play(); break; case 2: explation(); @@ -244,10 +254,6 @@ void rule() system("cls"); main(); } - -/** - *Ϸ - */ void Game() { gotoxy(FrameX+Frame_width-7,FrameY-2); @@ -305,83 +311,387 @@ void Game() } /** - * - */ -void MakeTetris(struct Tetris *tetris) + * + */ +void MakeTetris(struct Tetris *tetris) { - - a[tetris->x][tetris->y]=b[0]; - switch(tetris->flag) + a[tetris->x][tetris->y]=b[0]; //ķλõͼ״̬ + switch(tetris->flag) //7࣬19 { - case 1: // + case 1: // { color(10); - 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; + 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: //һ + { + color(12); + 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 2: //һ + case 3: //1 { - color(4); - 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; + color(13); + a[tetris->x][tetris->y-1]=b[1]; + a[tetris->x][tetris->y+1]=b[2]; + a[tetris->x][tetris->y+2]=b[3]; + break; + } + + case 4: //T + { + color(9); + 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 3: //1 + case 5: //˳90 T + { + color(10); + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x][tetris->y-1]=b[2]; + a[tetris->x][tetris->y+1]=b[3]; + break; + } + + case 6: //˳180 T + { + color(11); + 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: // ˳270 T + { + color(12); + 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: // Z + { + color(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 9: //˳90 Z + { + color(5); + a[tetris->x+2][tetris->y]=b[1]; + a[tetris->x+2][tetris->y-1]=b[2]; + a[tetris->x][tetris->y+1]=b[3]; + break; + } + + case 10: // Z + { + color(9); + 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: //˳90 Z { color(13); - a[tetris->x][tetris->y-1]=b[1]; - a[tetris->x][tetris->y+1]=b[2]; - a[tetris->x][tetris->y+2]=b[3]; - break; + a[tetris->x+2][tetris->y]=b[1]; + a[tetris->x+2][tetris->y+1]=b[2]; + a[tetris->x][tetris->y-1]=b[3]; + break; + } + + case 12: // 7 + { + color(1); + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x][tetris->y+1]=b[2]; + a[tetris->x][tetris->y+2]=b[3]; + break; } - case 4: //T + case 13: // ˳90 7 { - color(8); - 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; + color(2); + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x-4][tetris->y]=b[2]; + a[tetris->x][tetris->y-1]=b[3]; + break; } - case 5: //˳90 T + + case 14: // ˳180 7 { - color(8); - a[tetris->x-2][tetris->y]=b[1]; - a[tetris->x][tetris->y-1]=b[2]; - a[tetris->x][tetris->y+1]=b[3]; - break; + color(3); + a[tetris->x][tetris->y-2]=b[1]; + a[tetris->x][tetris->y-1]=b[2]; + a[tetris->x+2][tetris->y]=b[3]; + break; } - case 6: //˳180T + case 15: // ˳270 7 { - color(11); - 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; + color(4); + a[tetris->x+2][tetris->y]=b[1]; + a[tetris->x+4][tetris->y]=b[2]; + a[tetris->x][tetris->y+1]=b[3]; + break; } - case 7: //˳270 T + case 16: // 7 { color(9); - 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; + a[tetris->x+2][tetris->y]=b[1]; + a[tetris->x][tetris->y+1]=b[2]; + a[tetris->x][tetris->y+2]=b[3]; + break; } - - case 8: //Z + + case 17: // ˳90 7 { - color(14); - a[tetris->x-2][tetris->y]=b[1]; - a[tetris->x+2][tetris->y+1]=b[2]; - a[tetris->x][tetris->y+1]=b[3]; - break; + color(10); + a[tetris->x-2][tetris->y]=b[1]; + a[tetris->x-4][tetris->y]=b[2]; + a[tetris->x][tetris->y+1]=b[3]; + break; } + + case 18: // ˳180 7 + { + color(11); + a[tetris->x][tetris->y-2]=b[1]; + a[tetris->x][tetris->y-1]=b[2]; + a[tetris->x-2][tetris->y]=b[3]; + break; + } + + case 19: // ˳270 7 + { + color(12); + a[tetris->x+2][tetris->y]=b[1]; + a[tetris->x+4][tetris->y]=b[2]; + a[tetris->x][tetris->y-1]=b[3]; + break; + } } } + +/** + *ӡ + */ + void PrintTetris(struct Tetris *tetris) + { + for(i=0;i<4;i++) //b[4]еÿΪ1 + { + 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); + color(4); + printf("ȼ: "); + color(12); + printf("%d",tetris->level); + gotoxy(FrameX+2*Frame_width+3,FrameY+3); + color(4); + printf("÷:"); + color(12); + printf("%d",tetris->score); + gotoxy(FrameX+2*Frame_width+3,FrameY+5); + color(4); + printf("ٶ:"); + color(12); + printf("%d ms",tetris->speed); + + } + +/** + * ʼϷ + */ +void play() +{ + int n; + struct Tetris t,*tetris=&t; //ṹָ벢ָṹ + char ch; //ռı + tetris->number=0; //ʼ˹Ϊ0 + tetris->speed=300; //ʼƶٶΪ300ms + tetris->score=0; //ʼϷķΪ0 + tetris->level=1; //ʼϷΪ1 + while(1) //ѭ飬ֱϷ + { + Flag(tetris); //õ˹͵ + Temp=tetris->flag; //סǰ˹ + tetris->x=FrameX+2*Frame_width+6; //Ԥ淽x + tetris->y=FrameY+10; //Ԥ淽y + tetris->flag = tetris->next; //һ˹ + PrintTetris(tetris); //ôӡ˹鷽 + tetris->x=FrameX+Frame_width; //Ϸķx + tetris->y=FrameY-1; //Ϸķy + tetris->flag=Temp; + // + while(1) //Ʒ鷽ֱ鲻 + { + label:PrintTetris(tetris); //ӡ˹ + Sleep(tetris->speed); //ӻʱ + CleanTetris(tetris); //ۼ + Temp1=tetris->x; //סķֵ + Temp2=tetris->flag; //סǰ˹ + if(kbhit()) //жǷм룬ch + { + ch=getch(); + if(ch==75) // 󶯣ĺ2 + { + tetris->x-=2; + } + if(ch==77) // Ҷĺ2 + { + 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) // ,ǰ˳ʱת90 + { + if( tetris->flag>=2 && tetris->flag<=3 ) //ֱ߷ + { + tetris->flag++; + tetris->flag%=2; + tetris->flag+=2; + } + if( tetris->flag>=4 && tetris->flag<=7 ) //Tַ + { + tetris->flag++; + tetris->flag%=4; + tetris->flag+=4; + } + if( tetris->flag>=8 && tetris->flag<=11 ) //Zַ + { + tetris->flag++; + tetris->flag%=4; + tetris->flag+=8; + } + if( tetris->flag>=12 && tetris->flag<=15 ) //7ַ + { + tetris->flag++; + tetris->flag%=4; + tetris->flag+=12; + } + if( tetris->flag>=16 && tetris->flag<=19 ) //Ƿ7ַ + { + 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)); //ʼa + 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(29,7); + printf("\n"); + color(6); + printf(" @=================================|||||======================================@ \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|* *| \n"); + color(4); + printf("|* *| \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|| || \n"); + printf("|| || \n"); + printf(" @============================================================================@ \n"); + if(MessageBox(NULL,"Ϸ.\nҪһô?","Game Over",MB_YESNO|MB_ICONQUESTION)==IDYES) + Replay(tetris); + else + exit(0); + } + } + tetris->flag = tetris->next; //һ˹ͼ(ұߴ) + tetris->x=FrameX+2*Frame_width+6; + tetris->y=FrameY+10; + CleanTetris(tetris); + } +}