frist commit

master
unknown 6 years ago
parent fccaa59998
commit 21487eb1d8

@ -27,13 +27,13 @@ HANDLE hOut; //
/****函数声明****/ /****函数声明****/
int color(int c); //控制文字颜色函数 int color(int c); //控制文字颜色函数
void gotoxy(int x,int y); //获取屏幕光标位置 void gotoxy(int x,int y); //获取屏幕光标位置
void welcome(); //首页
void Game(); //游戏界面 void Game(); //游戏界面
void play(); //开始游戏 void play(); //开始游戏
void explation(); //操作说明 void explation(); //操作说明
void rule(); //游戏规则 void rule(); //游戏规则
void MakeTetris(struct Tetris *); //制作方块 void Make(struct Tetris *); //制作方块
void PrintTetris(struct Tetris *); //打印方块 void Print(struct Tetris *); //打印方块
void Clean(struct Tetris *); //清除痕迹
/** /**
* *
*/ */
@ -54,18 +54,12 @@ void gotoxy(int x,int y)
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
} }
/**
*
*/
int main()
{
welcome();
}
/** /**
* *
*/ */
void welcome() void main()
{ {
/*图案*/ /*图案*/
color(11); color(11);
@ -313,7 +307,7 @@ void Game()
/** /**
* *
*/ */
void MakeTetris(struct Tetris *tetris) void Make(struct Tetris *tetris)
{ {
a[tetris->x][tetris->y]=b[0]; //中心方块位置的图形状态 a[tetris->x][tetris->y]=b[0]; //中心方块位置的图形状态
switch(tetris->flag) //共7大类19种类型 switch(tetris->flag) //共7大类19种类型
@ -494,13 +488,13 @@ void MakeTetris(struct Tetris *tetris)
/** /**
* *
*/ */
void PrintTetris(struct Tetris *tetris) void Print(struct Tetris *tetris)
{ {
for(i=0;i<4;i++) //让数组b[4]中的每个数都为1 for(i=0;i<4;i++) //让数组b[4]中的每个数都为1
{ {
b[i]=1; b[i]=1;
} }
MakeTetris(tetris); Make(tetris);
for(i=tetris->x-2;i<=tetris->x+4;i+=2) for(i=tetris->x-2;i<=tetris->x+4;i+=2)
{ {
for(j=tetris->y-2;j<=tetris->y+1;j++) //循环方块所以可能出现的位置 for(j=tetris->y-2;j<=tetris->y+1;j++) //循环方块所以可能出现的位置
@ -536,30 +530,30 @@ void MakeTetris(struct Tetris *tetris)
void play() void play()
{ {
int n; int n;
struct Tetris t,*tetris=&t; //定义结构体的指针并指向结构体变量 struct Tetris t,*tetris=&t;
char ch; //定义接收键盘输入的变量 char ch;
tetris->number=0; //初始化俄罗斯方块数为0个 tetris->number=0;
tetris->speed=300; //初始移动速度为300ms tetris->speed=300;
tetris->score=0; //初始游戏的分数为0分 tetris->score=0;
tetris->level=1; //初始游戏为第1关 tetris->level=1;
while(1) //循环产生方块,直至游戏结束 while(1)
{ {
Flag(tetris); //得到产生俄罗斯方块类型的序号 Flag(tetris);
Temp=tetris->flag; //记住当前俄罗斯方块序号 Temp=tetris->flag;
tetris->x=FrameX+2*Frame_width+6; //获得预览界面方块的x坐标 tetris->x=FrameX+2*Frame_width+6;
tetris->y=FrameY+10; //获得预览界面方块的y坐标 tetris->y=FrameY+10;
tetris->flag = tetris->next; //获得下一个俄罗斯方块的序号 tetris->flag = tetris->next;
PrintTetris(tetris); //调用打印俄罗斯方块方法 Print(tetris);
tetris->x=FrameX+Frame_width; //获得游戏窗口中心方块x坐标 tetris->x=FrameX+Frame_width;
tetris->y=FrameY-1; //获得游戏窗口中心方块y坐标 tetris->y=FrameY-1;
tetris->flag=Temp; tetris->flag=Temp;
//按键操作 //按键操作
while(1) //控制方块方向,直至方块不再下移 while(1)
{ {
label:PrintTetris(tetris); //打印俄罗斯方块 label:PrintTetris(tetris);
Sleep(tetris->speed); //延缓时间 Sleep(tetris->speed);
CleanTetris(tetris); //清除痕迹 CleanTetris(tetris);
Temp1=tetris->x; //记住中心方块横坐标的值 Temp1=tetris->x;
Temp2=tetris->flag; //记住当前俄罗斯方块序号 Temp2=tetris->flag; //记住当前俄罗斯方块序号
if(kbhit()) //判断是否有键盘输入有则用ch↓接收 if(kbhit()) //判断是否有键盘输入有则用ch↓接收
{ {
@ -618,7 +612,7 @@ void play()
} }
if(ch == 32) //按空格键,暂停 if(ch == 32) //按空格键,暂停
{ {
PrintTetris(tetris); Print(tetris);
while(1) while(1)
{ {
if(kbhit()) //再按空格键,继续游戏 if(kbhit()) //再按空格键,继续游戏
@ -684,14 +678,41 @@ for(i=tetris->y-2;i<tetris->y+2;i++)
printf("|| ■■ ■ ■■■■■ ■ ■ || \n"); printf("|| ■■ ■ ■■■■■ ■ ■ || \n");
printf(" @============================================================================@ \n"); printf(" @============================================================================@ \n");
if(MessageBox(NULL,"游戏结束.\n要重新来一局么?","Game Over",MB_YESNO|MB_ICONQUESTION)==IDYES) if(MessageBox(NULL,"游戏结束.\n要重新来一局么?","Game Over",MB_YESNO|MB_ICONQUESTION)==IDYES)
Replay(tetris); {
system("cls");
memset(a,0,6400*sizeof(int));
Game();
play();
}
else else
exit(0); exit(0);
} }
} }
tetris->flag = tetris->next; //清除下一个俄罗斯方块的图形(右边窗口) tetris->flag = tetris->next;
tetris->x=FrameX+2*Frame_width+6; tetris->x=FrameX+2*Frame_width+6;
tetris->y=FrameY+10; tetris->y=FrameY+10;
CleanTetris(tetris); Clean(tetris);
}
}
/**
*
*/
void Clean(struct Tetris *tetris)
{
for(i=0;i<4;i++) //数组b[4]中有4个元素循环这4个元素让每个元素的值都为0
{
b[i]=0; //数组b[4]的每个元素的值都为0
}
Make(tetris);
for( i = tetris->x - 2;i <= tetris->x + 4; i+=2 ) // X为中心方块
{
for(j = tetris->y-2;j <= tetris->y + 1;j++)
{
if( a[i][j] == 0 && j > FrameY ) //如果这个位置上没有图案,并且处于游戏界面当中
{
gotoxy(i,j);
printf(" "); //清除方块
}
}
} }
} }

Loading…
Cancel
Save