Mind+Python编程入门系列课程—04 小海龟走迷宫
本帖最后由 木子呢 于 2021-11-9 16:46 编辑Mind+Python编程入门系列课程——第四课 小海龟走迷宫
一、学习背景
经过前面第一单元三节课的学习,我们已经对python中的知识有了一定的了解,也学会了利用海龟绘图turtle库绘制各种有趣的图形。事实上,除了在界面上绘制图形外,我们还能利用turtle库实现与外设的交互,创作更好玩的游戏,让我们来试一试吧!
二、学习目标
本实践项目通过编写python程序来设计小海龟走迷宫的游戏。
知识目标:1、理解函数的两种类型2、理解python中的事件与事件的绑定3、掌握函数创建与调用的方法
技能目标:1、掌握使用turtle库在屏幕上书写文字的方法2、掌握使用turtle库实现屏幕与键盘交互的方法
三、学习准备
1、电脑
2、mind+编程软件
四、学习实践
在本项目中,我们将创建两个python程序,之后运行程序,通过按动键盘上的不同按钮,使小海龟从起点开始沿着迷宫中的道路慢慢爬行,并最终走出迷宫。
1.创建一个带迷宫背景的屏幕并在迷宫上添加小海龟及起止点标记。
2.添加键盘与屏幕的交互功能。
任务1:创建迷宫程序设计
在这个程序中,我们将创建一个带迷宫背景的屏幕,并在迷宫上添加小海龟及起始点标记。通过它,我们可以了解在屏幕上书写文字的方式。为此,我们将分三步创建这个程序。首先是分析任务,之后进行程序的编写,最后运行程序并观察效果。
1、任务分析
在这个任务中,我们首先需要创建一个屏幕,之后在屏幕上添加一张迷宫图(见附录2)。接下来我们需要创建本次小游戏的主角——小海龟,并使小海龟移动到中间区域作为起点。为了让小海龟在迷宫背景图上能一眼找到出口所在,我们再创建一个圆作为出口点并写上文字标记。
这里我们将采用顺序结构的方式编写程序。具体流程如下:
2、程序编写
在正式编写程序代码之前,我们首先要创建一个项目文件及python程序文件。
STEP1:创建与保存项目文件启动Mind+,另存项目并命名为“小海龟走迷宫”。
STEP2:创建与保存python文件创建一个python程序文件“任务一.py”,双击打开。
STEP3:编写程序
import turtle#导入turtle库
#绘制背景------------------------------------------
screen = turtle.Screen()#赋值screen对象
width,height = 700,520#设定宽度和高度
screen.setup(width,height)#以设定好的宽和高来创建屏幕实体
screen.title("小海龟走迷宫")#设定屏幕标题
screen.bgcolor("white")#设定屏幕背景色
screen.bgpic('迷宫4.gif')#添加迷宫背景图
screen.delay(0)#屏幕延迟,设为0避免卡顿
#绘制起点------------------------------------------
t=turtle.Turtle(shape='turtle')#创建海龟对象
t.shapesize(0.9)#设定海龟尺寸缩小到正常的0.9倍
t.speed(0)#设定海龟速度为最大
t.color('blue')#设定海龟颜色为蓝色
t.write("起点",font=('微软雅黑', 14, 'normal'))#设定海龟所在为起点
#绘制终点------------------------------------------
yuan = turtle.Turtle('circle')#创建一个圆作为终点标志
yuan.shapesize(0.5)#设定海龟尺寸缩小到正常的0.5倍
yuan.color('red')#设定圆的颜色为红色
yuan.penup()#抬笔
yuan.goto(-300,120)#使圆移动到指定位置
yuan.write("出口",font=('微软雅黑', 14, 'normal'))#添加终点标记
screen.exitonclick()#点击屏幕退出
3、程序运行运行程序,我们看到:弹出了一个标题为“小海龟走迷宫”的屏幕,屏幕的背景是一幅迷宫图。屏幕中间是起点位置,一只蓝色的小海龟蓄势而发,屏幕的左侧有一个红色的圆,边上写有“出口”二字。
对象链接
shapesize()方法功能说明 shapesize()方法能设定对象的尺寸使用方法 对象.shapesize(比例值)举例说明 程序中,t.shapesize(0.9),表示将海龟的尺寸设定为正常大小的0.9倍。
write()方法功能说明 write()方法能在屏幕上书写文字使用方法 turtle.write(s[,font=("font-name",font_size,"font_type")]),其中,s为文本内容,font是字体的参数,里面分别为字体名称,大小和类型;font为可选项, font的参数也是可选项举例说明 程序中,t.write("起点",font=('微软雅黑', 14, 'normal')),表示以微软雅黑、14号、正常类型字体来书写“起点”二字。
任务2:键盘触发程序设计
至此,无论是迷宫图还是小海龟,我们都已经成功创建了,在接下来这个程序中,我们将设置键盘触发,实现通过按下键盘上的按键来控制小海龟移动,达到出口。为此,我们依旧将分三步创建程序,首先是任务分析,之后进行程序的编写,最后运行程序并观察效果。
1、任务分析在上个任务中,我们将屏幕的中心位置作为小海龟的起点,接下来我们只需在此基础上添加键盘的交互即可.这里,为了能控制小海龟沿着迷宫移动出来,我们选择键盘上的“w”“s”“a”“d”四个键来控制小海龟前后左右四个方向。同时,由于小海龟在迷宫中可能会走“错”路,因此,我们还需一个空格键“space”来清空屏幕、回到起点。
在设定屏幕触发时,我们首先将创建五个函数,分别用来实现小海龟前进、后退、左转、右转、以及清屏归位的效果。之后再设定相应按键与函数之间的联系,由于我们要实时检测按键的按压与否,因此还需设置键盘的监听功能,整体上,采用顺序结构的方式编写,具体流程如下,
2、程序编写
STEP1:创建与保存python文件新建一个python程序文件“任务二.py”,双击打开。 STEP2:编写程序import turtle#导入turtle库
#绘制背景-------------------------------------------
screen = turtle.Screen()#赋值screen对象
width,height = 700,520#设定宽度和高度
screen.setup(width,height)#以设定好的宽和高来创建屏幕实体
screen.title("小海龟走迷宫")#设定屏幕标题
screen.bgcolor("white")#设定屏幕背景色
screen.bgpic('迷宫4.gif')#添加迷宫背景图
screen.delay(0)#屏幕延迟,设为0避免卡顿
#绘制小海龟-----------------------------------------
t=turtle.Turtle(shape='turtle')#创建海龟对象
t.shapesize(0.9)#设定海龟尺寸缩小到正常的0.9倍
t.speed(0)#设定海龟速度为最大
t.color('blue')#设定海龟颜色为蓝色
t.write("起点",font=('微软雅黑', 14, 'normal'))#设定海龟所在为起点
#绘制终点-------------------------------------------
yuan = turtle.Turtle('circle')#创建一个圆作为终点标志
yuan.shapesize(0.5)#设定海龟尺寸缩小到正常的0.5倍
yuan.color('red')#设定圆的颜色为红色
yuan.penup()#抬笔
yuan.goto(-300,120)#使圆移动到指定位置
yuan.write("出口",font=('微软雅黑', 14, 'normal'))#添加终点标记
#设置键盘触发
#往前
def upMove():
t.forward(10)#前进10像素
#往后
def downMove():
t.backward(10)#后退10像素
#右转
def rightMove():
t.setheading(t.heading() - 10)#右转10°
#左转
def leftMove():
t.setheading(t.heading() + 10)#左转10°
#清屏重置
def clear_screen():
t.clear()#清屏
t.penup()#抬笔
t.home()#回到初始位置
t.pendown()#落笔
#输入按键,触发对应的函数
turtle.onkeypress(leftMove,'a')#按压键盘a键实现左移
turtle.onkeypress(rightMove,'d')#按压键盘d键实现右移
turtle.onkeypress(upMove,'w')#按压键盘w键实现上移
turtle.onkeypress(downMove,'s')#按压键盘s键实现下移
turtle.onkeypress(clear_screen,'space')#按压键盘空格键实现清屏
#键盘监听开始
turtle.listen()
screen.exitonclick()#点击屏幕退出
3、程序运行
STEP1:点击运行,弹出一个迷宫背景的屏幕
STEP2:观察迷宫,找出一条从起点到终点的可行线路
STEP3:体验游戏退出输入法,通过“w”“s”“a”“d”四个方向键移动小海龟,并依据其走出的线条来判断是否与迷宫之墙有交叉,继而确保小海龟始终在迷宫内的红色道路上前进。若小海龟“穿墙而过”,则需按下空格键重新开始。
知识积累
函数的分类功能说明 对于函数,我们已经不陌生了,它是一段具有特定功能,可重复使用的语句块。函数用函数名来表示,并通过函数名进行功能调用。事实上,在python中主要有两类函数,系统内建函数和用户自定义函数。其中,内建函数(又称内置函数)是指python语言自带的函数,比如“print输出函数”,“input输入函数”等,详细内容可见附录1。而自定义函数是指用户可以根据需要来自己创建函数,由用户创建的函数就叫做自定义函数。
函数的定义功能说明 自定义函数一般由函数名、参数和函数体组成。函数名可以由任意的字符组成,参数(可以有零个、一个或多个)称为形式参数。当需要返回值时使用return语句,否则函数可以没有return语句,这样的函数返回None值。使用方法 def <函数名> ([参数列表]): <函数体> 举例说明 程序中,def leftMove():t.setheading(t.heading() + 10)#左转10°表示创建一个不带参数的函数,函数名是leftMove,函数体是使小海龟左转10°的动作,无返回值。
函数的调用功能说明 在python程序中,定义一个函数后,可以通过输入函数名的方式来使用它,这个过程我们称之为调用函数。使用方法 <函数名>([参数列表])举例说明 程序中,turtle.onkeypress(leftMove,'a'),括号内的leftMove就是在调用之前创建的小海龟左转“leftMove”这个函数。这里值得注意的是,如果在函数名后不加括号,调用的是函数(这个对象),不用等函数执行结束;而加括号后,调用的是函数体的执行,实际上是接收返回值。
事件与绑定事件知识描述 生活中的事件的指的是“发生的某件事情”,在python编程中,这个定义同样适用。事实上,在这里,用户执行的动作就叫做事件。 发生一个事件时,需要让程序注意这些事件并作出反应。可以把函数绑定在相应的发生事件的按键上。当事件发生时,函数就会被调用。举例说明 单击某个按钮,就是一个单击事件。程序中,turtle.onkeypress(leftMove,'a'),表示控制小海龟左转与按压“a”键这个事件绑定起来。
对象链接
home()方法功能说明 home()方法能使对象移动到坐标原点使用方法 对象.home()举例说明 程序中,t.home(),表示使小海龟移动回到坐标圆点。
heading()方法与setheading()方法功能说明 heading()方法能返回当前的方向值,setheading()方法能设置对象的当前朝向使用方法 对象.heading(),对象.setheading(angle),其中angle表示方位角度值,0°表示正东方向,90°表示正北方向,180°/-180°表示正西方向,270°/-90°表示正南方向。
举例说明程序中,t.setheading(t.heading() - 10),表示设置小海龟的方向在当前方向的基础上向右偏转10°。t.setheading(t.heading() + 10),表示设置小海龟的方向在当前方向的基础上向左偏转10°。
Turtle链接
onkeypress()函数功能说明 onkeypress()方法能实现按压键盘上的按键,调用相应的函数。使用方法 turtle.onkeypress(函数名,‘按键a’),其中a指的是键盘上的任意按键,当按下按键,调用相应的函数举例说明 程序中,turtle.onkeypress(leftMove,'a'),表示将键盘上的“a”键与小海龟左转绑定起来,当按下a键,小海龟就可以左转了。
listen()函数功能说明 listen()函数能监听事件的发生使用方法 turtle.listen()举例说明 程序中,turtle.listen(),表示监听键盘事件。
乐一乐至此,小海龟走迷宫的游戏我们就完成啦,赶紧拉上小伙伴一起来试一试吧,看看最快需要多久才能走到出口呢?
五、巩固提高
项目回顾本节课我们利用海归绘图(turtle)库,首先创建了一个迷宫背景的屏幕,之后设定了键盘与屏幕的交互功能,实现通过按下键盘上的按键来控制屏幕上小海龟的移动,最后,体验游戏,用键盘按键移动小海龟使其走出迷宫。
知识小结
程序Python知识点
迷宫创建程序设计无
键盘触发程序设计事件与事件的绑定、函数的创建与调用
项目拓展
结合本节课设计的小游戏,想一想,是否可以通过改变小海龟每一步移动的距离及转弯的角度,使其更快得走出迷宫呢,自己来试一试吧! 附录
附录1python常用的内置函数
函数功能描述
input()从标准输入读取字符串
print()打印输出
int()将数字或字符串转换为整型
float()将整数或字符串转化未浮点型
str()返回字符串格式
附录2图片下载见帖子附件
谢谢楼主分享! glwz007 发表于 2021-8-17 18:44
谢谢楼主分享!
{:5_131:} 并依据其走出的线条来判断是否与迷宫之墙有交叉,这个功能好像没有实现啊 附件里没有背景图呀?
页:
[1]