21步學(xué)會(huì)寫《推箱子》
前言
? ? ? ?本期視頻點(diǎn)贊目標(biāo)達(dá)成,想學(xué)習(xí)的同學(xué)可以跟著這篇文章進(jìn)行學(xué)習(xí)。
? ? ???如果光看文字出現(xiàn)各種報(bào)錯(cuò),可以進(jìn)知識(shí)星球(英雄算法聯(lián)盟),星球內(nèi)部提供星主的親自答疑,可以掃本文文末的免費(fèi)體驗(yàn)券。由于B站文章的代碼格式不支持,所以代碼的部分采用圖片的方式,這樣也可以避免大家復(fù)制粘貼,逼著大家自己寫,何嘗不是一種倒逼。
? ? ? ?B站不能上傳文件,所以源碼可以在公眾號(hào):夜深人靜寫算法,回復(fù) pushbox?直接獲取。才發(fā)現(xiàn)好久沒打開B站了。

第01 - 04步、安裝插件
? ? ? ?這部分內(nèi)容和游戲本身的代碼無關(guān),沒有這個(gè)插件我們也能寫出代碼,所以選學(xué),想要安裝的B友可以直接前往視頻觀看教程:Pygame 推箱子視頻教學(xué)。
第05步、圖片制作
? ? ? ?進(jìn)入 res 目錄,右鍵新建圖片文件,點(diǎn)擊編輯,設(shè)置圖片大小,先做一個(gè)空地,命名為 floor.png 像這樣;

再做墻壁,簡(jiǎn)單畫幾條線,命名為 wall.png 像這樣;

? ? ? ?然后是箱子,直接拖一個(gè)圓角矩形,放上一個(gè)開關(guān),就非常的逼真了,命名為 box.png 像這樣;

接著做一個(gè)框框,代表箱子的目的地,命名為 goal.png 像這樣;

最后當(dāng)然要制作我們的主角了,想必你也已經(jīng)猜到了,命名為 player.png。

? ? ? ? ?分步視頻:https://t.zsxq.com/12dPSFmwn
第06步、常量定義
? ? ? ?新建一個(gè) const.py 文件,用來存儲(chǔ)常量,定義游戲窗口寬高:

定義每個(gè)游戲內(nèi)精靈的尺寸,像這樣:

定義四個(gè)方向分別為:

定義游戲內(nèi)的精靈類型:

最后對(duì)于每個(gè)字符,映射到它應(yīng)有的資源上:

? ? ? ? ?分步視頻:https://t.zsxq.com/11fEK7Idj
第07步、地圖制作
? ? ? ?新建一個(gè)文件夾data,再建一個(gè)文件夾level,新建一個(gè)文件 1.x 作為第一關(guān),第一行代表幾行幾列,然后用字符,來代替地圖元素像這樣:

? ? ?2.x 作為 第二關(guān);3.x 作為第三關(guān);4.x 作為第四關(guān),想做幾關(guān),就做幾關(guān),一氣呵成,沒有技巧,全是感情,唯手熟爾,你也可以。
? ? ? ? ?分步視頻:https://t.zsxq.com/11XkkYuAK
第08步、地圖加載
? ? ? 在 level.py 中,新建一個(gè) Level 的類,然后定義一個(gè) map 代表地圖的二維數(shù)組,把一些動(dòng)態(tài)的物體像 目的地、箱子、玩家,存儲(chǔ)在這個(gè) dynamicObj 中,并且存儲(chǔ)地圖的行數(shù) row 和列數(shù) col,調(diào)用 LoadLevel 接口來實(shí)現(xiàn)地圖的加載。

? ? ? 然后實(shí)現(xiàn)這個(gè) LoadLevel 函數(shù),先清空地圖、目的地、箱子、玩家 的信息,然后根據(jù) level 來讀取對(duì)應(yīng)的關(guān)卡文件,第一行讀取行數(shù)和列數(shù),從第二行開始,遍歷每一行的字符,如果是箱子,則當(dāng)前位置是 FLOOR,并且把坐標(biāo)放進(jìn)箱子列表中;如果是玩家,則當(dāng)前位置也是 FLOOR,并且把坐標(biāo)放進(jìn)玩家列表中;如果是目的地,則當(dāng)前位置也是 FLOOR,并且把坐標(biāo)放進(jìn)目的地列表中;否則,直接把這個(gè)字符塞到map的當(dāng)前行,行數(shù)加一。


? ? ? ? ?分步視頻:https://t.zsxq.com/11uhIVlXG
第09步、游戲精靈


? ? ? ? ?分步視頻:https://t.zsxq.com/11vg2W3fJ
第10步、地圖渲染



? ? ? ? ?分步視頻:https://t.zsxq.com/11Lqb9xrJ
第11步、動(dòng)態(tài)物渲染


? ? ? ? ?分步視頻:https://t.zsxq.com/11EdXlV5a
第12步、時(shí)間函數(shù)

? ? ? ? ?分步視頻:https://t.zsxq.com/11CV14t5S
第13步、玩家移動(dòng)

? ? ? ? ?分步視頻:https://t.zsxq.com/118HdIXIO
第14步、碰撞判定


? ? ? ? ?分步視頻:https://t.zsxq.com/11JaAFVoq
第15步、箱子判定

? ? ? ? ?分步視頻:https://t.zsxq.com/11MK8N1Up
第16步、推箱子

? ? ? ? ?分步視頻:https://t.zsxq.com/11PjNVnB3
第17步、結(jié)束判定

? ? ? ? ?分步視頻:https://t.zsxq.com/11A38I88z
第18步、重置游戲

? ? ? ? ?分步視頻:https://t.zsxq.com/11rxSa5NT
第19步、路徑記錄



? ? ? ? ?分步視頻:https://t.zsxq.com/11cZLZt9F
第20步、自動(dòng)推箱子


? ? ? ? ?分步視頻:https://t.zsxq.com/11jet1q8v
第22步、勝負(fù)判定

? ? ? ? ?分步視頻:https://t.zsxq.com/11B0cNLE3
英雄算法聯(lián)盟免費(fèi)體驗(yàn)券,免費(fèi)掃碼,可查看分步視頻:
