指標小應用 推箱子遊戲

2021-07-03 11:19:20 字數 2980 閱讀 8739

推箱子和迷宮有點類似,不過多了箱子位置的判斷,需要利用指標比較方便.

程式除錯過程中出現過幾個bug:

第一次:小人推著箱子能穿牆! 

檢查發現第二個判定條件裡沒加箱子的下一步是

第二次:把箱子推到目的地以後,箱子到了目標'!'的位置,人移到箱子位置,'!'移到原來人所在的位置.到達目的條件永遠不會滿足,程式在死迴圈中無法退出

錯誤原因:能否推動箱子判定的是箱子的下一步不是'#',顯然'!'也不是'#',導致交換了三者的位置.進而找到遊戲成功的判定條件出現了基礎錯誤.本來是判定箱子位址所指向的內容是否是'!',仔細一想箱子位址指向的內容永遠是'm',後來換成箱子當前位址是否等於最初'!'的地置,即map[2][10]的位址.後來在朋友的提醒下,可以設定乙個標記值(初始flag=0)想到當箱子推到目的地時直接記錄(flag=1).更加簡單明瞭.

最後:就是細節上的再優化,其實還有許多能做的.

通過這個小遊戲的編寫,有以下幾點體會:

1.巨集定義的好處:利用巨集定義了地圖的行和列以後,如果地圖有更改,比如增加難度,可以讓地圖從12*12擴大到15*20,那麼只要直接更改巨集定義的行和列數值,然後再初始化一下map就好,不需要再去更改程式中的數值了.遊戲更新的時候方便許多.

2.要培養簡單思考問題的習慣,將任務劃分為乙個乙個單一的問題,逐一完成

3.指標的靈活性:利用指標明顯要比迷宮遊戲中利用陣列下標記錄位置方便太多了 //

//  列印地圖.m

//  應用:推箱子遊戲

////  created by lanou3g on 15/6/24.

#import "

列印地圖

.h"

@implementation____

void printmap(char map[col][row])

printf("\n");}}

@end

//  main.m

//  應用:推箱子遊戲

////  created by lanou3g on 15/6/22.

//#import

#import "

列印地圖

.h"

#define col 12

#define row 12

int main(int argc,const

char * argv)

;//2.定義變數接受小人和箱子的位置

char *r = &map[1][1];

char derection = 0;

char ch = 0;

int flag = 0;

//********

列印地圖

**********

//列印地圖

printmap(map);

//提示使用者玩法w-上 s-下 a-左 d-右

其他任意鍵-退出

printf

("game start!\nw-上 s-下 a-左 d-右

其他任意鍵-退出遊戲\n");

//******** 迴圈控制 **********

//1.接受輸入的方向

//2.判斷

//   1.if如果小人的下一步是路

//       滿足,移動小人

//         else-->

//             2.if判斷小人的下乙個位置是否是箱子,且箱子的下一步有路可走

//                 滿足,箱子移到路的位置,小人移到箱子位置,路移到原來小人的位置

//                    else-->

//                      3.下一步是箱子且箱子下一步是目標

//                          滿足:箱子移到目標的位置,小人移到箱子位置,小人原來的位置變成路(即:空格),標記符記1

while (1) else

if (*(r-row)=='m' &&  *(r-row-row) ==' ')else

if (*(r-row)=='m' &&  *(r-row-row) =='!')

break;

case

's':

case

's':

if (*(r+row)==' ') else

if (*(r+row)=='m' &&  *(r+row+row)==' ')else

if (*(r+row)=='m' &&  *(r+row+row) =='!')

break;

case

'a':

case

'a':

if (*(r-1)==' ') else

if (*(r-1)=='m' && *(r-1-1)==' ')else

if (*(r+1)=='m' &&  *(r+1+1) =='!')

break;

case

'd':

case

'd':

if (*(r+1)==' ') else

if (*(r+1)=='m' && *(r+1+1)==' ')else

if (*(r-1)=='m' &&  *(r-1-1) =='!')

break;

default:

printf

("您已成功退出遊戲!o(∩_∩)o謝謝!\n");

break;

}//******** 重新整理地圖 **********

printmap(map);

//******** 是否成功 **********

if (flag == 1)

}return0;}

執行結果部分截圖(r是小人,m是箱子,!是目標位置):

推箱子遊戲

大一寒假 1.寫 時我犯了乙個很大的錯誤 不然早就搞定了 把 與 混淆了 大忌啊 2.這裡實現了數位化編碼 3.上72 下80 左75 右77 4.特殊圖形可以到qq拼音符號裡獲取 include include include define x 1 人的位置 define y 5 define n...

推箱子遊戲

本專案開發環境為vs2017 c 對推箱子遊戲的觀察可以發現,該遊戲就是在乙個頁面對進行移動的操作。因此可以定義乙個二維陣列map,進行初始化。0 空地 1 牆壁 3 箱子的目的地 4 箱子 6 人 7 箱子與目的地重合 9 人在箱子目的地。如下 include include include in...

推箱子遊戲(簡易)

標頭檔案 boxman.h define key up w define key down s define key left a define key right d define key quite q define map x 9 define map y 12 define ratio 61...