C語言實現推箱子遊戲

2021-10-25 15:43:05 字數 3949 閱讀 3154

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