推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
简单的推箱子游戏受到了广大人民的热爱,让我们来看看程序员眼中的推箱子是什么样子的。下面我给大家介绍一下推箱子的C源代码。
要完成推箱子项目首先要了解推箱子的几大重点:人、箱子、目的地、墙、空地。它们是如何组合在一起的,之间的关系又是什么?
我们可以用数字来代表它们和它们之间的关系,比如0代表空地,1代表墙,3代表目的地,4代表箱子,5代表人,7代表箱子已经在目的地上,8代表人站在目的地上。人物关系弄清楚后我们就可以绘制关卡的地图了。
地图完成之后就是操作,操作我们就用键盘的上下左右键来进行。
while(1)
{
int ch=getch();
if(ch)
{
ch=getch();
}
switch(ch)
{
case ch_up:
Key_up(arr);
break;
case ch_down:
Key_down(arr);
break;
case ch_left:
Key_left(arr);
break;
case ch_right:
Key_right(arr);
break;
case ch_reset:
Key_reset=1;
break;
default:
break;
}
Show(arr);
if(Gameover(arr))
{
if(game_tier==TIME)
{
printf("********恭喜您已经通关所有关卡!!!********\n");
}
game_tier++;
printf("\n\n");
printf("******************************\n");
printf("********恭喜通关!!! **\n");
printf("********请选择接下来的操作: **\n");
printf("********1、重新挑战。 **\n");
printf("********2、挑战下一关。 **\n");
printf("********3、选择关卡。 **\n");
printf("********4、退出游戏。 **\n");
printf("******************************\n");
scanf("%d",&Key_a);
break;
}
if(Key_reset==1)
{
Key_reset=0;
break;
}
}
用getch()函数来读取键盘的值,switch语句进行选择将要进行的操作。Key_up(),Key_down(),Key_left(),Key_right(),四个函数分别对读取到的指令进行执行,我们以Key_up()为例进行详细介绍。
void Key_up(int (*arr)[8])
{
int i=0;
int j=0;
int flg_a=0;
for(i=0;i<8;i++) //找到人的坐标i,j
{
for(j=0;j<8;j++)
{
if(arr[i][j]==5||arr[i][j]==8)
{
flg_a=1;
break;
}
}
if(flg_a==1)
{
break;
}
}
if(arr[i-1][j]==0) //上面是空地
{
if(arr[i][j]==5)
{
arr[i-1][j]=5;
arr[i][j]=0;
}
else
{
arr[i-1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==4&&arr[i-2][j]==0) //上面是箱子
{
if(arr[i][j]==5)
{
arr[i-2][j]=4;
arr[i-1][j]=5;
arr[i][j]=0;
}
else
{
arr[i-2][j]=4;
arr[i-1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==4&&arr[i-2][j]==3) //上面是箱子,箱子上是目的地
{
if(arr[i][j]==5)
{
arr[i-2][j]=7;
arr[i-1][j]=5;
arr[i][j]=0;
}
else
{
arr[i-2][j]=7;
arr[i-1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==3) //上面是目的地
{
if(arr[i][j]==5)
{
arr[i-1][j]=8;
arr[i][j]=0;
}
else
{
arr[i-1][j]=8;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==7&&arr[i-2][j]==3) //上面是箱子在目的地上,箱子的上面还是目的地
{
if(arr[i][j]==5)
{
arr[i-2][j]=7;
arr[i-1][j]=8;
arr[i][j]=0;
}
else
{
arr[i-2][j]=7;
arr[i-1][j]=8;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==7&&arr[i-2][j]==0) //上边是箱子在目的地上,箱子上边是空地
{
if(arr[i][j]==5)
{
arr[i-2][j]=4;
arr[i-1][j]=8;
arr[i][j]=0;
}
else
{
arr[i-2][j]=4;
arr[i-1][j]=8;
arr[i][j]=3;
}
}
}
我们的操作是对人来进行的,所以我们首先得找到人所在的具体坐标,遍历整个二维数组,找到5或者8的位置(8是指人和目的地在同一个坐标),假设人的坐标是i,j,那么arr[i][j]=5或者arr[i][j]=8;;接下来我们就得判断人上面的各种情况,
1.人上面是空地 arr[i-1][j]==0。
2.人上面是箱子,箱子上面是空地 arr[i-1][j]==4&&arr[i-2][j]==0。
3.人的上面是箱子,箱子上是目的地 arr[i-1][j]==4&&arr[i-2][j]==3。
4.人的上面是目的地 arr[i-1][j]==3。
5.人的上面是箱子在目的地上,箱子的上面还是目的地 arr[i-1][j]==7&&arr[i-2][j]==3。
6.人的上边是箱子在目的地上,箱子上边是空地 arr[i-1][j]==7&&arr[i-2][j]==0。
void Key_up(int (*arr)[8])
{
int i=0;
int j=0;
int flg_a=0;
for(i=0;i<8;i++) //找到人的坐标i,j
{
for(j=0;j<8;j++)
{
if(arr[i][j]==5||arr[i][j]==8)
{
flg_a=1;
break;
}
}
if(flg_a==1)
{
break;
}
}
if(arr[i-1][j]==0) //上面是空地
{
if(arr[i][j]==5)
{
arr[i-1][j]=5;
arr[i][j]=0;
}
else
{
arr[i-1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==4&&arr[i-2][j]==0) //人上面是箱子,箱子上面是空地
{
if(arr[i][j]==5)
{
arr[i-2][j]=4;
arr[i-1][j]=5;
arr[i][j]=0;
}
else
{
arr[i-2][j]=4;
arr[i-1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==4&&arr[i-2][j]==3) //上面是箱子,箱子上是目的地
{
if(arr[i][j]==5)
{
arr[i-2][j]=7;
arr[i-1][j]=5;
arr[i][j]=0;
}
else
{
arr[i-2][j]=7;
arr[i-1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==3) //上面是目的地
{
if(arr[i][j]==5)
{
arr[i-1][j]=8;
arr[i][j]=0;
}
else
{
arr[i-1][j]=8;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==7&&arr[i-2][j]==3) //上面是箱子在目的地上,箱子的上面还是目的地
{
if(arr[i][j]==5)
{
arr[i-2][j]=7;
arr[i-1][j]=8;
arr[i][j]=0;
}
else
{
arr[i-2][j]=7;
arr[i-1][j]=8;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==7&&arr[i-2][j]==0) //上边是箱子在目的地上,箱子上边是空地
{
if(arr[i][j]==5)
{
arr[i-2][j]=4;
arr[i-1][j]=8;
arr[i][j]=0;
}
else
{
arr[i-2][j]=4;
arr[i-1][j]=8;
arr[i][j]=3;
}
}
}
最后我们还得进行游戏结束的判断和游戏的输出展示,判断游戏结束的方法有很多,我选择遍历整个数组,只要数组中不存在3和4就说明所有的箱子都进了目的地。
bool Gameover(int (*arr)[8])
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(arr[i][j]==3||arr[i][j]==4)
{
return false;
}
}
}
return true;
}
打印函数你可以用你自己喜欢的符号来代替冰冷的数字。
void Show(int (*arr)[8])
{
system("cls");
int n=2;
printf("*********************\n");
for(int i=0;i<8;i++)
{
printf("**");
for(int j = 0;j < 8;j++)
{
n=arr[i][j];
switch(n)
{
case 0:
printf(" ");
break;
case 1:
printf("■");
break;
case 3:
printf("☆");
break;
case 4:
printf("□");
break;
case 5:
printf("♀");
break;
case 7:
printf("★");
break;
case 8:
printf("♀");
break;
default:
break;
}
}
printf("***\n");
}
printf("**双击‘0’重置本关**\n");
printf("*********************\n");
}
游戏成果展示如图所示
项目源代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define ch_up 72 //向上方向键
#define ch_down 80 //向下方向键
#define ch_right 77 //向右方向键
#define ch_left 75 //向左方向键
#define ch_reset 48 //重置关卡
#define TIME 10 //关卡数量
int (*Map( int (*arr)[8],int n))[8] //0代表空地,1代表墙,3代表目的地,4代表箱子,5代表人
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
arr[i][j]=0;
}
}
switch(n)
{
case 1: //第1关地图
for(int i=0;i<8;i++)
{
arr[2][i]=1;
arr[5][i]=1;
}
arr[3][0]=1;arr[4][0]=1;arr[3][7]=1;arr[4][7]=1;
arr[3][1]=5;arr[3][3]=4;arr[4][3]=4;arr[3][6]=3;arr[4][6]=3;
break;
case 2: //第2关地图
for(int i=0;i<3;i++)
{
arr[0][i+2]=1;
arr[3][i]=1;
arr[4][i+5]=1;
arr[7][i+3]=1;
}
for(int i=0;i<4;i++)
{
arr[2][i+4]=1;
arr[5][i]=1;
}
arr[1][2]=1;arr[2][2]=1;arr[1][4]=1;arr[3][7]=1;
arr[4][0]=1;arr[5][5]=1;arr[6][3]=1;arr[6][5]=1;
arr[1][3]=3;arr[3][6]=3;arr[4][1]=3;arr[6][4]=3;
arr[3][3]=4;arr[3][5]=4;arr[4][3]=4;arr[5][4]=4;arr[4][4]=5;
break;
case 3: //第3关地图
for(int i=0;i<7;i++)
{
arr[i+1][1]=1;
arr[i+1][6]=1;
}
for(int i=0;i<4;i++)
{
arr[1][i+2]=1;
arr[7][i+2]=1;
}
arr[3][3]=1;arr[3][4]=5;arr[4][3]=4;arr[5][3]=3;
arr[4][4]=7;arr[5][4]=7;
break;
case 4: //第4关地图
for(int i=0;i<4;i++)
{
arr[1][i+3]=1;
arr[i+3][1]=1;
arr[i+3][7]=1;
arr[7][i+3]=1;
}
arr[7][7]=1;arr[3][2]=1;
for(int i=0;i<2;i++)
{
arr[2][i+2]=1;
arr[6][i+2]=1;
arr[i+2][6]=1;
}
arr[3][3]=5;arr[3][4]=4;arr[4][3]=4;arr[4][4]=4;
arr[3][5]=3;arr[5][3]=3;arr[5][5]=3;
break;
case 5: //第5关地图
for(int i=0;i<5;i++)
{
arr[i+2][1]=1;
arr[i+2][6]=1;
arr[7][i+1]=1;
}
for(int i=0;i<2;i++)
{
arr[1][i+1]=1;
arr[1][i+3]=1;
arr[2][i+4]=1;
}
arr[6][5]=1;arr[5][3]=5;
arr[4][2]=3;arr[4][3]=3;arr[4][4]=3;
arr[3][3]=4;arr[3][4]=4;arr[5][4]=4;
break;
case 6: //第6关地图
for(int i=0;i<6;i++)
{
arr[i+1][1]=1;
arr[6][i+2]=1;
}
for(int i=0;i<3;i++)
{
arr[1][i+2]=1;
arr[i+1][5]=1;
arr[i+3][7]=1;
}
arr[3][6]=1;arr[4][5]=5;
arr[4][4]=4;arr[4][3]=4;arr[4][2]=4;
arr[5][4]=3;arr[5][3]=3;arr[5][2]=3;
break;
case 7: //第7关地图
for(int i=0;i<5;i++)
{
arr[1][i+2]=1;
arr[7][i+2]=1;
arr[i+2][1]=1;
arr[i+2][7]=1;
}
arr[2][2]=1;arr[2][6]=1;arr[6][2]=1;arr[6][6]=1;arr[4][4]=1;
arr[2][3]=3;arr[2][5]=3;arr[3][3]=7;arr[3][5]=7;
arr[5][3]=4;arr[5][5]=4;arr[6][4]=5;
break;
case 8: //第8关地图
for(int i=0;i<4;i++)
{
arr[i+2][1]=1;
arr[i+3][6]=1;
}
for(int i=0;i<3;i++)
{
arr[i][2]=1;
arr[5+i][2]=1;
arr[0][i+3]=1;
arr[i+1][5]=1;
arr[7][i+3]=1;
}
arr[7][6]=1;arr[6][4]=5;
arr[2][3]=3;arr[3][3]=3;arr[6][3]=3;
arr[3][4]=4;arr[4][4]=4;arr[5][3]=4;
break;
case 9: //第9关地图
for(int i=0;i<7;i++)
{
arr[0][i]=1;
arr[i][7]=1;
arr[i+1][0]=1;
arr[7][i+1]=1;
}
arr[1][2]=3;arr[2][1]=3;arr[1][5]=3;arr[2][6]=3;
arr[3][3]=3;arr[3][4]=3;arr[4][3]=3;arr[4][4]=3;
arr[5][1]=3;arr[5][6]=3;arr[6][2]=3;arr[6][5]=3;
for(int i=0;i<3;i++)
{
arr[2][i+2]=4;
arr[i+2][5]=4;
arr[i+3][2]=4;
arr[5][i+3]=4;
}
arr[4][4]=8;
break;
case 10: //第10关地图
for(int i=0;i<4;i++)
{
arr[1][i+1]=1;
arr[i+2][1]=1;
arr[2][i+4]=1;
arr[i+3][7]=1;
arr[7][i+3]=1;
}
arr[3][4]=1;arr[6][6]=1;arr[5][2]=1;arr[6][2]=1;arr[7][2]=1;
arr[4][2]=3;arr[4][3]=4;arr[4][4]=7;arr[4][5]=7;arr[4][6]=5;
break;
default:
break;
}
return arr;
}
void Show(int (*arr)[8])
{
system("cls");
int n=2;
printf("*********************\n");
for(int i=0;i<8;i++)
{
printf("**");
for(int j = 0;j < 8;j++)
{
n=arr[i][j];
switch(n)
{
case 0:
printf(" ");
break;
case 1:
printf("■");
break;
case 3:
printf("☆");
break;
case 4:
printf("□");
break;
case 5:
printf("♀");
break;
case 7:
printf("★");
break;
case 8:
printf("♀");
break;
default:
break;
}
}
printf("***\n");
}
printf("**双击‘0’重置本关**\n");
printf("*********************\n");
}
bool Gameover(int (*arr)[8])
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(arr[i][j]==3||arr[i][j]==4)
{
return false;
}
}
}
return true;
}
void Key_up(int (*arr)[8])
{
int i=0;
int j=0;
int flg_a=0;
for(i=0;i<8;i++) //找到人的坐标i,j
{
for(j=0;j<8;j++)
{
if(arr[i][j]==5||arr[i][j]==8)
{
flg_a=1;
break;
}
}
if(flg_a==1)
{
break;
}
}
if(arr[i-1][j]==0) //上面是空地
{
if(arr[i][j]==5)
{
arr[i-1][j]=5;
arr[i][j]=0;
}
else
{
arr[i-1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==4&&arr[i-2][j]==0) //人上面是箱子,箱子上面是空地
{
if(arr[i][j]==5)
{
arr[i-2][j]=4;
arr[i-1][j]=5;
arr[i][j]=0;
}
else
{
arr[i-2][j]=4;
arr[i-1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==4&&arr[i-2][j]==3) //上面是箱子,箱子上是目的地
{
if(arr[i][j]==5)
{
arr[i-2][j]=7;
arr[i-1][j]=5;
arr[i][j]=0;
}
else
{
arr[i-2][j]=7;
arr[i-1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==3) //上面是目的地
{
if(arr[i][j]==5)
{
arr[i-1][j]=8;
arr[i][j]=0;
}
else
{
arr[i-1][j]=8;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==7&&arr[i-2][j]==3) //上面是箱子在目的地上,箱子的上面还是目的地
{
if(arr[i][j]==5)
{
arr[i-2][j]=7;
arr[i-1][j]=8;
arr[i][j]=0;
}
else
{
arr[i-2][j]=7;
arr[i-1][j]=8;
arr[i][j]=3;
}
}
else if(arr[i-1][j]==7&&arr[i-2][j]==0) //上边是箱子在目的地上,箱子上边是空地
{
if(arr[i][j]==5)
{
arr[i-2][j]=4;
arr[i-1][j]=8;
arr[i][j]=0;
}
else
{
arr[i-2][j]=4;
arr[i-1][j]=8;
arr[i][j]=3;
}
}
}
void Key_down(int (*arr)[8])
{
int i=0;
int j=0;
int flg_a=0;
for(i=0;i<8;i++) //找到人的坐标i,j
{
for(j=0;j<8;j++)
{
if(arr[i][j]==5||arr[i][j]==8)
{
flg_a=1;
break;
}
}
if(flg_a==1)
{
break;
}
}
if(arr[i+1][j]==0) //下面是空地
{
if(arr[i][j]==5)
{
arr[i+1][j]=5;
arr[i][j]=0;
}
else
{
arr[i+1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i+1][j]==4&&arr[i+2][j]==0) //下面是箱子
{
if(arr[i][j]==5)
{
arr[i+2][j]=4;
arr[i+1][j]=5;
arr[i][j]=0;
}
else
{
arr[i+2][j]=4;
arr[i+1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i+1][j]==4&&arr[i+2][j]==3) //下面是箱子,箱子下是目的地
{
if(arr[i][j]==5)
{
arr[i+2][j]=7;
arr[i+1][j]=5;
arr[i][j]=0;
}
else
{
arr[i+2][j]=7;
arr[i+1][j]=5;
arr[i][j]=3;
}
}
else if(arr[i+1][j]==3) //下面是目的地
{
if(arr[i][j]==5)
{
arr[i+1][j]=8;
arr[i][j]=0;
}
else
{
arr[i+1][j]=8;
arr[i][j]=3;
}
}
else if(arr[i+1][j]==7&&arr[i+2][j]==3) //下面是箱子在目的地上,箱子的下面还是目的地
{
if(arr[i][j]==5)
{
arr[i+2][j]=7;
arr[i+1][j]=8;
arr[i][j]=0;
}
else
{
arr[i+2][j]=7;
arr[i+1][j]=8;
arr[i][j]=3;
}
}
else if(arr[i+1][j]==7&&arr[i+2][j]==0) //下边是箱子在目的地上,箱子下边是空地
{
if(arr[i][j]==5)
{
arr[i+2][j]=4;
arr[i+1][j]=8;
arr[i][j]=0;
}
else
{
arr[i+2][j]=4;
arr[i+1][j]=8;
arr[i][j]=3;
}
}
}
void Key_left(int (*arr)[8])
{
int i=0;
int j=0;
int flg_a=0;
for(i=0;i<8;i++) //找到人的坐标i,j
{
for(j=0;j<8;j++)
{
if(arr[i][j]==5||arr[i][j]==8)
{
flg_a=1;
break;
}
}
if(flg_a==1)
{
break;
}
}
if(arr[i][j-1]==0) //左边是空地
{
if(arr[i][j]==5)
{
arr[i][j-1]=5;
arr[i][j]=0;
}
else
{
arr[i][j-1]=5;
arr[i][j]=3;
}
}
else if(arr[i][j-1]==4&&arr[i][j-2]==0) //左边是箱子,箱子左边是空地
{
if(arr[i][j]==5)
{
arr[i][j-2]=4;
arr[i][j-1]=5;
arr[i][j]=0;
}
else
{
arr[i][j-2]=4;
arr[i][j-1]=5;
arr[i][j]=3;
}
}
else if(arr[i][j-1]==4&&arr[i][j-2]==3) //左边是箱子,箱子左边是目的地
{
if(arr[i][j]==5)
{
arr[i][j-2]=7;
arr[i][j-1]=5;
arr[i][j]=0;
}
else
{
arr[i][j-2]=7;
arr[i][j-1]=5;
arr[i][j]=3;
}
}
else if(arr[i][j-1]==3) //左边是目的地
{
if(arr[i][j]==5)
{
arr[i][j-1]=8;
arr[i][j]=0;
}
else
{
arr[i][j-1]=8;
arr[i][j]=3;
}
}
else if(arr[i][j-1]==7&&arr[i][j-2]==3) //左边是箱子在目的地上,箱子的左边还是目的地
{
if(arr[i][j]==5)
{
arr[i][j-2]=7;
arr[i][j-1]=8;
arr[i][j]=0;
}
else
{
arr[i][j-2]=7;
arr[i][j-1]=8;
arr[i][j]=3;
}
}
else if(arr[i][j-1]==7&&arr[i][j-2]==0) //左边是箱子在目的地上,箱子左边是空地
{
if(arr[i][j]==5)
{
arr[i][j-2]=4;
arr[i][j-1]=8;
arr[i][j]=0;
}
else
{
arr[i][j-2]=4;
arr[i][j-1]=8;
arr[i][j]=3;
}
}
}
void Key_right(int (*arr)[8])
{
int i=0;
int j=0;
int flg_a=0;
for(i=0;i<8;i++) //找到人的坐标i,j
{
for(j=0;j<8;j++)
{
if(arr[i][j]==5||arr[i][j]==8)
{
flg_a=1;
break;
}
}
if(flg_a==1)
{
break;
}
}
if(arr[i][j+1]==0) //右边是空地
{
if(arr[i][j]==5)
{
arr[i][j+1]=5;
arr[i][j]=0;
}
else
{
arr[i][j+1]=5;
arr[i][j]=3;
}
}
else if(arr[i][j+1]==4&&arr[i][j+2]==0) //右边是箱子,箱子右边是空地
{
if(arr[i][j]==5)
{
arr[i][j+2]=4;
arr[i][j+1]=5;
arr[i][j]=0;
}
else
{
arr[i][j+2]=4;
arr[i][j+1]=5;
arr[i][j]=3;
}
}
else if(arr[i][j+1]==4&&arr[i][j+2]==3) //右边是箱子,箱子右边是目的地
{
if(arr[i][j]==5)
{
arr[i][j+2]=7;
arr[i][j+1]=5;
arr[i][j]=0;
}
else
{
arr[i][j+2]=7;
arr[i][j+1]=5;
arr[i][j]=3;
}
}
else if(arr[i][j+1]==3) //右边是目的地
{
if(arr[i][j]==5)
{
arr[i][j+1]=8;
arr[i][j]=0;
}
else
{
arr[i][j+1]=8;
arr[i][j]=3;
}
}
else if(arr[i][j+1]==7&&arr[i][j+2]==3) //右边是箱子在目的地上,箱子的右边还是目的地
{
if(arr[i][j]==5)
{
arr[i][j+2]=7;
arr[i][j+1]=8;
arr[i][j]=0;
}
else
{
arr[i][j+2]=7;
arr[i][j=1]=8;
arr[i][j]=3;
}
}
else if(arr[i][j+1]==7&&arr[i][j+2]==0) //右边是箱子在目的地上,箱子右边是空地
{
if(arr[i][j]==5)
{
arr[i][j+2]=4;
arr[i][j+1]=8;
arr[i][j]=0;
}
else
{
arr[i][j+2]=4;
arr[i][j+1]=8;
arr[i][j]=3;
}
}
}
void Gamebegin()
{
int Key_a=0;
int Key_reset=0;
int game_tier=0; //最大通关层数
int game_choose=0; //将要选择的关数
int n=1; //关卡数
int brr[8][8]={{0,0,0,0,0,0,0,0}, //空地图
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0}};
int (*arr)[8]=Map(brr,n);
while(n!=0&&n<=TIME)
{
arr=Map(brr,n);
Show(arr);
while(1)
{
int ch=getch();
if(ch)
{
ch=getch();
}
switch(ch)
{
case ch_up:
Key_up(arr);
break;
case ch_down:
Key_down(arr);
break;
case ch_left:
Key_left(arr);
break;
case ch_right:
Key_right(arr);
break;
case ch_reset:
Key_reset=1;
break;
default:
break;
}
Show(arr);
if(Gameover(arr))
{
if(game_tier==TIME)
{
printf("********恭喜您已经通关所有关卡!!!********\n");
}
game_tier++;
printf("\n\n");
printf("******************************\n");
printf("********恭喜通关!!! **\n");
printf("********请选择接下来的操作: **\n");
printf("********1、重新挑战。 **\n");
printf("********2、挑战下一关。 **\n");
printf("********3、选择关卡。 **\n");
printf("********4、退出游戏。 **\n");
printf("******************************\n");
scanf("%d",&Key_a);
break;
}
if(Key_reset==1)
{
Key_reset=0;
break;
}
}
switch(Key_a)
{
case 1:
Key_a=0;
break;
case 2:
Key_a =0;
n++;
break;
case 3:
Key_a =0;
printf("请输入你已经挑战过得关卡\n");
scanf("%d",&game_choose);
while(game_choose<=0 || game_choose>game_tier+1)
{
printf("输入有误,请重新输入你已经通过的关卡或将要挑战的关卡。");
scanf("%d",&game_choose);
}
n=game_choose;
break;
case 4:
Key_a =0;
n=0;
break;
default:
break;
}
}
if(game_tier==TIME)
{
printf("********恭喜您已经通关所有关卡!!!********\n");
}
else
{
printf("********再接再厉!!!**********************\n");
}
}
int main()
{
Gamebegin();
return 0;
}