# 基于 Python 制作推箱子小游戏
## 导语
月初更波 python 制作小游戏系列吧~用 python 写了个推箱子小游戏,在这里分享给大家,让我们愉快地开始吧~
**开发工具**
Python 版本:3.6.4
**相关模块:**
pygame 模块;
以及一些 Python 自带的模块。
**环境搭建**
安装 Python 并添加到环境变量,pip 安装需要的相关模块即可。
**先睹为快**
在 cmd 窗口运行"**Game12.py**"文件即可。
**效果如下:**
![](https://www.writebug.com/myres/static/uploads/2022/5/16/6848c20ba4647833643ae2332f6a5a1c.writebug)
## 原理简介
**游戏简介(来源:百度百科):**
经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
**控制方式:**
**↑↓←→ 键**控制人物行动,**r 键**重新开始本关。
**逐步实现:**
**Step1:定义游戏精灵类**
由于游戏涉及到碰撞检测,所以我们先来定义一些游戏精灵类,包括推箱子的人、箱子、墙和目标位置指示标记。
首先我们来定义一下推箱子的人这个精灵类:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/649b4ca97e061ee1327614a5a155722c.writebug)
他需要拥有可以移动的能力,这里设置了一个模拟移动的选项,是为了通过模拟移动判断他是否可以向上/下/左/右移动。
因为地图上的其他东西性质类似,所以我们把它们定义成同一个精灵类(T_T 其实性质都类似,但是感觉还是有必要区分一下人和物的):
![](https://www.writebug.com/myres/static/uploads/2022/5/16/a463118f27a91757d9157dce2781cda5.writebug)
其中箱子需要拥有可以移动的能力,其他则不能移动。模拟移动选项的功能与之前类似。
**Step2:定义游戏地图类**
这里我们定义一个游戏地图类,目的是用该类来创建任意的游戏地图。因此,该类应当可以增加并保存游戏元素(人、墙、箱子等),并在屏幕上把地图画出来。同时也应当自带一个方法来判断此地图上的箱子是否都已经送到了指定位置(这样子方便切换关卡):
![](https://www.writebug.com/myres/static/uploads/2022/5/16/bc4fab2c923268bad0cf9328d0f1f5ef.writebug)
**Step3:定义游戏界面类**
游戏界面类负责解析 levels 文件夹下的游戏各关卡的地图文件,并利用游戏地图类创建并显示游戏地图:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/90efa38b3aba176a4fc5f8624e0e0871.writebug)
同时因为游戏地图面积 > 游戏窗口界面, 所以该类需要增加根据人物位置滚动游戏地图的功能:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/2691f1d073ff5856189464b18f9ebc94.writebug)
**Step4:定义某关的游戏主循环**
主循环主要负责实例化游戏界面类,并根据按键检测的结果对游戏界面类进行一些操作:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/6cf145f0becbbfc7e3027279b33c9d1e.writebug)
其中人物移动的逻辑为:
人移动的目标位置为空白格,则人移动;若撞到箱子,箱子可以和人方向一样移动一格,则人和箱子均移动;其他情况人和箱子均无法移动。
**Step5:定义游戏开始、切换和结束界面**
做的比较简陋,直接给源码吧。
开始界面:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/912350edc8fe096f3e60114b5b0a5bdf.writebug)
结束界面:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/44f24f8a210061888ab9703484699ad8.writebug)
**Step6:实现游戏主函数**
把所有界面串起来就好啦:
![](https://www.writebug.com/myres/static/uploads/2022/5/16/3b737dc57ffa3c182d0d62ecbab85dfd.writebug)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
资源推荐
资源详情
资源评论
收起资源包目录
100011857-基于 Python 制作推箱子小游戏.zip (16个子文件)
sokoban
__init__.py 49B
sokoban.py 11KB
resources
audios
EineLiebe.mp3 3.52MB
images
box.png 568B
player.png 464B
wall.png 275B
target.png 388B
levels
1.level 143B
2.level 146B
4.level 150B
3.level 146B
LICENSE 1KB
modules
__init__.py 135B
sprites.py 3KB
interfaces.py 3KB
README.md 4KB
共 16 条
- 1
资源评论
神仙别闹
- 粉丝: 2668
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功