#include#include#include//定義地圖資訊
#define row 8
#define col 8
int map[row][col]=,
, ,, ,
, , };
//人物位置
int person_x=4;
int person_y=4;
//定義代號
#define person 5 //注意 人進了空地也顯示人,所以9也是人的代號
#define person_destination 9
#define person "人"
#define floor 0 //空地
#define floor " "
#define wall 1 //牆壁
#define wall "■"
#define box 2 //箱子
#define box "●"
#define destination 4 //目的地
#define destination "☆"
#define perfect 6 //箱子進了目的地
#define perfect "★"
//列印地圖
void printmap();
//判斷是否已經完成了遊戲
int iswin();
//gotoxy函式的實現,把游標移到到指定位置
void gotoxy(int x,int y);
//人物移動
void turn();
int main()
turn();
} printf("恭喜啦!\n");
return 0;
}//列印地圖
void printmap()
//上面是箱子,再上面是空地或目的地
else if(person_x-2>=0&&(map[person_x-1][person_y]==box||map[person_x-1][person_y]==perfect)&&(map[person_x-2][person_y]==floor||map[person_x-2][person_y]==destination))
break;
case 's':
//下面是空地或者目的地
if(person_x+1=0&&(map[person_x][person_y-1]==floor||map[person_x][person_y-1]==destination))
//左邊是箱子,再左邊是空地或者目的地
else if(person_y-2>=0&&(map[person_x][person_y-1]==box||map[person_x][person_y-1]==perfect)&&(map[person_x][person_y-2]==floor||map[person_x][person_y-2]==destination))
break;
case 'd':
//右邊是空地或者目的地
if(person_y+1
//右邊是箱子,再右邊是空地或者目的地
else if(person_y+2
break;
default:
break;
} }
首先我們需要知道自己要做哪個關卡,我從網上搜了最簡單的第一關。
其次呢我們需要給關卡的每個定義乙個代號的數字,比如0表示空地,1表示牆壁,2表示箱子,4表示箱子需要推到的目的地,6(2+4)表示箱子推進目的地,5表示玩家,9(5+4)表示玩家進入了目的地。我們選取數字代號雖然說是任意的,但是要注意不能用一樣的代號代表不同的圖形(這裡也是為啥目的地不選3的原因,選3的話,箱子進了目的地的結果是2+3=5,和玩家一樣了)。當然大家可以根據自己喜好換別的數字當做玩家。
接下來我們按照代號將地圖用乙個二維陣列表示(map[row][col]),並且設定好行列的巨集定義(row,col)。
前期工作都準備好了,我們要開始設計遊戲的邏輯實現了。我們先要把關卡內容展示出來,所以需要乙個列印地圖的函式(printmap());展示出來之後呢,玩家可以根據自己看到的關卡地圖進行操作嘛,所以我們需要乙個操作函式(turn());玩家每次操作完之後,都有可能已經通關了,所以我們需要乙個判斷玩家是否已經通關的函式(iswin())。最後再把這幾個函式拼湊在主函式中呼叫,這樣乙個簡單的推箱子遊戲就完成啦。如果想設定多層關卡,可以結合檔案操作哦!先將地圖資訊都儲存在檔案中,將檔名設定為關卡名,如1.txt表示第一關的關卡內容。地圖資訊包括行、列、詳細圖形代號。在我們需要讀取關卡時,只需要設定乙個函式讀取即可,然後需要將玩家的座標計算出來,再進行以上操作。
這個推箱子可以加深我們的二維陣列應用經驗,同時判斷玩家移動的過程也讓我們的邏輯思維能力得到了提高,對事情的多角度思考有莫大的幫助。
有興趣的話還可以新增撤銷功能,思路如下:每次玩家移動,都記錄下來存在乙個陣列中(直接記錄玩家的移動方向即可,當收到玩家的撤銷請求時,先把地圖還原為關卡初始狀態,然後依次讀入記錄陣列的移動方向,讀取到倒數第二個即可,然後把陣列的長度減一)。
對於新增關卡,我們還可以用到檔案操作,加深檔案操作的理解和運用能力。
總的來說,推箱子的設計可以多方面鞏固我們的已有知識,甚至有的小夥伴想要設計讓電腦自動推箱子的話,我們還得需要用到人工智慧的知識,這樣還會激發我們的求知慾。閒暇之餘設計一下簡單遊戲,無疑是有百利而無一害的。
C語言簡單遊戲程式設計學習入門之fluppybird
include include include include 遊戲地圖資訊,行 列 地圖 define row 15 define col 19 int map row col 玩家結構,橫座標 縱座標 下落速度 typedef struct player player player p 障礙物結...
C語言簡單遊戲程式設計學習入門之2048
include include include include include 過關數字 define win number 2048 定義地圖行 列 以及本身 define row 4 define col 4 int map row col 初始化地圖 void initializemap 列印...
C語言簡單遊戲程式設計學習入門之猜數字
標頭檔案引用 include include include 主函式 int main else if guess number else 猜中了 還沒有猜中,判斷猜測次數是否已經是最大次數次了,超過則遊戲失敗,退出死迴圈 if count guess max count return 0 猜數字遊...