C語言簡單遊戲程式設計學習入門之推箱子

2021-09-25 05:10:13 字數 2736 閱讀 2993

#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 猜數字遊...