程序員帶你回味童年,一起用C語言做一個“推箱子”玩!【文末源碼】

      網(wǎng)友投稿 819 2025-04-02

      這篇文章是用C語言做了一個推箱子小游戲,實現(xiàn)起來比較簡單,和大家一起回味一下童年捧著按鍵機玩推箱子的日子!文末附帶萬字源碼!


      目錄

      一、寫在前面

      程序員帶你回味童年,一起用C語言做一個“推箱子”玩!【文末源碼】

      二、設(shè)計思路

      1.主界面函數(shù)介紹

      2.選擇界面函數(shù)

      3.選擇函數(shù)

      4.游戲步驟重播函數(shù)

      5.鍵盤鍵位設(shè)置函數(shù)

      6.游戲界面函數(shù)

      7.向左函數(shù)

      8.向右函數(shù)

      9.向下函數(shù)

      10.向上函數(shù)

      11.通關(guān)函數(shù)

      12.最佳記錄函數(shù)

      13.入隊列函數(shù)

      14.出隊列函數(shù)

      三、最后總結(jié)

      Hello,你好呀,我是灰小猿!一個超會寫bug的程序猿!

      還記得我們曾經(jīng)的那個推箱子嗎,記得小時候家里只有按鍵的諾基亞的時候,推箱子、貪吃蛇都是我天天最經(jīng)常玩的游戲,然后最近正好有小伙伴問我有沒有做過相關(guān)的開發(fā),所以今天在這里跟大家一個用C語言實現(xiàn)的簡單推箱子的小游戲,帶著大家一起回味一下童年呀!【,上車坐好!】

      一、寫在前面

      推箱子游戲程序的設(shè)計為分別設(shè)置各類型函數(shù)類,設(shè)定推箱子房子布局的數(shù)據(jù)結(jié)構(gòu)二維數(shù)組,以及記錄最短步驟數(shù)目以及最好成績的二維數(shù)組,通過函數(shù)對房子進行布局,定義數(shù)據(jù)結(jié)構(gòu)隊列類,并設(shè)置公有成員函數(shù)和私有成員函數(shù)。

      與此同時,我運用C++中的派生類相關(guān)知識設(shè)定相同類名以及不同類名的對象,用于構(gòu)造推箱子游戲的分布函數(shù),設(shè)定數(shù)據(jù)結(jié)構(gòu)出隊和入隊函數(shù),同時設(shè)計以箱子為對象,依據(jù)于人的橫縱坐標位置的函數(shù),設(shè)計基于游戲數(shù)據(jù)界面的,開始界面通關(guān)提示、游戲時選項提示、玩游戲時界面顯示地圖左右上下方向通關(guān)提示以及排行榜等。

      同時,根據(jù)游戲要求設(shè)定輸出游戲主界面和游戲關(guān)卡選擇界面,用于我們的操作,構(gòu)造將游戲步驟進行重新播放的函數(shù),根據(jù)以上以及各類型詳細函數(shù)設(shè)定主函數(shù)并進行操作運行游戲,以此來達到使游戲平穩(wěn)運行的要求。除上述內(nèi)容之外,在制作游戲時,我還運用了多元分組的構(gòu)造模式,使得程序內(nèi)容簡單易懂,任何有程序基礎(chǔ)的人都可以進行交流學習。接下來我跟大家分享一下主要的模塊設(shè)計,小伙伴們別忘了三連支持,學習呀!

      二、設(shè)計思路

      在程序中我利用類與對象完成了對游戲地圖的設(shè)計,以及對于關(guān)卡的選擇等眾多功能。并且利用數(shù)據(jù)結(jié)構(gòu)中的理念,實現(xiàn)了對人與箱子的定位和時間步數(shù)等功能的實現(xiàn)。總體來說,該程序涵蓋了我們所學習的相關(guān)知識,雖然游戲有點簡單,但是其中內(nèi)容卻涉獵甚廣,

      推箱子游戲的設(shè)計目的,在于合理有效運用數(shù)據(jù)結(jié)構(gòu)棧與隊列,以及C++中的類與對象以及派生類的相關(guān)知識,將游戲中的各個環(huán)節(jié)拆分開來,運用派生類將各個環(huán)節(jié)串聯(lián)起來,達到實現(xiàn)程序穩(wěn)定運行的目的。以下是總體設(shè)計圖:

      1.主界面函數(shù)介紹

      在box下的begin派生類中,我們的主要功能是輸出游戲界面,在該函數(shù)中,我們對游戲內(nèi)部功能進行了詳細介紹,其中包括游戲玩法和操作指令,與此同時,對游戲主界面進行了詳細優(yōu)化,在該函數(shù)中,在游戲功能的介紹上,我們分別使用星星,圓圈和特殊符號代表箱子,目標位置和推箱子的小人物,我們調(diào)用進行觀察,選擇的函數(shù)來完成游戲,玩家對游戲關(guān)卡的選擇,并且在操作指令上對進行撤銷選擇和退出游戲進行了詳細介紹,方便玩家更好的游戲體驗,

      2.選擇界面函數(shù)

      在游戲選擇界面中,我們采用雙五角星的界面圖形動畫,在中間設(shè)定關(guān)卡選項,選擇選項中有1到4個關(guān)卡可供選擇,在用戶進行關(guān)卡選擇以后,可將選擇關(guān)卡的序號進行返回到函數(shù)之中,函數(shù)對玩家選擇的序號進行識別,一次對1到4個關(guān)卡進行選擇判斷,然后在程序中跳轉(zhuǎn)到相應的函數(shù)界面,供玩家進行游戲,倘若玩家輸入的序號不在1到4之間,則系統(tǒng)會自動提示輸入錯誤,請重新輸入的字樣。

      3.選擇函數(shù)

      在派生類選擇函數(shù)中,我們設(shè)定了重播,主界面,最好記錄,退出四個選項,當玩家游戲無法通關(guān)時,可按鍵盤上的c鍵來跳轉(zhuǎn)出選擇界面進行玩家的選擇,和選擇關(guān)卡的設(shè)定一樣,我們在玩家反饋過來的1到4四個序號進行判斷,然后依次作出重播放,返回主界面,跳轉(zhuǎn)出最好記錄,退出系統(tǒng)四個功能。

      4.游戲步驟重播函數(shù)

      在游戲玩一下通關(guān)以后,我們會設(shè)定一個游戲步驟重播函數(shù),在該函數(shù)執(zhí)行以后,玩家可以觀看由程序?qū)ν婕也襟E進行記錄而設(shè)定好的游戲步驟重播,在該函數(shù)中,我們主要是依據(jù)玩家進行上下左右方向鍵操作,對其方向的使用進行存儲到數(shù)組之中,當玩家選擇進行游戲步驟重播時,我們可將該二維數(shù)組中的數(shù)據(jù)釋放出來,達到將游戲步驟進行重新播放的效果。

      5.鍵盤鍵位設(shè)置函數(shù)

      在游戲開始以后,有玩家可通過上下左右方向鍵來進行游戲中小人的控制操作,而游戲中小人控制操作的方向鍵,我們所依據(jù)的是Ascii碼鍵盤鍵位,其中左鍵為75號,右鍵為77號上鍵為72號,下鍵為80號,在開始游戲以后,玩家對按鍵進行操作,與此同時,我們在內(nèi)部函數(shù)中會對75,77,72,84個數(shù)進行記憶,當返回值為四個數(shù)中的其中之一時,我們會將該記錄存入函數(shù)之中,并且在游戲步驟上加1,其中我們還設(shè)定鍵盤上的c鍵為26,當選擇c鍵時可進行重新選擇操作,在該重新選擇以后,我們設(shè)置返回主界面和退出游戲兩個選項,可供玩家進行選擇。

      6.游戲界面函數(shù)

      在游戲界面函數(shù)中,我們設(shè)定了游戲的各種形狀來代表我們游戲內(nèi)部的不同內(nèi)容,分別以‘■’代表墻體,‘○’代表目標位置,‘★’代表箱子,‘♀’代表人,和‘㊣’代表箱子在目標位置上的效果展示,與此同時,在界面的最下邊,我們增加有撤銷(Ctrl+z),選擇(c)和游戲步數(shù)記錄選項,可實時記錄玩家進行的游戲步驟,效果圖如下:

      7.向左函數(shù)

      在游戲按鍵中的向左函數(shù)中,我們有進行多項判斷,我們所依據(jù)的是小人向左位置的地址進行返回值,如果我們檢測到該數(shù)組內(nèi)部的值為零時進行判斷,我們將記錄小人左側(cè)函數(shù)的數(shù)組賦值給4,然后進行判斷,同時,如果該數(shù)組上元數(shù)等于2,我們要使人員移動到目標位置上,同時恢復目標位置的函數(shù),使其恢復到原來位置,同時對該位置進行標記,記錄人員經(jīng)過該位置,方便我們進行重播函數(shù)的操作,

      如果說我們檢測到該函數(shù)內(nèi)的值為零,或者是3的話,我們可以執(zhí)行將箱子推到空白位置上的函數(shù)操作,如果該函數(shù)為5或者為1的話,我們要執(zhí)行的是將箱子從目標位置上推出的函數(shù)操作,如果該函數(shù)值為3且為2,我們要執(zhí)行的是將箱子推到目標位置上的函數(shù)操作,且人在目標位置上用來抵消仍不動的情況。

      8.向右函數(shù)

      我們在執(zhí)行向右函數(shù)時,所依據(jù)的原理和向左函數(shù)類似,我們對右鍵的地址來進行判斷且返回值,如果說函數(shù)值等于零,我們則進行以下操作,如果說返回值等于2,我們要將人員移到目標位置之上,同時恢復目標位置及原來的狀態(tài)標志,該位置記錄仍在該位置上的地址,方便我們進行重播操作,否則如果說該函數(shù)值為3且為0的話,我們將箱子推到空白位置上,如果按函數(shù)值為5或者不等于1的話,我們要將箱子從目標位置上推出,移動到下一個目標位置,且還是目標位置,如果該函數(shù)值為3且為2的話,要將箱子推到目標位置上。

      9.向下函數(shù)

      在向下函數(shù)中,我們對向下按鍵的地址進行返回,并且讀取判斷,如果說數(shù)組記錄中為2,要將人要移到目標位置上,同時恢復目標位置的原來狀態(tài)標志,該位置記錄仍在目標位置上的地址,方便我們進行重播操作,如果該數(shù)組的值為3且等于0,將箱子推到空白位置之上,將箱子從標位置上推出,如果下一個位置還是目標位置,我們將該值為5或4,如果下一個位置是空白,之后我們將該數(shù)組值賦為3且為4,如果該數(shù)組的值為3且為2,我們要將箱子推到目標位置上,并且如果說該數(shù)組值為5的話,將箱子推到目標位置之上,仍在目標位置上,否則如果人不在目標位置之上的話,我們將該函數(shù)值賦值為0,同時抵消人不動的情況。

      10.向上函數(shù)

      在執(zhí)行向上函數(shù)時,我們對應函數(shù)值返回的地址值進行判斷,如果該數(shù)組值為0,則我們將該數(shù)組值賦值為4,否則如果說該函數(shù)值為2,我們要說明人在目標位置之上,同時恢復目標位置的原來狀態(tài)標志,該位置記錄人在目標位置上的地址,方便進行重播操作,如果該數(shù)組位置為3且為0,我們將箱子推到空白位置之上,否則如果數(shù)組值為5或不等于1,要將箱子從目標位置上推出,如果下一個位置還是目標位置,我們則將輸出值賦值為5,將另一個數(shù)組賦值為4,如果該數(shù)組賦值為3,且另一個數(shù)組數(shù)值為2,要將箱子推到目標位置上,并且將該值賦值為5,將箱子在目標位置上,仍在目標位置之上,若人在目標位直之上,則抵調(diào)整波動的情況。

      11.通關(guān)函數(shù)

      在玩家進行通關(guān)以后,我們系統(tǒng)會自動識別,并且返回一個通關(guān)界面,該界面我們會對玩家進行詢問的操作,該操作分為四步,繼續(xù),觀看通關(guān)視頻過程,查看最好記錄,退出界面,返回主界面,當玩家進行1到4的選擇以后,我們會返回相應的操作,并且可以在按任意鍵回到主頁面。

      12.最佳記錄函數(shù)

      在最佳記錄函數(shù)中,我們設(shè)定一個值來記錄游戲玩家的步數(shù),每當游戲玩家對按鍵進行操作一次,則該函數(shù)定義的變量則加一次,當我們讀取到該玩家通關(guān)以后,將應該數(shù)據(jù)進行保存,當我們檢測到有最好記錄時,即該步數(shù)為最小值時,確定為最佳記錄。

      13.入隊列函數(shù)

      在入隊列函數(shù)中,主要運用數(shù)據(jù)結(jié)構(gòu)的隊列知識,設(shè)置入隊列函數(shù),并定義指針變量指向頭結(jié)點,相關(guān)數(shù)值在入隊列以后,會自動的將數(shù)值賦值到隊頭位置,并且循環(huán)使searchp節(jié)點不為空,然后按照次序,將數(shù)值依次從隊頭向?qū)ξ策M行賦值運算,

      14.出隊列函數(shù)

      在出隊列操作中,主要依據(jù)隊列相關(guān)規(guī)則,設(shè)置指針變量,將隊頭元素賦值給指針,同時在進行if語句的判斷,將for循環(huán)之中如i的數(shù)值小于正方形的邊長,則使用隊頭接收searchp的數(shù)值,與此同時,讓count的數(shù)值不斷的進行減減操作,

      三、最后總結(jié)

      截止到這里,推箱子游戲的基本功能就完成了,最后把它總結(jié)一下,我們設(shè)計的推箱子小游戲,合理的使用了數(shù)據(jù)結(jié)構(gòu)中隊列的知識點,在使用這些知識點的時候,我們也對游戲過程進行了詳細的優(yōu)化,通過這次推箱子游戲的設(shè)計,大家應該能學到隊列在實際應用中的操作,同時這也很好地讓大家對數(shù)據(jù)結(jié)構(gòu)的知識點進行了一個鞏固和復習,也從中學到了游戲界面,布局的構(gòu)造思想和構(gòu)造方法,以及鍵盤與代碼之間的有效聯(lián)系,所以這個設(shè)計能夠?qū)W習到的東西還是很多的了。

      覺得有用的小伙伴可以關(guān)注喲!

      有問題的小伙伴可以在評論區(qū)留言提出!

      我是灰小猿!我們下期見!

      5G游戲 數(shù)據(jù)結(jié)構(gòu)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:使用ABAP編程實現(xiàn)對微軟Office Word文檔的操作
      下一篇:Nginx安裝手冊
      相關(guān)文章
      日韩精品亚洲人成在线观看| 亚洲中文久久精品无码ww16| 丁香五月亚洲综合深深爱| 亚洲人成未满十八禁网站| 亚洲国产av一区二区三区丶| 67pao强力打造67194在线午夜亚洲 | 久久亚洲AV成人无码国产最大| 亚洲国产美女在线观看| 国产亚洲精品岁国产微拍精品| 亚洲综合色视频在线观看| 亚洲一区二区三区免费| 国产精品亚洲综合专区片高清久久久| 亚洲熟妇无码AV| 亚洲免费观看网站| 亚洲午夜无码久久久久| 亚洲av日韩av永久无码电影| 亚洲中文字幕一二三四区| 中文字幕无码亚洲欧洲日韩| 亚洲中文字幕无码亚洲成A人片| 亚洲1234区乱码| 亚洲综合一区国产精品| 亚洲精品GV天堂无码男同| 亚洲av无码成人精品国产 | 亚洲综合色一区二区三区| 国产精品高清视亚洲一区二区| 亚洲娇小性xxxx| 亚洲综合久久精品无码色欲| 精品国产成人亚洲午夜福利| 亚洲日韩AV无码一区二区三区人| 久久亚洲色WWW成人欧美| 日韩精品成人亚洲专区| 区三区激情福利综合中文字幕在线一区亚洲视频1| 亚洲精品麻豆av| 久久亚洲精品中文字幕三区| 久久青草亚洲AV无码麻豆| 亚洲一区二区在线视频| 91亚洲性爱在线视频| 亚洲中文无码永久免费| 欧美亚洲精品一区二区| 亚洲一本大道无码av天堂| 亚洲国产精品久久久天堂|