From 22d30d5073b282d08cfbddbc8415436e905862b0 Mon Sep 17 00:00:00 2001 From: "296289990@qq.com" <296289990@qq.com> Date: Mon, 7 Jan 2019 14:20:45 +0800 Subject: [PATCH] first commit --- 俄罗斯方块.c | 495 ++++++++++++++++++++++++++++++++++++++++++++++ 俄罗斯方块.o | Bin 0 -> 18562 bytes 2 files changed, 495 insertions(+) create mode 100644 俄罗斯方块.c create mode 100644 俄罗斯方块.o diff --git a/俄罗斯方块.c b/俄罗斯方块.c new file mode 100644 index 0000000..a0675c1 --- /dev/null +++ b/俄罗斯方块.c @@ -0,0 +1,495 @@ +/********ͷļ*********/ +#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};//a2,1,0ֱ߿򣬷ͼ +int b[4];//ÿַ鶼ĸɣbĸλԹͼ +struct Tetris +{ + int x; //ķx + int y; //ķy + int flag;//Ƿ͵ + int next;//һ͵ + int speed;//˹ٶ + int number;//˹ĸ + int score;//Ϸ + int level;//Ϸȼ +}; +HANDLE hOut;//̨ + + +/*************/ +int color(int c); +static void gotoxy(int x, int y);//ƶλ +void DrawGameframe(); //Ϸ߿ +void Flag(struct Tetris * );//˹ +void MakeTetris(struct Tetris *);//˹ +void PrintTetris(struct Tetris *);//ӡ˹ +void CleanTetris(struct Tetris *);//˹ĺۼ +int ifMove(struct Tetris *);//жܷƶ +void Del_Fullline(struct Tetris *);//жǷ +void GamePlay();//ʼϷ +void regulation();//Ϸ +void explation();//˵ +void welcome();//ӭ +void Replay(struct Tetris *);//¿ʼϷ +void title();//ӭϷ +void close();//رϷ + + +/*****ɫ******/ +int color(int c){ + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);//ɫ + return 0; +} + + +/*****ȡĻλ*******/ +static void gotoxy(int x, int y){ +COORD point = { x, y };//Ҫõλx,y +HANDLE HOutput = GetStdHandle(STD_OUTPUT_HANDLE);//ʹGetStdHandle(STD_OUTPUT_HANDLE)ȡ׼ľ +SetConsoleCursorPosition(HOutput, point);//ùλ +} + + + +/*****ӭ********/ +void title(){ + color(15); + gotoxy(30,3); + printf("Ȥζ˹\n"); + // + color(11); + gotoxy(18,5); + printf(""); + gotoxy(18,6); + printf(""); + gotoxy(18,7); + printf(""); + //Tַ + color(14); + gotoxy(26,6); + printf(""); + gotoxy(28,7); + printf(""); + //Zַ + color(10); + gotoxy(36,6); + printf(""); + gotoxy(36,7); + printf(""); + //ַ + color(13); + gotoxy(45,5); + printf(""); + gotoxy(45,6); + printf(""); + gotoxy(45,7); + printf(""); + gotoxy(45,8); + printf(""); + //ֱ߷ + color(12); + gotoxy(56,6); + printf(""); + gotoxy(52,7); + printf("\n"); + //7ַ +} + + +/*******˵ѡ߿*******/ +void welcome() +{ + int n; + int i,j=1; + color(14); + 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("::"); + } + } +/*******˵ѡ********/ + color(12); + 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(); + break; + case 2: + break; + case 3: + break; + case 4: + break; + } +} + + +/*******Ϸ*******/ +void DrawGameframe() +{ + /***********Ϸ***********/ + gotoxy(FrameX+Frame_width-7,FrameY-2); + color(11); + printf("Ȥζ˹"); + /**********һַ********/ + gotoxy(FrameX+2*Frame_width+3,FrameY+7); + color(2); + printf("**********"); + gotoxy(FrameX+2*Frame_width+13,FrameY+7); + color(3); + printf("һַ"); + gotoxy(FrameX+2*Frame_width+3,FrameY+13); + color(2); + printf("**********"); + /**********˵***********/ + gotoxy(FrameX+2*Frame_width+3,FrameY+17); + color(14); + printf(":ת"); + gotoxy(FrameX+2*Frame_width+3,FrameY+19); + printf("ոͣϷ"); + gotoxy(FrameX+2*Frame_width+3,FrameY+15); + printf("Esc:˳Ϸ"); + /*********Ϸ߿***********/ + gotoxy(FrameX,FrameY); + color(12); + 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"); + a[FrameX][FrameY+Frame_height]=2; + a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;//ֹ + for(i=2;i<2*Frame_width-2;i+=2){ + gotoxy(FrameX+i,FrameY); + printf("T"); + } + for(i=2;ix][tetris->y]=b[0];//ķͼ״̬ + switch(tetris->flag){ + 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; + case 2: //ֱ߷ + color(13); + 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: //ֱ߷ + color(13); + 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: //Tַ + 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; + case 5: //˳ʱ90Tַ + color(11); + a[tetris->x][tetris->y-1]=b[1]; + a[tetris->x-2][tetris->y]=b[2]; + a[tetris->x][tetris->y+1]=b[3]; + break; + case 6: //˳ʱ180Tַ + 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: //˳ʱ270Tַ + color(11); + 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(14); + a[tetris->x+2][tetris->y+1]=b[1]; + a[tetris->x][tetris->y+1]=b[2]; + a[tetris->x-2][tetris->y]=b[3]; + break; + case 9: //˳ʱZַ + color(14); + 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: //Zַ + color(14); + 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 11: //˳ʱ뷴Zַ + color(14); + 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 12: //7ַ + color(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: //˳ʱ907ַ + color(12); + 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: //˳ʱ1807ַ + color(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 15: //˳ʱ2707ַ + 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 16: //7ַ + color(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 17: //˳ʱ90㷴7ַ + color(12); + 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: //˳ʱ180㷴7ַ + color(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 19: //˳ʱ270㷴7ַ + color(12); + 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 PrintfTetris(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-1;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("level:"); + color(12); + printf("%d",tetris->level); + gotoxy(FrameX+2*Frame_width+3,FrameY+3); + color(4); + printf("score:"); + color(12); + printf("%d",tetris->score); + gotoxy(FrameX+2*Frame_width+3,FrameY+3); + color(4); + printf("speed"); + color(12); + printf("%dms",tetris->speed); +} + + +/******жϷܷƶ******/ +int ifMove(struct Tetris *tetris) +{ + if(a[tetris->flag][tetris->y]!=0){ + return 0; + } + else{ + if( + (tetris->flag==1&&(a[tetris->x][tetris->y-1]==0&& + a[tetris->x][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==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==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==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==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(tetris->y-2;i<=tetris->y+1;j++){ + if(a[i][j]==0&&j>FrameY){ + gotoxy(i,j); + printf(" "); + } + } + } +} + + +/*******жǷ********/ +void Del_Fulline(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; +} + + +/**************/ +int main(){ + title(); + welcome(); + return 0; +} + diff --git a/俄罗斯方块.o b/俄罗斯方块.o new file mode 100644 index 0000000000000000000000000000000000000000..077897df87e50662dc0b73c4a61e3a2877266ae6 GIT binary patch literal 18562 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