2021-4-29 11:13:38 [显示全部楼层]
2510浏览
查看: 2510|回复: 3

[教程] 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)。接下来我们需要创建本次小游戏的主角——小海龟,并使小海龟移动到中间区域作为起点。为了让小海龟在迷宫背景图上能一眼找到出口所在,我们再创建一个圆作为出口点并写上文字标记。


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

ThuApril-202104296231..png



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”来清空屏幕、回到起点。

ThuApril-202104294445..png



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

ThuApril-202104292619..png


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:点击运行,弹出一个迷宫背景的屏幕

图片1.png

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

ThuApril-202104294578..png

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

项目实例3.gif


知识积累
函数的分类
功能说明    对于函数,我们已经不陌生了,它是一段具有特定功能,可重复使用的语句块。函数用函数名来表示,并通过函数名进行功能调用。事实上,在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°表示正南方向。

ThuApril-202104296987..png
举例说明    程序中,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图片下载见帖子附件
附件.zip (4 MB, 下载次数: 385)

glwz007  高级技师

发表于 2021-8-17 18:44:30

谢谢楼主分享!
回复

使用道具 举报

木子呢  NPC
 楼主|

发表于 2021-8-18 10:11:53

glwz007 发表于 2021-8-17 18:44
谢谢楼主分享!

         
回复

使用道具 举报

xiaohe9527  高级技师

发表于 2021-9-27 08:36:02

并依据其走出的线条来判断是否与迷宫之墙有交叉,这个功能好像没有实现啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail