frist commit

master
unknown 6 years ago
parent fccaa59998
commit 21487eb1d8

@ -27,13 +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 *); //制作方块
void PrintTetris(struct Tetris *); //打印方块
void Make(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);
}
/**
*
*/
int main()
{
welcome();
}
/**
*
*/
void welcome()
void main()
{
/*图案*/
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]; //中心方块位置的图形状态
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
{
b[i]=1;
}
MakeTetris(tetris);
Make(tetris);
for(i=tetris->x-2;i<=tetris->x+4;i+=2)
{
for(j=tetris->y-2;j<=tetris->y+1;j++) //循环方块所以可能出现的位置
@ -536,30 +530,30 @@ void MakeTetris(struct Tetris *tetris)
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坐标
struct Tetris t,*tetris=&t;
char ch;
tetris->number=0;
tetris->speed=300;
tetris->score=0;
tetris->level=1;
while(1)
{
Flag(tetris);
Temp=tetris->flag;
tetris->x=FrameX+2*Frame_width+6;
tetris->y=FrameY+10;
tetris->flag = tetris->next;
Print(tetris);
tetris->x=FrameX+Frame_width;
tetris->y=FrameY-1;
tetris->flag=Temp;
//按键操作
while(1) //控制方块方向,直至方块不再下移
while(1)
{
label:PrintTetris(tetris); //打印俄罗斯方块
Sleep(tetris->speed); //延缓时间
CleanTetris(tetris); //清除痕迹
Temp1=tetris->x; //记住中心方块横坐标的值
label:PrintTetris(tetris);
Sleep(tetris->speed);
CleanTetris(tetris);
Temp1=tetris->x;
Temp2=tetris->flag; //记住当前俄罗斯方块序号
if(kbhit()) //判断是否有键盘输入有则用ch↓接收
{
@ -618,7 +612,7 @@ void play()
}
if(ch == 32) //按空格键,暂停
{
PrintTetris(tetris);
Print(tetris);
while(1)
{
if(kbhit()) //再按空格键,继续游戏
@ -684,14 +678,41 @@ for(i=tetris->y-2;i<tetris->y+2;i++)
printf("|| ■■ ■ ■■■■■ ■ ■ || \n");
printf(" @============================================================================@ \n");
if(MessageBox(NULL,"游戏结束.\n要重新来一局么?","Game Over",MB_YESNO|MB_ICONQUESTION)==IDYES)
Replay(tetris);
{
system("cls");
memset(a,0,6400*sizeof(int));
Game();
play();
}
else
exit(0);
}
}
tetris->flag = tetris->next; //清除下一个俄罗斯方块的图形(右边窗口)
tetris->flag = tetris->next;
tetris->x=FrameX+2*Frame_width+6;
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