C語言,作為大多數人的第一門編程語言,重要性不言而喻,很多編程習慣,邏輯方式在此時就已經形成了,這個是C語言寫的推箱子小游戲,可以使邏輯能力得到提升,

要寫這個小游戲,我們面臨的問題有以下幾個,
1、游戲地圖怎么保存?
2、游戲怎么運行?
3、游戲地圖怎樣在位置固定的情況下不斷變化?
4、小人的移動邏輯怎么寫?
5、游戲怎么結束?
1、游戲地圖怎么保存?
C語言中只有基本的資料型別,游戲地圖是二維的平面結構,很容易想到使用二維陣列來保存游戲地圖,

2、游戲怎么運行?
因為推箱子游戲在游戲結束之前要不斷接受用戶的輸入,所以我們可以設定一個標志來判斷游戲是否結束,把這個標志設定為一個 while 回圈的條件,
在每次回圈中,都要接收用戶的輸入,根據用戶輸入的值,
來進行下一步的操作,在游戲中就是小人的移動方向,上下左右,這里我們可以用一個 switch 陳述句判斷,每一次回圈,對應一次用戶輸入,
3、游戲地圖怎樣在位置固定的情況下不斷變化?
在每次回圈中,首先要把當前的地圖顯示出來,便于用戶下一次的移動輸入,我們將游戲地圖設定為一個全域變數,這樣在小人移動后,地圖上的字符改變就是永久的,然后列印區域改變的新地圖,
這樣程式不斷回圈,一遍遍的列印地圖,游戲地圖上的字符是可以不斷改變了,但是地圖的位置并不能固定下來,如果我們能重繪界面上的值,不就可以在位置固定的情況下不斷變化了,
重繪本質就是除舊迎新,即把原來的除去,迎來新的,在程式中,我們可以把原來的界面清除,再把新的界面顯示在原來的位置,
C語言中可以用system("cls")函式來清除控制臺的內容,然后我們再把新的地圖內容顯示出來,
小人的移動邏輯屬于具體的程式實作,我們放到下面再說,先來說說程式怎么結束,
4、游戲怎么結束?
前面我們說設定一個標志來判斷游戲是否結束,但是游戲什么時候結束呢?推箱子的游戲目標是將每個箱子推到目標位置,這是一種游戲結束的情況,由于每次回圈都要判斷,可以將其寫成一個函式,
另外,如果用戶不想玩了想退出,這也是一種游戲結束的情況,這里我只考慮了這兩種情況,至于其他情況,讀者可自行考慮,
到目前位置我們可以寫出程式大致的框架了,外部一個大回圈,每次回圈都是先重繪界面,接收用戶輸入,處理用戶的輸入,判斷游戲是否結束,

5、小人的移動邏輯怎么寫?
在上面的程式截圖中,可以看到我把小人的上下左右移動分別寫到了四個函式中,分別是
MoveToUp()、MoveToDown()、MoveToLeft()、MoveToRight(),以 MoveToUp() 函式為例,我們來分析小人移動的邏輯,
理論上,小人是可以上下左右的移動的,但是,由于有地圖的限制,小人不能穿墻的,只能在允許的道路上移動,比如下面這種情況,小人想向上移動,肯定是不允許的,
所以我們要對小人理論上可以移動到的那格(下一位置)進行判斷,如果不是限制物(箱子和箱子要移動到的位置下面在詳細說),小人就可以移動,如果有限制物就不能移動,
所以我們需要記錄一個坐標點的值,這里“下一位置”的參照物可以選取小人當前的位置,游戲開始時,把小人的開始位置作為當前位置,
小人向上移動,“下一位置”的橫坐標就是小人當前位置的橫坐標減一,縱坐標就是小人當前位置的縱坐標,
然后我們就可以根據“下一位置”的橫縱坐標找到具體的字符值,如果是空的,就可以移動,如果是箱子要移動的目標位置,
小人也可以移動,還有一種情況是“下一位置”是箱子,我們還要考慮箱子的“下一位置”,箱子的下一位置也很好得到,
因為小人和箱子是在一條線上移動的,所以在小人向上移動時,箱子的“下一位置”的橫坐標就是小人“下一位置”的橫坐標減一,兩者的縱坐標相同,
同樣我們也要對箱子“下一位置”的字符值進行判斷,如果字符值是空格和箱子可以移動的位置,就是可以移動的,小人向上移動的代碼如下:

小人向下、向左、向右移動的代碼也是類似的,無非就是把小人移動的下一坐標改一改,向下移動,
“下一位置”的橫坐標就是小人的橫坐標位置加一,兩者縱坐標相同,

另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
免費學習書籍:

免費學習資料:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/261232.html
標籤:C
上一篇:教育部將編程教育納入中小學相關課程,編程正成為全球語言!
下一篇:go好用的型別轉換第三方組件
