Mind+Python编程入门系列课程—04 小海龟走迷宫

2021-04-294.5万
精华项目
AI 快速预览详细 收起
本文介绍了如何使用Python和turtle库编写小海龟走迷宫的游戏。首先创建一个带迷宫背景的屏幕,并在屏幕上添加小海龟及起止点标记。接着,通过设置键盘触发,实现小海龟前后左右移动及清屏重置功能。最终,玩家可以通过键盘按键控制小海龟走出迷宫。适合初学者和STEM教育场景,帮助学生掌握函数创建与调用、屏幕与键盘交互等技能。



Mind+Python编程入门系列课程——第四课 小海龟走迷宫




一、学习背景


经过前面第一单元三节课的学习,我们已经对python中的知识有了一定的了解,也学会了利用海龟绘图turtle库绘制各种有趣的图形。事实上,除了在界面上绘制图形外,我们还能利用turtle库实现与外设的交互,创作更好玩的游戏,让我们来试一试吧!

二、学习目标
本实践项目通过编写python程序来设计小海龟走迷宫的游戏。

知识目标:1、理解函数的两种类型2、理解python中的事件与事件的绑定3、掌握函数创建与调用的方法

技能目标:1、掌握使用turtle库在屏幕上书写文字的方法2、掌握使用turtle库实现屏幕与键盘交互的方法

三、学习准备
1、电脑
2、mind+编程软件

四、学习实践
在本项目中,我们将创建两个python程序,之后运行程序,通过按动键盘上的不同按钮,使小海龟从起点开始沿着迷宫中道路慢慢爬行,并最终走出迷宫。


1.创建一个带迷宫背景的屏幕并在迷宫上添加小海龟及起点标记。
2.添加键盘与屏幕的交互功能。

任务1:创建迷宫程序设计


在这个程序中,我们将创建一个带迷宫背景的屏幕,并在迷宫上添加小海龟及起始点标记。通过它,我们可以了解在屏幕上书写文字的方式。为此,我们将分三步创建这个程序。首先是分析任务,之后进行程序的编写,最后运行程序并观察效果。


1、任务分析
在这个任务中,我们首先需要创建一个屏幕,之后在屏幕上添加一张迷宫图见附录2)。接下来我们需要创建本次小游戏的主角——小海龟,并使小海龟移动到中间区域作为起点。为了让小海龟在迷宫背景图上能一眼找到出口所在,我们再创建一个圆作为出口点并写上文字标记。


这里我们将采用顺序结构的方式编写程序。具体流程如下:

Mind+Python编程入门系列课程—04 小海龟走迷宫图4



2、程序编

在正式编写程序代码之前,我们首先要创建一个项目文件及python程序文件。

STEP1:创建与保存项目文件
启动Mind+,另存项目并命名为“小海龟走迷宫”。

STEP2:创建与保存python文件
创建一个python程序文件“任务一.py”,双击打开。

STEP3:编写程序

  1. import turtle#导入turtle库
  2. #绘制背景------------------------------------------
  3. screen = turtle.Screen()#赋值screen对象
  4. width,height = 700,520#设定宽度和高度
  5. screen.setup(width,height)#以设定好的宽和高来创建屏幕实体
  6. screen.title("小海龟走迷宫")#设定屏幕标题
  7. screen.bgcolor("white")#设定屏幕背景色
  8. screen.bgpic('迷宫4.gif')#添加迷宫背景图
  9. screen.delay(0)#屏幕延迟,设为0避免卡顿
  10. #绘制起点------------------------------------------
  11. t=turtle.Turtle(shape='turtle')#创建海龟对象
  12. t.shapesize(0.9)#设定海龟尺寸缩小到正常的0.9倍
  13. t.speed(0)#设定海龟速度为最大
  14. t.color('blue')#设定海龟颜色为蓝色
  15. t.write("起点",font=('微软雅黑', 14, 'normal'))#设定海龟所在为起点
  16. #绘制终点------------------------------------------
  17. yuan = turtle.Turtle('circle')#创建一个圆作为终点标志
  18. yuan.shapesize(0.5)#设定海龟尺寸缩小到正常的0.5倍
  19. yuan.color('red')#设定圆的颜色为红色
  20. yuan.penup()#抬笔
  21. yuan.goto(-300,120)#使圆移动到指定位置
  22. yuan.write("出口",font=('微软雅黑', 14, 'normal'))#添加终点标记
  23. 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”来清空屏幕、回到起点。

Mind+Python编程入门系列课程—04 小海龟走迷宫图5



在设定屏幕触发时,我们首先将创建五个函数,分别用来实现小海龟前进、后退、左转、右转、以及清屏归位的效果。之后再设定相应按键与函数之间的联系,由于我们要实时检测按键的按压与否,因此还需设置键盘的监听功能,整体上,采用顺序结构的方式编写,具体流程如下,

Mind+Python编程入门系列课程—04 小海龟走迷宫图6


2、程序编写

