21步学会写《推箱子》
前言
本期视频点赞目标达成,想学习的同学可以跟着这篇文章进行学习。
如果光看文字出现各种报错,可以进知识星球(英雄算法联盟),星球内部提供星主的亲自答疑,可以扫本文文末的免费体验券。由于B站文章的代码格式不支持,所以代码的部分采用图片的方式,这样也可以避免大家复制粘贴,逼着大家自己写,何尝不是一种倒逼。
B站不能上传文件,所以源码可以在公众号:夜深人静写算法,回复 pushbox 直接获取。才发现好久没打开B站了。

第01 - 04步、安装插件
这部分内容和游戏本身的代码无关,没有这个插件我们也能写出代码,所以选学,想要安装的B友可以直接前往视频观看教程:Pygame 推箱子视频教学。
第05步、图片制作
进入 res 目录,右键新建图片文件,点击编辑,设置图片大小,先做一个空地,命名为 floor.png 像这样;

再做墙壁,简单画几条线,命名为 wall.png 像这样;

然后是箱子,直接拖一个圆角矩形,放上一个开关,就非常的逼真了,命名为 box.png 像这样;

接着做一个框框,代表箱子的目的地,命名为 goal.png 像这样;

最后当然要制作我们的主角了,想必你也已经猜到了,命名为 player.png。

分步视频:https://t.zsxq.com/12dPSFmwn
第06步、常量定义
新建一个 const.py 文件,用来存储常量,定义游戏窗口宽高:

定义每个游戏内精灵的尺寸,像这样:

定义四个方向分别为:

定义游戏内的精灵类型:

最后对于每个字符,映射到它应有的资源上:

分步视频:https://t.zsxq.com/11fEK7Idj
第07步、地图制作
新建一个文件夹data,再建一个文件夹level,新建一个文件 1.x 作为第一关,第一行代表几行几列,然后用字符,来代替地图元素像这样:

2.x 作为 第二关;3.x 作为第三关;4.x 作为第四关,想做几关,就做几关,一气呵成,没有技巧,全是感情,唯手熟尔,你也可以。
分步视频:https://t.zsxq.com/11XkkYuAK
第08步、地图加载
在 level.py 中,新建一个 Level 的类,然后定义一个 map 代表地图的二维数组,把一些动态的物体像 目的地、箱子、玩家,存储在这个 dynamicObj 中,并且存储地图的行数 row 和列数 col,调用 LoadLevel 接口来实现地图的加载。

然后实现这个 LoadLevel 函数,先清空地图、目的地、箱子、玩家 的信息,然后根据 level 来读取对应的关卡文件,第一行读取行数和列数,从第二行开始,遍历每一行的字符,如果是箱子,则当前位置是 FLOOR,并且把坐标放进箱子列表中;如果是玩家,则当前位置也是 FLOOR,并且把坐标放进玩家列表中;如果是目的地,则当前位置也是 FLOOR,并且把坐标放进目的地列表中;否则,直接把这个字符塞到map的当前行,行数加一。


分步视频:https://t.zsxq.com/11uhIVlXG
第09步、游戏精灵


分步视频:https://t.zsxq.com/11vg2W3fJ
第10步、地图渲染



分步视频:https://t.zsxq.com/11Lqb9xrJ
第11步、动态物渲染


分步视频:https://t.zsxq.com/11EdXlV5a
第12步、时间函数

分步视频:https://t.zsxq.com/11CV14t5S
第13步、玩家移动

分步视频:https://t.zsxq.com/118HdIXIO
第14步、碰撞判定


分步视频:https://t.zsxq.com/11JaAFVoq
第15步、箱子判定

分步视频:https://t.zsxq.com/11MK8N1Up
第16步、推箱子

分步视频:https://t.zsxq.com/11PjNVnB3
第17步、结束判定

分步视频:https://t.zsxq.com/11A38I88z
第18步、重置游戏

分步视频:https://t.zsxq.com/11rxSa5NT
第19步、路径记录



分步视频:https://t.zsxq.com/11cZLZt9F
第20步、自动推箱子


分步视频:https://t.zsxq.com/11jet1q8v
第22步、胜负判定

分步视频:https://t.zsxq.com/11B0cNLE3
英雄算法联盟免费体验券,免费扫码,可查看分步视频:
