C 推箱子遊戲(一)

2021-08-19 15:15:11 字數 4228 閱讀 3639

準備:c/c++基礎

code::blocks

第一次嘗試:

自製地圖:

將地圖在控制台顯示出來並控制中心位置的圖案移動

#include #include #include using namespace std;

void start_map(int a[7][7]);//將陣列對應的地圖顯示出來

int *man_move(int *p,int a[7][7]);

int main()

; a[1][3]=a[3][1]=a[5][3]=a[3][5]=3;

a[2][3]=a[3][2]=a[3][4]=a[4][3]=2;

a[3][3]=1;

int *p;//指向操作物件

p=&a[3][3];

while(1)

system("pause");

return 0;

}void start_map(int a[7][7]) //將陣列對應的地圖顯示出來

}cout<< endl;

}}int *man_move(int *p,int a[7][7])

; break;

case 's':

cout << 1 ;

break;

case 'a':

cout << 1 ;

break;

case 'd':

cout << 1 ;

break;

}return p;

}

遇到的第乙個問題是移動輸入:

採取「cin」需要按回車,於是採用了「getch()」函式。關於getch()的具體情況可以去看看"c++之getch(),getche(),getchar()的區別"

第二次嘗試:

在不考慮bug的情況下寫出可執行的**

#include #include #include //#include using namespace std;

void start_map(int a[7][7]);//將陣列對應的地圖顯示出來

int *man_move(int *p,int a[7][7]);

int main()

; a[1][3]=a[3][1]=a[5][3]=a[3][5]=3;

a[2][3]=a[3][2]=a[3][4]=a[4][3]=2;

a[3][3]=1;

int *p=&a[3][3];//指向操作物件

p=&a[3][3];

while(1)

system("pause");

return 0;

}void start_map(int a[7][7]) //將陣列對應的地圖顯示出來

}cout<< endl;

}}int *man_move(int* p,int a[7][7])

else if(*(p-7)==2) //上方有箱子

}} ;

break;

case 's':

if(*(p+7)==4||*(p+7)==3)

else if(*(p+7)==2)

}break;

case 'a':

if(*(p-1)==4||*(p-1)==3)

else if(*(p-1)==2)

}break;

case 'd':

if(*(p+1)==4||*(p+1)==3)

else if(*(p+1)==2)

}break;

}return p;

}

此**在這種地圖上是無錯誤的.

但在這時有乙個問題,即人物移動函式的**重複性很高,很臃腫而且不清晰,我便考慮在函式內部加入乙個函式.

**就變成了

#include #include #include //#include using namespace std;

void start_map(int a[7][7]);//將陣列對應的地圖顯示出來

int *man_move(int *p);

int *move_step(int pointer_move_number,int* p);

int main()

; a[1][3]=a[3][1]=a[5][3]=a[3][5]=3;

a[2][3]=a[3][2]=a[3][4]=a[4][3]=2;

a[3][3]=1;

int *p=&a[3][3];//指向操作物件

p=&a[3][3];

while(1)

system("pause");

return 0;

}void start_map(int a[7][7]) //將陣列對應的地圖顯示出來

}cout<< endl;

}}int *man_move(int* p)

return p;

}int *move_step(int pointer_move_number,int* p)

else if(*(p+pointer_move_number)==2) //移動方向上第一格有箱子

}return p;

}

**簡潔了不少,而且更好修改了.

嘗試成功,現在考慮真正可用的程式

第三次嘗試:可用程式

原**在移動判定時存在不足,即move_step()函式在某些情況下是不可靠的

我需要乙個新的地圖進行下一步優化和遊戲性的提高

#include #include #include //#include int sign_win=0;

using namespace std;

void start_map(int a[15][15]);//將陣列對應的地圖顯示出來,地圖大小為15*15

int *man_move(int *p);

int *move_step(int pointer_move_number,int* p);

int main()

; /* a[1][3]=a[3][1]=a[5][3]=a[3][5]=3;

a[2][3]=a[3][2]=a[3][4]=a[4][3]=2;

a[3][3]=1;

int *p=&a[3][3];//指向操作物件

p=&a[3][3];

while(1)

*/a[1][1]=a[1][3]=a[2][1]=a[3][1]=a[3][3]=a[4][3]=a[5][3]=a[5][4]=a[5][5]=a[5][6]=a[6][2]=a[6][3]=a[6][4]=a[6][6]=a[6][7]=a[7][2]=a[7][3]=a[7][4]=4;

a[3][7]=a[4][7]=a[5][7]=3;

a[2][3]=a[2][2]=a[3][2]=2;

a[1][2]=1;

int *p=&a[3][3];//指向操作物件

p=&a[1][2];

while(1)

system("pause");

return 0;

}void start_map(int a[15][15]) //將陣列對應的地圖顯示出來

}cout<< endl;

}}int *man_move(int* p)

return p;

}int *move_step(int pointer_move_number,int* p)

else if(*(p+pointer_move_number)==2||*(p+pointer_move_number)==6) //移動方向上第一格有箱子

else

*(p1+pointer_move_number*2)=2; //箱子移一格

p=p1+pointer_move_number; //p指向現在的位置}}

return p;

}

推箱子的基本功能已經實現了,現在就要解決其他問題,介面太醜,操作是會伴隨頻閃

還有就是回到上一步的功能以及勝利條件,關卡的選擇等

這讓我有點蒙,我參考了

更蒙了0.0

推箱子遊戲

大一寒假 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...

推箱子遊戲 C語言

自己用c語言實現的推箱子的遊戲,在寫這個的期間瀏覽,檢視了許多的部落格和論壇。大一下學期寫的 這個遊戲我用的是vs2010和easyx圖形庫寫的。如有錯誤,望指正。在最後。遊戲的效果圖 遊戲介面 通關介面 這個3.0是因為,有過2次大的修改。還有這個時間的數字是不動的,這裡 當時 不太懂怎麼弄倒計時...