first commit

master
unknown 6 years ago
parent 00896e5a1d
commit 381ae0b7bb

@ -1,9 +1,8 @@
/****头文件****/
#include <stdio.h> #include <stdio.h>
#include <windows.h> #include <windows.h>
#include <conio.h> #include <conio.h>
#include <time.h> #include <time.h>
/****宏定义****/
#define FrameX 13 //游戏窗口左上角的X轴坐标为13 #define FrameX 13 //游戏窗口左上角的X轴坐标为13
#define FrameY 3 //游戏窗口左上角的Y轴坐标为3 #define FrameY 3 //游戏窗口左上角的Y轴坐标为3
#define Frame_height 20 //游戏窗口的高度为20 #define Frame_height 20 //游戏窗口的高度为20
@ -25,18 +24,18 @@ struct Tetris
} ; } ;
HANDLE hOut; //控制台句柄 HANDLE hOut; //控制台句柄
/****函数声明****/ /****函数声明****/
void HideCursor(); void HideCursor(); //隐藏光标
int color(int c); //控制文字颜色函数 int color(int c); //控制文字颜色函数
void gotoxy(int x,int y); //获取屏幕光标位置 void gotoxy(int x,int y); //获取屏幕光标位置
void Game(); //游戏界面 void Game(); //游戏界面
void play(); //开始游戏 void Play(); //开始游戏
void explation(); //操作说明 void explation(); //操作说明
void rule(); //游戏规则 void rule(); //游戏规则
void Make(struct Tetris *); //制作方块 void Make(struct Tetris *); //制作方块
void Print(struct Tetris *); //打印方块 void Print(struct Tetris *); //打印方块
void Clean(struct Tetris *); //清除痕迹 void Clean(struct Tetris *); //清除痕迹
int ifMove(struct Tetris *); //判断是否能移动1动0不动 int If_move(struct Tetris *); //判断是否能移动1动0不动
void Flag(struct Tetris *); //随机产生方块 void Shui_Ji(struct Tetris *); //随机产生方块
void Full(struct Tetris *); // 判断方块是否满行 void Full(struct Tetris *); // 判断方块是否满行
/*隐藏控制台的光标*/ /*隐藏控制台的光标*/
@ -61,8 +60,6 @@ void gotoxy(int x,int y)
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
} }
/*首页 */ /*首页 */
int main() int main()
{ {
@ -169,7 +166,7 @@ int main()
case 1: case 1:
system("cls"); system("cls");
Game(); Game();
play(); Play();
break; break;
case 2: case 2:
explation(); explation();
@ -253,6 +250,7 @@ void rule()
system("cls"); system("cls");
main(); main();
} }
/*游戏界面 */ /*游戏界面 */
void Game() void Game()
{ {
@ -520,7 +518,7 @@ void Make(struct Tetris *tetris)
} }
/* 开始游戏*/ /* 开始游戏*/
void play() void Play()
{ {
int n; int n;
struct Tetris t,*tetris=&t; struct Tetris t,*tetris=&t;
@ -532,7 +530,7 @@ void play()
HideCursor(); HideCursor();
while(1) while(1)
{ {
Flag(tetris); Shui_Ji(tetris);
Temp=tetris->flag; Temp=tetris->flag;
tetris->x=FrameX+2*Frame_width+6; tetris->x=FrameX+2*Frame_width+6;
tetris->y=FrameY+10; tetris->y=FrameY+10;
@ -545,7 +543,7 @@ void play()
while(1) while(1)
{ {
loop:Print(tetris); loop:Print(tetris);
Sleep(tetris->speed); Sleep(tetris->speed); //延时
Clean(tetris); Clean(tetris);
Temp1=tetris->x; Temp1=tetris->x;
Temp2=tetris->flag; //记住当前俄罗斯方块序号 Temp2=tetris->flag; //记住当前俄罗斯方块序号
@ -562,11 +560,11 @@ void play()
} }
if(ch==80) //↓键则加速下落 if(ch==80) //↓键则加速下落
{ {
if(ifMove(tetris)!=0) if(If_move(tetris)!=0)
{ {
tetris->y+=2; tetris->y+=2;
} }
if(ifMove(tetris)==0) if(If_move(tetris)==0)
{ {
tetris->y=FrameY+Frame_height-2; tetris->y=FrameY+Frame_height-2;
} }
@ -579,30 +577,42 @@ void play()
tetris->flag%=2; tetris->flag%=2;
tetris->flag+=2; tetris->flag+=2;
} }
if( tetris->flag>=4 && tetris->flag<=7 ) //如果是T字方块 if( tetris->flag>=4 && tetris->flag<=7 ) //如果是T字方块
{ {
tetris->flag++; tetris->flag++;
tetris->flag%=4; tetris->flag%=4;
tetris->flag+=4; tetris->flag+=4;
} }
if( tetris->flag>=8 && tetris->flag<=11 ) //如果是Z字方块
if( tetris->flag>=8 && tetris->flag<=9 ) //如果是Z字方块
{ {
tetris->flag++; tetris->flag++;
tetris->flag%=4; tetris->flag%=2;
tetris->flag+=8; tetris->flag+=8;
} }
if( tetris->flag>=10 && tetris->flag<=11 ) //如果是反Z字方块
{
tetris->flag++;
tetris->flag%=2;
tetris->flag+=10;
}
if( tetris->flag>=12 && tetris->flag<=15 ) //如果是7字方块 if( tetris->flag>=12 && tetris->flag<=15 ) //如果是7字方块
{ {
tetris->flag++; tetris->flag++;
tetris->flag%=4; tetris->flag%=4;
tetris->flag+=12; tetris->flag+=12;
} }
if( tetris->flag>=16 && tetris->flag<=19 ) //如果是反7字方块 if( tetris->flag>=16 && tetris->flag<=19 ) //如果是反7字方块
{ {
tetris->flag++; tetris->flag++;
tetris->flag%=4; tetris->flag%=4;
tetris->flag+=16; tetris->flag+=16;
} }
} }
if(ch == 32) //按空格键,暂停 if(ch == 32) //按空格键,暂停
{ {
@ -625,7 +635,7 @@ void play()
memset(a,0,6400*sizeof(int)); //初始化a数组 memset(a,0,6400*sizeof(int)); //初始化a数组
main(); main();
} }
if(ifMove(tetris)==0) if(If_move(tetris)==0)
{ {
tetris->x=Temp1; tetris->x=Temp1;
tetris->flag=Temp2; tetris->flag=Temp2;
@ -636,7 +646,7 @@ void play()
} }
} }
tetris->y++; tetris->y++;
if(ifMove(tetris)==0) if(If_move(tetris)==0)
{ {
tetris->y--; tetris->y--;
Print(tetris); Print(tetris);
@ -676,7 +686,7 @@ for(i=tetris->y-2;i<tetris->y+2;i++)
system("cls"); system("cls");
memset(a,0,6400*sizeof(int)); memset(a,0,6400*sizeof(int));
Game(); Game();
play(); Play();
} }
else else
exit(0); exit(0);
@ -697,11 +707,11 @@ void Clean(struct Tetris *tetris)
b[i]=0; //数组b[4]的每个元素的值都为0 b[i]=0; //数组b[4]的每个元素的值都为0
} }
Make(tetris); Make(tetris);
for( i = tetris->x - 2;i <= tetris->x + 4; i+=2 ) // X为中心方块 for(i=tetris->x-2;i<=tetris->x+4;i+=2) // X为中心方块
{ {
for(j = tetris->y-2;j <= tetris->y + 1;j++) for(j=tetris->y-2;j<=tetris->y+1;j++)
{ {
if( a[i][j] == 0 && j > FrameY ) //如果这个位置上没有图案,并且处于游戏界面当中 if(a[i][j]==0&&j>FrameY) //如果这个位置上没有图案,并且处于游戏界面当中
{ {
gotoxy(i,j); gotoxy(i,j);
printf(" "); //清除方块 printf(" "); //清除方块
@ -711,7 +721,7 @@ void Clean(struct Tetris *tetris)
} }
/* 随机产生俄罗斯方块*/ /* 随机产生俄罗斯方块*/
void Flag(struct Tetris *tetris) void Shui_Ji(struct Tetris *tetris)
{ {
tetris->number++; //记住产生方块的个数 tetris->number++; //记住产生方块的个数
srand(time(NULL)); //初始化随机数 srand(time(NULL)); //初始化随机数
@ -723,7 +733,7 @@ void Flag(struct Tetris *tetris)
} }
/*判断方块是否可以移动 */ /*判断方块是否可以移动 */
int ifMove(struct Tetris *tetris) int If_move(struct Tetris *tetris)
{ {
if(a[tetris->x][tetris->y]!=0) if(a[tetris->x][tetris->y]!=0)
{ {
@ -873,6 +883,7 @@ int ifMove(struct Tetris *tetris)
} }
return 0; return 0;
} }
/*判断方块是否满行 */ /*判断方块是否满行 */
void Full(struct Tetris *tetris) void Full(struct Tetris *tetris)
{ {
Loading…
Cancel
Save