C語言實現推箱子游戲!全網最強解析,鄰居家的狗都能學會!


很早就想把自己做過的小游戲給大家分享一下(超簡單),但是一直沒有機會。

今天閑來無事,給大家伙們上道菜,代碼也不是非常難。希望看完這篇文章的小伙伴們,最后都能夠自己寫出來!

一、介紹

開發語言:C

也不說太多多余的話了,先看一下效果圖: 


 

 游戲中的人物、箱子、牆壁、球都是字符構成的。通過 W A S D 鍵移動,規則的話就是推箱子的規則。

 

二、代碼實現

關於代碼方面,我盡可能講的細致。希望大家可以理解~

(1)方法列表


 

這幾個方法都顧名思義,而且用意也非常明確,就initData可能不知道具體用處,但是沒有什么大問題。

唯一的問題就是,上左下右的順序可能會逼死幾個強迫症患者,哈哈。

(2)參數列表

為了方便,我把include和宏定義也放到參數列表當中


 

這里參數不多,其中橫為x,縱為y,另外這里再規定一下map的一些東西:


 

(3)函數具體分析

接下來我們一個一個函數來分析。

1、main函數


 

我大概說一下流程,循環外面沒有什么特別的。initData()只是一些簡單數據的初始化,不需要太在意。

循環中大致流程如下:

    ▷ 清除屏幕

    ▷ 繪制地圖

    ▷ 判斷游戲是否結束

    ▷ 對用戶按下的按鈕進行反饋

進入循環體,先清除屏幕,再繪制地圖,然后再判斷游戲是否結束。

可能大家對這個順序不是很理解,這里我們先不考慮判斷游戲結束的問題。

我們把清屏和繪制地圖合在一起,簡稱“重繪地圖”,而游戲結束的判斷先不考慮,那么流程就簡化為“重繪地圖 + 響應用戶的操作”。

簡單來說就是,用戶按一下按鈕,我改變一下地圖。

2、initData()


 

這個方法很簡單,就是遍歷地圖,然后初始化人的位置和箱子的個數。這里有一點要注意一下,就是到底內層循環是WIDTH還是外層循環是WIDTH。

如下圖,在遍歷過程中,外層循環控制行數,即HEIGHT。那么內層循環應該是WIDTH。


 

3、drawMap()


 

這里也非常簡單,變量map中的元素,然后通過switch判斷應該輸出的內容。然后內層循環每走完一次就換行。

4、moveUp()

這個函數內容有點多,想講一下大概思路:


 

具體代碼如下,解析我全寫在注釋里面:


這是一個方向的,其它方向要考慮的問題也和前面一樣,我也就不贅述了。

6、moveLeft()

這里大致都和上面一樣,就是在記錄左邊坐標時,應該應該是lx = x - 1。


7、moveDown()

這里在判斷邊界時,判斷的是 y == HEIGHT - 1。


8、moveRight()

這里也沒什么特別說的:


 

三、總結

現在再回顧開始的運行步驟

    ▷ 清除屏幕

    ▷ 繪制地圖

    ▷ 判斷游戲是否結束

    ▷ 對用戶按下的按鈕進行反饋

這里把判斷游戲是否結束放到了重繪圖像后面,因為在對用戶進行反饋的時候只是改變了map中的數據,

實際上最后一個箱子推到終點的圖像還沒有顯示出來,所以要在重繪之后再判斷是否結束游戲。

代碼有很多冗余的地方,一方面是想大家更好的理解,還有一方面出於懶。


 

最后,不管你是轉行也好,初學也罷,進階也可,如果你想學編程~

【值得關注】我的 C/C++編程學習交流俱樂部!【點擊進入】

問題答疑,學習交流,技術探討,還有超多編程資源大全,零基礎的視頻也超棒~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM