From 23f1346967267ea4a0368ee46a28a120f486c66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B7=8D?= <2258804840@qq.com> Date: Wed, 9 Jan 2019 09:20:47 +0800 Subject: [PATCH] 3rd commit --- elsfk.c | 34 +++++ test2.c | 463 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 497 insertions(+) create mode 100644 elsfk.c create mode 100644 test2.c diff --git a/elsfk.c b/elsfk.c new file mode 100644 index 0000000..7056119 --- /dev/null +++ b/elsfk.c @@ -0,0 +1,34 @@ +#include +#include +#include +#include +#include "test1.c" +#include "test2.c" + +#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; +int main() +{ + title(); + welcome(); +} + + + diff --git a/test2.c b/test2.c new file mode 100644 index 0000000..77e512a --- /dev/null +++ b/test2.c @@ -0,0 +1,463 @@ +/*控制颜色*/ +int color(int c) +{ + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c); + return 0; + } + +/***控制文字显示位置***/ +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("╔"); + gotoxy(FrameX+2*Frame_width-2,FrameY); + printf("╗"); + gotoxy(FrameX,FrameY+Frame_height); + printf("╚") ; + gotoxy(FrameX+2*Frame_width-2,FrameY+Frame_height); + printf("╝"); + for(i=2;i<2*Frame_width-2;i+=2) + { + gotoxy(FrameX+i,FrameY); + printf("═"); +} +for(i=2;i<2*Frame_width-2;i+=2) + { + gotoxy(FrameX+i,FrameY+Frame_height); + printf("═"); + 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) + { + color(9); + 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; +} +