pygame写简单推箱子游戏

使用pygame实现推箱子游戏
本文介绍了使用Python的pygame库创建一个简单的推箱子游戏的过程。文章详细讲解了游戏设计思路,包括关卡类的设计,矩阵操作,人和箱子的移动规则,过关条件,以及撤销功能的实现。此外,还分享了代码结构,包括关卡类、人对象类、按钮类和主函数,并提到了自定义的图片资源和字体选择。

pygame写简单推箱子游戏

利用python的pygame包写一个简单的推箱子游戏

先设计游戏

首先想一想怎么设计游戏,比如,我是这样设计的,用一个矩阵去记录每一个关卡里图标的位置,所以有个关卡类,然后人这个对象类是必不可少的,还要按钮类等

  1. 关卡类,矩阵维护 ,定义一个88的矩阵,(理想化是88,最后贴图时你会发现多了其实也可以,只是窗口大小需要改变,定义死是为了保证游戏界面在窗口中居中)代表一个关卡,矩阵中,9,代表不填充,1代表墙,0代表空白地接,2代表当前箱子所在位置,3代表人,和4代表箱子应放置的位置(人经过变成5,箱子经过变成6)
  2. 如何维护,人的移动,对应矩阵操作,矩阵操作会进行判断是否可操作,还有箱子的移动,箱子移动是根据人的移动判断是否会带了箱子的移动,箱子移动是如何变化的,判断后贴图,怎样代表箱子运动了,1,人移动后的位置是箱子的位置,2箱子向人移动方向移动的位置不是墙或箱子。所以矩阵操作会有3种情况的返回值,0 代表不能移动,1代表人可以移动,2代表箱子也会移动,
  3. 人和箱子移动 ,箱子移动是由人移动带动的,所以,人移动了,才有可能带来箱子移动,我们只需判断,人移动是否能带来箱子移动,也是矩阵维护类返回结果告诉我们
  4. 关于过关和选关,简单贴图,设置了下一关和上一关,和当前关卡显示,如果当前关卡为1,上一关关卡颜色为青色,同理,下一关关卡为青色,鼠标经过按钮区域,贴灰色,怎样就有一种按钮感觉。过关, 矩阵中贴图时记录下正确点的位置,如果所有正确点的位置值是6,那就过关了。
  5. 撤销,利用栈去做,栈里放上一步矩阵没改变的样子,撤销时就把矩阵里值换成栈弹出的矩阵。
  6. 其他说明 对于人移动上的操作,我是那些改变那些贴图,但是对于那些鼠标点击事件(上一关,下一关,重新开始,撤销这些操作),全是窗口整体重新贴图

上代码吧

1.关卡类

import pygame
from txz.back_queue import back_queue
import copy
#关卡
class lev:
    #关卡字典,存储每一关对应图标位置
    dit = {
   
   
            1:[
                [9,9,1,1,1,9,9,9],
                [9,9,1,4,1,9,9,9],
                [9,9,1,0,1,1,1,1],
                [1,1,1,2,0,2,4,1],
                [1,4,0,2,3,1,1,1],
                [1,1,1,1,2,1,9,9],
                [9,9,9,1,4,1,9,9],
                [9,9,9,1,1,1,9,9]
            ],
        2:[
            [9,9,1,1,1,1,9,9],
            [9,9,1,4,4,1,9,9],
            [9,1,1,0,4,1,1,9],
            [9,1,0,0,2,4,1,9],
            [1,1,0,2,3,0,1,1],
            [1,0,0,1,2,2,0,1],
            [1,0,0,0,0,0,0,1],
            [1,1,1,1,1,1,1,1]
        ],
        3:[
            [9,9,1,1,1,1,9,9],
            [9,1,1,0,0,1,9,9],
            [9,1,3,2,0,1,9,9],
            [9,1,1,2,0,1,1,9],
            [9,1,1,0,2,0,1,9],
            [9,1,4,2,0,0,1,9],
            [9,1,4,4,6,4,1,9],
            [9,1,1,1,1,1,1,9]

        ],
        4:[

            [1,1,1,1,1,9,9,9,9],
            [1,0,0,0,1,1,1,1,1],
            [1,2,1,0,1,0,0,0,1],
            [1,0,0,0,0,0,2,0,1],
            [1,4,5,1,2,1,2,1,1],
            [1,4,2,0,0,0,0,1,9],
            [1,4,4,0,0,1,1,1,9],
            [1,1,1,1,1,1,9,9,9]

        ],

        5:[
            [9,1,1,1,1,1,1,9],
            [9,1,0,0,0,0,1,9],
            [9,1,0,2,2,0,1,9],
            [9,1,1,6,3,0,1,9],
            [9,1,0,4,0,1,9,9],
            [9,1,0,6,0,1,9,9],
            [9,1,0,6,0,1,9,9],
            [9,1,0,4,0,1,9,9],
            [9,1,1,1,1,1,9,9]
        ],

        6:[
            [9,1,1,1,1,1,1,9,9],
            [9,1,0,0,0,0,1,1,9],
            [1,1,4,1,1,0,0,1,9],
            [1,0,6,5,0,0,0,1,9],
            [1,0,0,1,2,2,0,1,9],
            [1,0,0,0,0,1,1,1,9],
            [1,1,1,1,1,1,9,9,9],
            [9,9,9,9,9,9,9,9,9]

        ],
        7:[
            [9,1,1,1,1,1,9,9,9],
            [9,1,0,3,0,1,1,1,9],
            [1,1,0,1,2,0,0,1,9],
            [1,0,6,4,0,4,0,1,9],
            [1,0,0</
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值