hello,程式設計小白的我又回來了,繼上次的c語言迷宮文章,我沉寂了兩天,這次帶來的是用c語言實現小時候的推箱子遊戲,中間挺難的,條件寫了刪,刪了寫,沒頭緒的時候都想放棄了,但我堅信寫的出迷宮的我也能寫出這個推箱子,哈哈,終於功夫不負有心人,在又乙個早上後,終於搞定了!
下面我們來聊聊這個玩法簡單的推箱子。
推箱子地圖的列印
箱子,人,終點的座標顯示
使箱子和人一起移動
當箱子到達終點的時候終止迴圈
我們用#代表牆,@代表人,o代表箱子
地圖**如下:
char a[8]
[11]=
;
先實現乙個方向的移動,,以向上移動為例,這裡我們就要知道,一共有三種情況
第一種情況:人上方有空
# #
# ##@#
針對第一種情況我們可以知道此時按』w』人應該往上移一位,這裡有乙個if條件
if
(a[x-1]
[y]==
' ')
第二種情況:人上方為箱子
# #
#o##@#
針對第二種情況我們可以知道此時按』w』箱子和人應該一起往上移動一位,這裡有乙個if條件
if
(a[x-1]
[y]==
'o'&&a[x-2]
[y]!=
'#')
應當注意的是箱子往上移動一位後,箱子的縱座標應該減一
第三種情況:人上方為箱子,箱子上方為牆
###
#o##@#
針對第三種情況我們可以知道此時按』w』人和箱子都不會移動了,就要有乙個if條件,遇到這種情況直接逃過
if
(a[x-1]
[y]==
'o'&&a[x-2]
[y]==
'#')
在一次往上移動後,人的縱座標一定會減一(當然是不碰牆的情況下)
接下來,將這一次往上移動的**組合起來
完整**如下:
if
(c==
'w')
else
if(a[x-1]
[y]==
'o'&&a[x-2]
[y]!=
'#')
else
if(a[x-1]
[y]==
' ')
x--;}
}
好了,一次往上移動的**已經被我們寫出來了,其他三種方向的移動也一樣,只需要注意座標表示,這裡就不列出了
當箱子歸位後,總不能讓人物一直在裡面上下左右移動吧,就要有乙個終止迴圈條件,這裡我們用while迴圈,以便於我們閱讀
這裡有個點需要注意,不能用』&&』,應該用』||』,因為是上下左右移動,每次只有乙個座標移動,另乙個座標不動
**如下:
while
(箱子座標不等於終點座標)
例本題中的終止條件:m1!=1||n1!=4||m2!=3||n2!=7||m3!=4||n3!=2||m4!=6||n4!=5
其他的和上一文迷宮的一樣,每次移動需要清屏再列印,最終獲勝需要清屏列印"you win."
組合巢狀,得到最終的完整的程式
最終**如下:
#include
#include
#include
int main ();
int m1=
3,m2=
3,m3=
4,m4=5,
//定義箱子的座標
n1=4,n2=
6,n3=
4,n4=5;
int x=
4,y=
5,i;
//定義人的座標
char c;
//定義字元,儲存從鍵盤獲取的字元
for(i=
0;i<=
7;i++
)//列印初步地圖
while
(m1!=
1||n1!=
4||m2!=
3||n2!=
7||m3!=
4||n3!=
2||m4!=
6||n4!=5)
//迴圈終止條件
else
if(a[x-1]
[y]==
'o'&&a[x-2]
[y]!=
'#')
//如果箱子可以推動
else
if(a[x-1]
[y]==
' ')
//如果座標a[x-1][y]為' '
x--;//使人的縱座標減一 }}
if(c==
's')
//當按下's'時
else
if(a[x+1]
[y]==
'o'&&a[x+2]
[y]!=
'#')
//如果箱子可以推動
else
if(a[x+1]
[y]==
' ')
//如果座標a[x+1][y]為' '
x++;//使人的縱座標加一 }}
if(c==
'a')
//當按下'a'時
else
if(a[x]
[y-1]==
'o'&&a[x]
[y-2]!=
'#')
//如果箱子可以推動
else
if(a[x]
[y-1]==
' ')
//如果座標a[x][y-1]為' '
y--;//使人的橫座標減一 }}
if(c==
'd')
//當按下'd'時
else
if(a[x]
[y+1]==
'o'&&a[x]
[y+2]!=
'#')
//如果箱子可以推動
else
if(a[x]
[y+1]==
' ')
//如果座標a[x][y+1]為' '
y++;//使人的橫座標加一 }}
system
("cls");
//清屏
for(i=
0;i<=
7;i++
)//再列印移動後的地圖
}//以下為修飾部分
system
("cls");
//清屏
sleep
(0.5
*1000);
printf (
"\nyou win.\n\n");
//列印結果
sleep(3
*1000);
system
("pause");
return0;
}
如何用結構體表示座標
如何在主函式外將移動**寫成乙個函式,在需要時再呼叫它
如何解決移動後列印時的屏閃問題(也許不能解決)
以上便是今天分享的推箱子小遊戲**,也是本人第乙個百行**,(假裝不知道括號可以寫到上一行,嘿嘿)
寫這個程式的兩天又是成長的兩天,哈哈,身體有點累,但內心無比開心
最後,在這裡提前助各位看官新年快樂,新的一年身體健康,萬事如意(吧啦吧啦)
C語言實現推箱子小遊戲
include include include define n 1000 r目的地 o箱子 i人 x牆 路 空格 w上 a左 d右 s下 void menu int level1 int level2 void swap char char int opera char p,int ren,int...
C語言實現推箱子
二 實現 在網上學習並完成這個推箱子的小遊戲,記錄下來 1 easyx圖形庫工具 2 vs2013及以上都可以 include include include include resource.h include pragma comment lib,winmm.lib int arr 10 10 ...
推箱子遊戲 C語言
自己用c語言實現的推箱子的遊戲,在寫這個的期間瀏覽,檢視了許多的部落格和論壇。大一下學期寫的 這個遊戲我用的是vs2010和easyx圖形庫寫的。如有錯誤,望指正。在最後。遊戲的效果圖 遊戲介面 通關介面 這個3.0是因為,有過2次大的修改。還有這個時間的數字是不動的,這裡 當時 不太懂怎麼弄倒計時...