上一篇 豆子学习了基本的Turtle的使用,比如移动,定位,色彩等等。这次来看看他对事件的处理功能。
首先来看看个小游戏,通过几个按键的事件,实现 w(前进),s ( 后退),a (左转),d (右转),z ( 清屏)的画图效果。注意自定义的函数不可以带有参数!
效果图
代码如下
from turtle import Screen, Turtle
import random
tim = Turtle()
#往前
def move_forward():
tim.forward(10)
#往后
def move_backward():
tim.backward(10)
#右转
def move_clockwise():
tim.setheading(tim.heading() + 10)
#左转
def move_counterclockwise():
tim.setheading(tim.heading() - 10)
#清屏
def clear_screen():
tim.clear()
tim.penup()
tim.home()
tim.pendown()
screen = Screen()
screen.listen()
#输入按键,触发对应的函数
screen.onkey(key='w', fun=move_forward)
screen.onkey(key='s', fun=move_backward)
screen.onkey(key='d', fun=move_clockwise)
screen.onkey(key='a', fun=move_counterclockwise)
screen.onkey(key='z', fun=clear_screen)
#点击屏幕退出
screen.exitonclick()
接下来,我们再来看一个比较有趣的小游戏,我们可以生成7个颜色的海龟进行跑步比赛,竞猜哪个颜色的海龟会赢,看看谁会得第一。
效果图如下
from turtle import Screen, Turtle
import random
#初始化一下我们的画布,默认的尺寸太大了,这里修改一下初始尺寸
screen = Screen()
screen.setup(width=500, height=400)
# screen 提供的text输入界面
userbet = screen.textinput(title="Make your bet", prompt="Which turtle will ? Enter a color:")
print(userbet)
#自定义7个彩虹的颜色
colors=["red","orange","yellow","green","blue","Indigo","Violet"]
#定义一个列表,保存我们的海龟实例
all_turtles=[]
#对每一个颜色,我们都生成一个海龟的实例,放入列表
for color in colors:
#我们可以用他默认集成的海龟图案,也可以自定义背景图和其他的图
t=Turtle(shape='turtle')
#我们只需要看海龟跑,但是不需要看他跑的痕迹
t.penup()
#颜色
t.color(color)
#我们需要从屏幕的左边开始跑,所以一开始要把每只海龟放在最左边,X坐标大概-230,Y坐标从下-90往上30个坐标放一个
t.goto(-230,colors.index(color)*30-90)
all_turtles.append(t)
is_race_on=False
if userbet:
is_race_on=True
#循环跑,每只海龟每次随机跑0-10的距离,直到一只海龟跑到边界
while is_race_on:
for turtle in all_turtles:
#海龟本身的宽度是40,所以到达边界的时候是 250-40/2=230
#到达边界之后就清屏,弹出一个川皇的庆祝图
if turtle.xcor() > 230:
is_race_on = False
screen.clear()
screen.bgpic("tenor.gif")
winner_color=turtle.pencolor()
if winner_color == userbet:
print(f"You've win! The {winner_color} turtle is the winner")
else:
print(f"You've lost! The {winner_color} turtle is the winner")
rand_distance = random.randint(0,10)
turtle.forward(rand_distance)
screen.exitonclick()