STEP1:创建与保存python文件
新建一个python程序文件“任务二.py”,双击打开。
STEP2:编写程序
  1. import turtle#导入turtle库
  2. #绘制背景-------------------------------------------
  3. screen = turtle.Screen()#赋值screen对象
  4. width,height = 700,520#设定宽度和高度
  5. screen.setup(width,height)#以设定好的宽和高来创建屏幕实体
  6. screen.title("小海龟走迷宫")#设定屏幕标题
  7. screen.bgcolor("white")#设定屏幕背景色
  8. screen.bgpic('迷宫4.gif')#添加迷宫背景图
  9. screen.delay(0)#屏幕延迟,设为0避免卡顿
  10. #绘制小海龟-----------------------------------------
  11. t=turtle.Turtle(shape='turtle')#创建海龟对象
  12. t.shapesize(0.9)#设定海龟尺寸缩小到正常的0.9倍
  13. t.speed(0)#设定海龟速度为最大
  14. t.color('blue')#设定海龟颜色为蓝色
  15. t.write("起点",font=('微软雅黑', 14, 'normal'))#设定海龟所在为起点
  16. #绘制终点-------------------------------------------
  17. yuan = turtle.Turtle('circle')#创建一个圆作为终点标志
  18. yuan.shapesize(0.5)#设定海龟尺寸缩小到正常的0.5倍
  19. yuan.color('red')#设定圆的颜色为红色
  20. yuan.penup()#抬笔
  21. yuan.goto(-300,120)#使圆移动到指定位置
  22. yuan.write("出口",font=('微软雅黑', 14, 'normal'))#添加终点标记
  23. #设置键盘触发
  24. #往前
  25. def upMove():
  26.     t.forward(10)#前进10像素
  27. #往后
  28. def downMove():
  29.     t.backward(10)#后退10像素
  30. #右转
  31. def rightMove():
  32.     t.setheading(t.heading() - 10)#右转10°
  33. #左转
  34. def leftMove():
  35.     t.setheading(t.heading() + 10)#左转10°
  36. #清屏重置
  37. def clear_screen():
  38.     t.clear()#清屏
  39.     t.penup()#抬笔
  40.     t.home()#回到初始位置
  41.     t.pendown()#落笔
  42. #输入按键,触发对应的函数
  43. turtle.onkeypress(leftMove,'a')#按压键盘a键实现左移
  44. turtle.onkeypress(rightMove,'d')#按压键盘d键实现右移
  45. turtle.onkeypress(upMove,'w')#按压键盘w键实现上移
  46. turtle.onkeypress(downMove,'s')#按压键盘s键实现下移
  47. turtle.onkeypress(clear_screen,'space')#按压键盘空格键实现清屏
  48. #键盘监听开始
  49. turtle.listen()
  50. screen.exitonclick()#点击屏幕退出
复制代码

3、程序运行

STEP1:点击运行,弹出一个迷宫背景的屏幕

Mind+Python编程入门系列课程—04 小海龟走迷宫图8

STEP2:观察迷宫,找出一条从起点到终点的可行线路

Mind+Python编程入门系列课程—04 小海龟走迷宫图1

STEP3:体验游戏
退出输入法,通过“w”“s”“a”“d”四个方向键移动小海龟,并依据其走出的线条来判断是否与迷宫之墙有交叉,继而确保小海龟始终在迷宫内的红色道路上前进。若小海龟“穿墙而过”,则需按下空格键重新开始。

Mind+Python编程入门系列课程—04 小海龟走迷宫图2


知识积累
函数的分类
功能说明    对于函数,我们已经不陌生了,它是一段具有特定功能,可重复使用的语句块。函数用函数名来表示,并通过函数名进行功能调用。事实上,在python中主要有两类函数,系统内建函数和用户自定义函数。其中,内建函数(又称内置函数)是指python语言自带的函数,比如“print输出函数”,“input输入函数”等,详细内容可见附录1。而自定义函数是指用户可以根据需要来自己创建函数,由用户创建的函数就叫做自定义函数。
函数的定义
功能说明    自定义函数一般由函数名、参数和函数体组成。函数名可以由任意的字符组成,参数(可以有零个、一个或多个)称为形式参数。当需要返回值时使用return语句,否则函数可以没有return语句,这样的函数返回None值。
使用方法   
def <函数名> ([参数列表]):
    <函数体>
    [return <返回值>]
举例说明    程序中,
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°表示正南方向。

Mind+Python编程入门系列课程—04 小海龟走迷宫图7
举例说明    程序中,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图片下载见帖子附件

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(3)
Leeytu
Leeytu
附件里没有背景图呀?
c1N3cZaKB9vP
c1N3cZaKB9vP回复Leeytu
將就將就。
xiaohe9527
xiaohe9527
并依据其走出的线条来判断是否与迷宫之墙有交叉,这个功能好像没有实现啊
glwz007
glwz007
谢谢楼主分享!
木子哦
木子哦
作者
回复glwz007
评论内容
- 没有更多了 -