Python版本:3.6.4
相關模塊:
pygame模塊;
以及一些Python自帶的模塊。
環境搭建
安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。
原理簡介
游戲簡介:經典的推箱子是一個來自日本的古老游戲,目的是在訓練你的邏輯思考能力。在一個狹小的倉庫中,要求把木箱放到指定的位置,稍不小心就會出現箱子無法移動或者通道被堵住的情況,所以需要巧妙的利用有限的空間和通道,合理安排移動的次序和位置,才能順利的完成任務。
控制方式:↑↓←→鍵控制人物行動,r鍵重新開始本關。

該圖片來源:網頁游戲網http://www.hp91.cn/網頁游戲大全
逐步實現:
Step1:定義游戲精靈類
由於游戲涉及到碰撞檢測,所以我們先來定義一些游戲精靈類,包括推箱子的人、箱子、牆和目標位置指示標記。
首先我們來定義一下推箱子的人這個精靈類:

他需要擁有可以移動的能力,這里設置了一個模擬移動的選項,是為了通過模擬移動判斷他是否可以向上/下/左/右移動。
因為地圖上的其他東西性質類似,所以我們把它們定義成同一個精靈類(T_T其實性質都類似,但是感覺還是有必要區分一下人和物的):

其中箱子需要擁有可以移動的能力,其他則不能移動。模擬移動選項的功能與之前類似。
Step2:定義游戲地圖類
這里我們定義一個游戲地圖類,目的是用該類來創建任意的游戲地圖。因此,該類應當可以增加並保存游戲元素(人、牆、箱子等),並在屏幕上把地圖畫出來。同時也應當自帶一個方法來判斷此地圖上的箱子是否都已經送到了指定位置(這樣子方便切換關卡):

Step3:定義游戲界面類
游戲界面類負責解析levels文件夾下的游戲各關卡的地圖文件,並利用游戲地圖類創建並顯示游戲地圖:

同時因為游戲地圖面積>游戲窗口界面, 所以該類需要增加根據人物位置滾動游戲地圖的功能:

Step4:定義某關的游戲主循環
主循環主要負責實例化游戲界面類,並根據按鍵檢測的結果對游戲界面類進行一些操作:

其中人物移動的邏輯為:
人移動的目標位置為空白格,則人移動;若撞到箱子,箱子可以和人方向一樣移動一格,則人和箱子均移動;其他情況人和箱子均無法移動。
Step5:定義游戲開始、切換和結束界面
做的比較簡陋,直接給源碼吧。
開始界面:

切換界面:

結束界面:

Step6:實現游戲主函數
把所有界面串起來就好啦:

