準備: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次大的修改。還有這個時間的數字是不動的,這裡 當時 不太懂怎麼弄倒計時...