《推箱子》python小游戏(第一期)

欢迎加入我们卧虎藏龙的python讨论qq群:729683466

导 语 ●

以前,公众号推送小游戏代码的时候

从没有仔细讲过代码的原理

主要是代码细节太多了

一期根本讲不完

这一次

我们准备分很多期

将《推箱子》这个游戏

从头到尾给大家讲清楚

如果大家有什么不懂的

欢迎加入QQ群讨论

代码及相关资源获取

1:关注“python趣味爱好者”公众号,回复“推箱子”获取源代码

2:加入群聊:729683466。在群文件中下载源代码以及相关资料。

  

效果演示

ss

往期精选

实现图片“模糊”特效

可视化系列(二):Plotly散点图(上)

 ????

开发工具

python3.6.4

第三方库:pygame,numpy,sys

讲解部分

为了简化游戏思路,我在设计游戏之初就可以避免了一些不好理解的内容。

首先说一下游戏界面,我们把游戏界面分成了想棋盘一样的网格,在每个网格所在的地方放我们要放的棋子(人物,箱子,墙壁,目的地)。

在我们的“棋盘”中,黑色的实心球是“人物”,红色的正方形是箱子,粉色的空心圆是“箱子目的地”,外面一层蓝色的方格组成的就是“墙壁”。

我们要做的就是在棋盘上不同的位置摆上不同的棋子(箱子,墙壁,人物,目的地)。

这就需要描述方格网上不同的位置坐标,

我们将游戏界面分成了8*8的方格网,其中如图所示,左上角的坐标是(1,1)。右下角坐标为(8,8)。左下角坐标为(1,8),右上角坐标为(8,1)。

初始化游戏界面,我们就需要在不同的位置坐标摆上不同的“棋子”。

我们将墙壁,人物,箱子,目的地所占的方格的全部坐标用一个列表表示。

其中box代表的是箱子所在的方格坐标,我们有4个箱子,所在的位置分别是(4,4),(6,4),(4,5),(5,6)。

我们用一个二维列表存储这些数据,墙,目的地,人物的位置坐标也用列表存储起来。

然而,我们不能直接用这些方格的坐标值来画方格。

因为在pygame中,画方格用到的是像素点

所以我们定义一个函数,将方格的横纵坐标转化为实际的像素点。

然后就可以根据这些像素点画方格了。

def get_rect(row,column):#计算应该在哪里画方格,以右上角为点。
    x1=rect_width*row
    y1=rect_width*column
    return (x1,y1,rect_width,rect_width)

比如说,我们在最初定义游戏界面的长和宽时。我们设置一个格子的宽度是50,游戏界面尺寸是500*500

500除50,这样理论上有10*10=100个格子。我们只选取8*8=64个格子

rect_width=50#一个格子的宽度
size=width,height=500,500

最后,我们再专门定义一个画方块的函数,

比如说,我们要画全部的墙壁。我们就可以遍历墙壁的列表,在每个需要画墙壁的格子上画一个蓝色的方块,最终就连成了墙壁。

代码如下。

def draw_wall(wall):
    for i in wall:
        pygame.draw.rect(screen, wall_color, get_rect(i[0], i[1]), 0)

我们用for循环遍历wall列表里面所有的值,然后用pygame.draw.rect画方格,其中有4个参数,第一个screen指的是在哪个界面上画。

wall_color指的是画什么颜色,第三个指的是在什么位置画。最后一个0代表画实心方块。

感谢!!!

初始化游戏界面先讲到这里了。

至于游戏元素的移动,期待下期吧

作者|齐

编辑|齐

感谢大家观看

有钱的老板可打赏一下小编哦

扫描二维码

关注我们

QQ群:729683466

◰  

参考来源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值