目录
1.2.如何让画布绑定鼠标点击事件?画布如何绑定鼠标点击位置?
2.2.键盘上的上下左右分别控制画笔的前进,后退,左转,右转
3.鼠标点击事件和键盘事件同时存在(可以同时用鼠标或用键盘控制画笔)
1.画布绑定鼠标点击事件
1.1.什么是事件?
是指可以被控件识别的操作。例如:鼠标的单击和双击被称为鼠标点击事件,还有键盘事件。
1.2.如何让画布绑定鼠标点击事件?画布如何绑定鼠标点击位置?
使用onclick()方法可以解决这两个问题。
screen.onclick(fun) #需要一个函数fun作为参数
解释onclick()方法源码:
def onclick(fun):
主体:获取鼠标点击时x,y的坐标
return fun(x,y)
import turtle
turtle.shape('turtle')
screen=turtle.Screen() #获取画布
screen.bgcolor('yellow') #设置画布背景颜色
#fun里面的函数体是可以自己定义的
def fun(x,y):
print(x,y)
turtle.goto(x,y)
'''
onclick可以获取鼠标点击x,y的坐标值,里面是一个参数fun,
fun也可以是别的函数名,但一定要有两个参数x,y,
因为每次单击鼠标都会调用一次onclick,然后onclick返回一个x,y值,然后调用fun(x,y)
'''
screen.onclick(fun)
screen.mainloop() #使画布运行完之后不要关闭
运行结果:
鼠标单击到拿一处,就获取一个坐标值,然后调用fun(x,y) 函数

2.画布绑定键盘事件
2.1.画布简单绑定键盘事件
import turtle
turtle.shape('turtle')
screen=turtle.Screen() #获取画布
screen.bgcolor('yellow') #设置画布背景颜色
#onkey方法需要两个参数,onkey(fun,key)一个是函数fun,另外一个是键盘上的键位key
#函数fun不需要参数
def fun():
screen.bgcolor('red')
screen.onkey(fun,'r')#当按下r键,就执行fun,严格区分大小写
#设置不同的函数就可以做到执行不同的效果
def fun1():
turtle.forward(100)
def fun2():
turtle.circle(100)
screen.onkey(fun1,'a')
screen.onkey(fun2,'b')
screen.listen() #鼠标单击画布,设置焦点,,开始收集键盘事件,如果没有本行代码,按下r键是没有反应的,单击画布开始执行
screen.mainloop()
按下r键,画布变成红色

按下a,b键位,可以执行fun1,fun2函数
2.2.键盘上的上下左右分别控制画笔的前进,后退,左转,右转
import turtle
turtle.shape('turtle')
screen=turtle.Screen() #获取画布
screen.bgcolor('yellow') #设置画布背景颜色
#自定义前后左右键位分别对应执行的函数
def up():
turtle.forward(50)
def back():
turtle.backward(50)
def left():
turtle.left(90)
def right():
turtle.right(90)
#调用onkey函数
screen.onkey(up,'Up')
screen.onkey(back,'Down')
screen.onkey(left,'Left')
screen.onkey(right,'Right')
#单击鼠标焦点开始获取键盘事件
screen.listen()
#运行完毕后不关闭screen窗口
screen.mainloop()
3.鼠标点击事件和键盘事件同时存在(可以同时用鼠标或用键盘控制画笔)
使用默认参数,可以让onclick和onkey都使用函数fun,因此下面代码可以通过鼠标点击屏幕让海龟前进50,也可以通过按键盘上的‘r'键:
import turtle
screen=turtle.Screen()
turtle.speed(0)
def fun(x=None,y=None): #使用默认参数
turtle.forward(50)
screen.onclick(fun)
screen.listen()
screen.onkey(fun,'r')
screen.mainloop()
4.使用鼠标和键盘事件,创建一个“蛇追海龟”的游戏
咱们初次接触项目,保留一个概念,就是流程:
项目---->分解问题---->分析解决问题的流程---->代码实现,以后接触到更多编程,就会了解到软件开发流程,软件测试流程等。
蛇追海龟游戏设定:
设定一个初始位置,蛇和海龟有一定距离,海龟使用键盘移动,蛇自动追踪海龟。
问题分析:
1.键盘如何控制海龟移动
2.蛇如何实现追踪海龟的位置
3.如何防止海龟跑出一定范围的画布
4.游戏难度和游戏得分如何设计
本程序中使用到的方法:
1.xcor(),ycor()获取画笔的x,y坐标值
2.sethesading() 朝着坐标方位角改变方向,每次都以x正轴默认开始,顺时针负角度,逆时针正角度
3.towards()方法是获取两个画笔之间的坐标方位角值
4.distance()方法是获取两画笔之间的距离
import turtle
#键盘控制海龟移动
t=turtle.Pen() #设置一个海龟
s=turtle.Pen() #设置一条蛇
t.shape('turtle') #把海龟画笔造型改为‘海龟’
#设定初始位置
t.penup()
t.goto(200,200)
#限定海龟的移动范围,xcor获取画笔的x坐标,ycor获取画笔的y坐标,为了不使代码重复,我们使用一个函数来解决问题
def checkbound(z):
if(z.xcor()>200):
z.goto(200,z.ycor())
if(z.xcor()<-200):
z.goto(-200,z.ycor())
if(z.ycor()>200):
z.goto(z.xcor(),200)
if(z.ycor()<-200):
z.goto(z.xcor(),-200)
#键盘上下左右键位绑定函数,控制海龟的移动
screen=turtle.Screen()
def up():
checkbound(t) #调用函数防止海龟超出范围
t.setheading(90)
t.forward(30)
def down():
checkbound(t)
t.setheading(270)
t.forward(30)
def left():
checkbound(t)
t.setheading(180)
t.forward(30)
def right():
checkbound(t)
t.setheading(0)
t.forward(30)
#设置蛇追踪海龟
while True:
screen.onkey(up,'Up')
screen.onkey(down,'Down')
screen.onkey(left,'Left')
screen.onkey(right,'Right')
#设置画布监听键盘事件开始
screen.listen()
s.speed(5)
#towards方法可以获取两只画笔直线的坐标方位角,setheading方法是朝坐标方位角改变方向,以x正轴为默认初始方向
#distance方法可以获取两只画笔之间的直线距离
#当蛇和海龟的距离小于30时,循环结束
s.setheading(s.towards(t))
s.forward(10)
if(s.distance(t)<=30):
turtle.write('游戏结束,蛇赢了')
break
#设置不让画布关闭
screen.mainloop()
这个程序中,不单击屏幕键盘也可以操作海龟移动,因为蛇会自动移动,让键盘监听到了事件。
我们接下来自己思考如何设定难度分级和游戏得分吧!
这篇博客介绍了如何使用Python通过绑定鼠标点击和键盘事件,实现一个‘蛇追海龟’的游戏。详细讲解了事件的概念,如何绑定鼠标点击获取坐标,以及键盘事件的绑定,包括键盘控制画笔移动。最后,分析了游戏的设计流程和关键实现方法,如坐标方位角和距离计算。
1万+

被折叠的 条评论
为什么被折叠?



