C/C++編程日記:簡單的C語言實現推箱子小遊戲

C語言,做爲大多數人的第一門編程語言,重要性不言而喻,不少編程習慣,邏輯方式在此時就已經造成了。這個是C語言寫的推箱子小遊戲,可使邏輯能力獲得提高。編程

 


 

要寫這個小遊戲,咱們面臨的問題有如下幾個。數組

一、遊戲地圖怎麼保存?框架

二、遊戲怎麼運行?編程語言

三、遊戲地圖怎樣在位置固定的狀況下不斷變化?函數

四、小人的移動邏輯怎麼寫?學習

五、遊戲怎麼結束?spa

一、遊戲地圖怎麼保存?3d

C語言中只有基本的數據類型,遊戲地圖是二維的平面結構,很容易想到使用二維數組來保存遊戲地圖。視頻

 


 

二、遊戲怎麼運行?blog

由於推箱子游戲在遊戲結束以前要不斷接受用戶的輸入,因此咱們能夠設置一個標誌來判斷遊戲是否結束,把這個標誌設置爲一個 while 循環的條件。

在每次循環中,都要接收用戶的輸入,根據用戶輸入的值,

來進行下一步的操做,在遊戲中就是小人的移動方向,上下左右,這裏咱們能夠用一個 switch 語句判斷。每一次循環,對應一次用戶輸入。

三、遊戲地圖怎樣在位置固定的狀況下不斷變化?

在每次循環中,首先要把當前的地圖顯示出來,便於用戶下一次的移動輸入。咱們將遊戲地圖設置爲一個全局變量,這樣在小人移動後,地圖上的字符改變就是永久的,而後打印局部改變的新地圖。

這樣程序不斷循環,一遍遍的打印地圖,遊戲地圖上的字符是能夠不斷改變了,可是地圖的位置並不能固定下來。若是咱們能刷新界面上的值,不就能夠在位置固定的狀況下不斷變化了。

刷新本質就是除舊迎新,即把原來的除去,迎來新的。在程序中,咱們能夠把原來的界面清除,再把新的界面顯示在原來的位置。

C語言中能夠用system("cls")函數來清除控制檯的內容,而後咱們再把新的地圖內容顯示出來。

小人的移動邏輯屬於具體的程序實現,咱們放到下面再說,先來講說程序怎麼結束。

四、遊戲怎麼結束?

前面咱們說設置一個標誌來判斷遊戲是否結束,可是遊戲何時結束呢?推箱子的遊戲目標是將每一個箱子推到目標位置,這是一種遊戲結束的狀況,因爲每次循環都要判斷,能夠將其寫成一個函數。

另外,若是用戶不想玩了想退出,這也是一種遊戲結束的狀況,這裏我只考慮了這兩種狀況,至於其餘狀況,讀者可自行考慮。

到目前位置咱們能夠寫出程序大體的框架了,外部一個大循環,每次循環都是先刷新界面,接收用戶輸入,處理用戶的輸入,判斷遊戲是否結束。

 


 

五、小人的移動邏輯怎麼寫?

在上面的程序截圖中,能夠看到我把小人的上下左右移動分別寫到了四個函數中,分別是 

MoveToUp()、MoveToDown()、MoveToLeft()、MoveToRight()。以 MoveToUp() 函數爲例,咱們來分析小人移動的邏輯。

理論上,小人是能夠上下左右的移動的,可是,因爲有地圖的限制,小人不能穿牆的,只能在容許的道路上移動,好比下面這種狀況,小人想向上移動,確定是不容許的。

因此咱們要對小人理論上能夠移動到的那格(下一位置)進行判斷,若是不是限制物(箱子和箱子要移動到的位置下面在詳細說),小人就能夠移動,若是有限制物就不能移動。

因此咱們須要記錄一個座標點的值,這裏「下一位置」的參照物能夠選取小人當前的位置,遊戲開始時,把小人的開始位置做爲當前位置。

小人向上移動,「下一位置」的橫座標就是小人當前位置的橫座標減一,縱座標就是小人當前位置的縱座標。

而後咱們就能夠根據「下一位置」的橫縱座標找到具體的字符值,若是是空的,就能夠移動,若是是箱子要移動的目標位置,

小人也能夠移動,還有一種狀況是「下一位置」是箱子,咱們還要考慮箱子的「下一位置」,箱子的下一位置也很好獲得。

由於小人和箱子是在一條線上移動的,因此在小人向上移動時,箱子的「下一位置」的橫座標就是小人「下一位置」的橫座標減一,二者的縱座標相同。

一樣咱們也要對箱子「下一位置」的字符值進行判斷,若是字符值是空格和箱子能夠移動的位置,就是能夠移動的。小人向上移動的代碼以下:

 


 

小人向下、向左、向右移動的代碼也是相似的,無非就是把小人移動的下一座標改一改,向下移動,

「下一位置」的橫座標就是小人的橫座標位置加一,二者縱座標相同。

 


 

另外若是你想更好的提高你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這裏或許能夠幫到你~

分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!

免費學習書籍:


 

免費學習資料:

相關文章
相關標籤/搜索