篇写上一个思路篇,那么今天我们就来完成这一项工作
链接: https://caiyun.139.com/m/i?135ClY1yWrSKX 提取码:e4pq 复制内容打开中国移动云盘手机APP,操作更方便哦
首先我们要准备好以下的几个工具
我们将使用Turtle来完成这一次的走格子的小游戏
游戏的创作没有一个好的剧情怎么可以。这个游戏我的定位呢,是将其打造成为一个简单的走迷宫游戏,在这个游戏当中,玩家操控人物进行上下左右的操作。
故事的背景则是因为玩家被困在了一个围墙围成的冰块里面,由于冰块非常容易碎掉,每个冰块只允许玩家通过一次,如果通过多次,玩家则失败。当我们玩家闯关到最后一关时,我们将为玩家发放证书,以资鼓励。
首先在游戏设计开始之前,我们先要写出Turtle库的一个基本框架,测试程序是否能够运行
我们可以看到,很显然,窗口出现了一会儿就退出了,这样也就代表我们这一个代码运行成功
首先先接收一下我们的代码文件:点击直达
我们接下来要做的便是将格子出现在我们的屏幕上面,这里我们直接在画笔中添加画笔的形状,然后用Turtle的增加形象的函数写入turtle,最后用Stamp打印出来。(这里使用Stamp的原因是因为这里有多个格子,一个个格子的设置太麻烦了)。下图是(geeksforgeeks.org)对Stamp函数的论述
import turtle
turtle.addshape("./element/墙壁.gif")
turtle.shape("./element/墙壁.gif")
turtle.stamp()
turtle.ht()
# 防止Turtle直接退出
turtle.exitonclick()
接下来,我们要画出更多的格子。在这个时候,我们也要为以后着想,我们是用代码一行一行地指定位置。例如我让海龟先去(0,0)点画一个格子,再去(0,60)点画一个格子,一行行地写下去,还是用一个可以通用的代码,减少我们的工作负担呢。
很显然,程序肯定就是要为我们解决这种枯燥的问题的,所以,我们要想一个机制,让我们传入一组数据,让Python理解我们在说什么,然后为我们绘制出想要的形状出来。
在这里,我们选用列表来给Python传入数据,这是由于列表的使用操作相对简单,而且对于二维的坐标系来说有天然的优势(列表有嵌套的二维列表)
创建一个二维列表,代表第一个关卡
我们可以看到,这个模块一直在同一个地方闪,那么现在我们让这个小方块移动一下。我们在程序中加入这样的一行代码。我们图片大小是70像素。我们的长宽的数值仍然是通过我们布局的Grid的大小来计算,由于Turtle的原点是在正中间,所以我们初始点的位置需要进行微调。
我们会发现很明显我们画笔绘制太慢,而且还有画笔的痕迹,我们更改一下之前我们写的代码
现在,程序一出来就是直接出现结果布局了
我们在游戏当中可能会出现玩家不喜欢主角的情况,为此,我们可以导入多个角色供玩家选择
接下来的步骤和绘制砖块一样,我们绘制一下人物,首先我们应该先设置一下我们主人工的初始坐标
这个地方我们将会用到函数onkey(),检测我们在键盘上的操作,我们按照国际惯例,上下左右使用键盘上的↑←↓→和wasd来操作
我们使用onkey()函数需要定义函数,那么我们就先来定义函数
接下来,我们再来监听键盘事件
但是我们会看到这个小人会逃出这个圈圈的外面,所以我们在这里也要增添一些限制
为了给我们的程序增加难度,现在我们增加以下破碎的冰的功能,首先我们先导入这个海龟形状
接下来我们定义一个Update函数,如果我们移动后的地方为冰,那我们把它设置成为破碎的冰,如果我们移动的位置为破碎的冰,那我们把它设置为水
在每一个move函数中的最后面添加调用updatelattice函数的代码
我们首先增加一个玩家状态的变量
接下来,我们来检测,如果我们是在最后一关,那么我们检测是否还有没有走到的格子在图片中,如果有,则继续游戏,否则,则设置成功。那么如果不是在最后一关,否则则设置为通关
我们再导入Copy这个库,使用深度复制的函数,将我们的布局复制下来
然后我们再生动形象地用图片将我们通关状态给表现出来
在循环内部更新状态
我们可以很明显的看到,我们的效果已经实现了,但是很显然,我们这个程序即使在失败后依然可以重新再来,这并没有达到失败的效果
我们在每一个移动的函数中,在移动之前,我们先加入一个检测,确保我们是能够移动的情况下移动的
链接: https://caiyun.139.com/m/i?135CmVwO8GbQv 提取码:m5qx 复制内容打开中国移动云盘手机APP,操作更方便哦
【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)下