【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)上
篇写上一个思路篇,那么今天我们就来完成这一项工作
源代码和配套文件
链接: https://caiyun.139.com/m/i?135ClY1yWrSKX 提取码:e4pq 复制内容打开中国移动云盘手机APP,操作更方便哦
文章目录
- 源代码和配套文件
- 思路明确
- 开始编程
- 设置剧情
- 设置窗口信息
- 将格子画在画布上
- 画出更多的格子
- 绘制主角
- 控制主人公上下移动
- 格子的变化
- 碰到水格子检测
- 失败检测
- 完整代码
- 文件地址
- WalkLattice 走格子游戏 (思路篇)下
思路明确
首先我们要准备好以下的几个工具
- Python 3.x
- AudioPlayer 库
我们将使用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,操作更方便哦
文件地址
- 代码篇地址:点击直达访问
- 思路篇上地址:点击直达访问
- 思路篇下地址:点击直达访问
WalkLattice 走格子游戏 (思路篇)下
【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)下
点击直接访问
【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)上相关推荐
- 【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)下
在上一篇的分析当中,我们已经基本上完成了基本模块的代码,接下来,我们就为这个代码增添更多好玩有趣的小功能吧.那么还没有看过代码篇和思路篇的朋友们可以点击下方链接直接跳转到代码篇去的哈 源代码和配套文件 ...
- python小程序-Python基本小程序
Python基本小程序 一.筛选从1-100所有的奇数 实现代码: # 设计思路 # 1.定义初始值 # 2.定义结束值 # 3.循环输出 # 设计代码 n=1 while n<101: k = ...
- python小程序-python学习—几个简单小程序
1. 输出1到100的偶数 #!/usr/bin/env python # -*- coding:utf-8 -*- #定义初始值 start=1 while True: #判断start的值若其为5 ...
- python小程序-python好玩的小程序
时钟的打印 有需要学习提升的宝宝可以进去免费报名一下 每天分享一些好完的技术和主流的项目 打印时钟: import turtle def draw_spiral(t, n, length=3, a=0 ...
- python恶搞小程序-有趣的python小程序
有趣的python小程序 1.密码生成器x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZXC ...
- 有趣的python小程序
有趣的python小程序 1.密码生成器 x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZX ...
- python编有趣的小程序_有趣的python小程序
有趣的python小程序 1.密码生成器x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZXC ...
- python有趣小程序代码-有趣的python小程序
有趣的python小程序 1.密码生成器x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZXC ...
- python有趣小程序代码-一个可以套路别人的python小程序实例代码
先简要介绍一下程序. 程序是使用pycharm工具,python语言所写.程序包括客户端 client.py 和服务器端 server.py 两部分,利用了python中的socket包. 咳咳,使用 ...
最新文章
- 在java中使用JMH(Java Microbenchmark Harness)做性能测试
- [转载] 必须要会回答的Java面试题(字符串篇)
- Oracle发送邮件存储过程
- 纪念一个曾经的产品(目录)
- 某大型银行深化系统技术方案之八:核心层之异步流程控制机制
- 洛谷——P1744 采购特价商品
- android系统源代码单独编译应用程序
- java 甘特图_[Java教程]JQuery.Gantt(甘特图)开发
- 高级软考之——系统分析师思维导图(一)
- Resolution和Scale关系
- arm mali 天梯图_手机CPU天梯图2017年上半年新版 2017手机cpu性能排行天梯图
- 前端涉及的PS简单介绍
- 《快速像素(Quixel)》游戏“破解”攻略
- Qt + libVlc
- 解决 Safari 12 不能安装第三方扩展的问题
- 全球经济寒冬将至?且看顶级资本大鳄的大数据分析预测
- 用python解方程组
- 文章发表前的最后一步:仔细审查校对样本
- (网页)Http状态码大全(200、404、500等)(转CSDN)
- linux聚合网卡--解除聚合网卡(2)
热门文章
- ctf解题--后台登录(web)
- TencentOS tiny RTOS快速入门
- 关于正负数相除及取余问题
- python基础教程:Python图像处理库PIL中图像格式转换的实现
- 卡特尔16PF性格测试与答案
- 双曲图嵌入Low-Dimensional Hyperbolic Knowledge Graph Embeddings
- 数据分析(1)Matplotlib基础内容
- 软件测试 | 测试开发 | 从外包菜鸟到测试开发,薪资一年翻三倍,连自己都不敢信!(附面试真题与答案)
- 使用FeignClient注解,进行远程http第三方调用
- 计算机专业高级职称评定条件,计算机职称考试初级高级中级职称评定申报条件...