开发工具

python3.6.4

第三方库:pygame,numpy,sys

讲解部分

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

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

推箱子游戏python代码 python做一个推箱子游戏_webgl

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

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

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

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

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

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

推箱子游戏python代码 python做一个推箱子游戏_webgl_02

其中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代表画实心方块。

感谢!!!

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

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

作者|齐

编辑|齐

感谢大家观看