C語言—推箱子
推箱子是一個來自日本的古老遊戲,目的是在訓練你的邏輯思考能力。在一個狹小的倉庫中,要求把木箱放到指定的位置,稍不小心就會出現箱子無法移動或者通道被堵住的情況,所以需要巧妙的利用有限的空間和通道,合理安排移動的次序和位置,才能順利的完成任務。
簡單的推箱子游戲受到了廣大人民的熱愛,讓我們來看看程式設計師眼中的推箱子是什麼樣子的。下面我給大家介紹一下推箱子的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;
}