C C 程式設計日記 簡單的C語言實現推箱子小遊戲

2021-10-19 14:20:07 字數 2544 閱讀 6952

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++程式設計!彎道超車,快人一步!筆者這裡或許可以幫到你~

免費學習書籍:

免費學習資料:

C語言實現推箱子

二 實現 在網上學習並完成這個推箱子的小遊戲,記錄下來 1 easyx圖形庫工具 2 vs2013及以上都可以 include include include include resource.h include pragma comment lib,winmm.lib int arr 10 10 ...

socket簡單程式設計 C語言實現

include include include 緩衝區溢位會怎麼樣?intmain 判斷請求載入的版本號的是否符合要求if lobyte wsadata.wversion 2 hibyte wsadata.wversion 2 設定伺服器位址 server add.sin family af ine...

推箱子遊戲使用C語言實現的簡單例項

1.遊戲實現步驟 1 遊戲一開始,就顯示遊戲地圖。while 1 2.根據步驟 搭建專案框架 include include include 行和列,該遊戲一共有10行 10列。define row 10 define col 11 初始化乙個地圖 char map row col 列印地圖 voi...