python turtle 乌龟赛跑_用 Python Turtle 模块做小游戏 (2) - 画笔和乌龟赛跑

上一篇 豆子学习了基本的Turtle的使用,比如移动,定位,色彩等等。这次来看看他对事件的处理功能。

首先来看看个小游戏,通过几个按键的事件,实现 w(前进),s ( 后退),a (左转),d (右转),z ( 清屏)的画图效果。注意自定义的函数不可以带有参数!

效果图

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

代码如下

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个颜色的海龟进行跑步比赛,竞猜哪个颜色的海龟会赢,看看谁会得第一。

效果图如下

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值