Python Turtle 随机乌龟赛跑:教程与代码实现
2025-01-15 13:03:28
使用Python Turtle实现随机乌龟赛跑
如何使用Python的turtle模块绘制五个乌龟,并让他们随机比赛,最终显示排名和用时?这个需求在游戏开发中很常见,可以提供直观的图形反馈。 本文会逐步分析并解决这个问题,让五个小乌龟随机赛跑,最终展示排名与耗时。
步骤一: 初始化与基本设置
为了进行乌龟赛跑,需要设置好赛道、起点和参赛者(即乌龟)。初始化的关键在于确保每只乌龟都有不同的起始位置,并使用不同的颜色来区分它们。为了使过程可观察,将逐步绘制背景与乌龟。
代码展示了如何利用turtle
模块绘制赛道线和代表乌龟的不同颜色的圆形。这些乌龟将从不同的位置开始。需要注意的是,bgcolor('black')
将背景设置为黑色,让后面的赛道线和乌龟更加醒目。célvonal()
函数集中定义了整个绘制过程。
步骤二: 让乌龟移动
接下来的步骤是使乌龟开始移动。 可以利用Python的 random
模块来控制每只乌龟的移动距离。同时,使用一个循环来模拟赛跑过程。 每个回合,每个乌龟都以随机距离移动,然后检查是否到达了终点线。 使用字典存储每一只乌龟到达终点时的顺序以及时间。
代码示例:
import turtle
import random
import time
def race():
finish_line_x = 225 # 终点线的 x 坐标,需要根据您的代码调整
colors = ['white', 'green', 'blue', 'orange', 'purple']
turtles = []
positions = [-200, -100, 0, 100, 200]
# 初始化乌龟
for i in range(5):
t = turtle.Turtle()
t.shape('turtle')
t.color(colors[i])
t.penup()
t.goto(positions[i], -270) # 起跑线调整y值以配合你的起点设计
t.setheading(90) # 朝上
turtles.append(t)
t.pendown()
results = {} # 记录完成时间与排名
finish_order = 1 # 排名
start_time = time.time() # 记录开始时间
while len(results) < 5: # 只有5只都跑完才能停止
for turtle_index,t in enumerate(turtles):
if turtle_index in results: # 如果已经完成,不跑
continue
move_distance= random.randint(1,20) # 每轮移动随机步长
t.forward(move_distance)
if t.ycor() > finish_line_x - 50: # 检查乌龟是否越过终点线 - 根据你自己的设计更改数字
end_time=time.time()
results[turtle_index]= (finish_order,round(end_time-start_time,2)) # 完成时间
finish_order += 1
return results
def display_results(results):
screen = turtle.Screen()
writer=turtle.Turtle()
writer.hideturtle() #隐藏箭头
writer.penup()
writer.goto(-150,-200) # 从哪个坐标开始写文字
writer.pendown()
for rank in sorted(results.items(), key=lambda item: item[1][0]): # sort结果集,按照排名排序
turtle_index, result=rank
final_rank ,final_time= result
color_text = colors[turtle_index].capitalize() # 第一步 按照名次 乌龟的颜色 + 名次+用时
writer.pencolor(colors[turtle_index])
writer.write(f"Rank {final_rank}: {color_text} turtle Time: {final_time} sec.",font=("Arial", 16, "normal") ,move = False)
writer.penup()
writer.goto(writer.xcor(),writer.ycor()-30)
writer.pendown()
#执行
colors = ['white', 'green', 'blue', 'orange', 'purple'] # 确保这里的颜色与绘制时一致
turtle.speed(0) # 将绘制的速度调整到最快,这句放到全局变量设置区
célvonal()
results= race()
display_results(results)
turtle.done()
在race
函数中,可以看到time.time()
用于获取开始时间。在每只乌龟冲过终点时,也会记录下结束时间,并将这个时间和排名一起记录在 results
字典中。在显示排名时,需要按照排名的顺序读取数据,因此使用了 sorted
和 lambda
进行排序,然后输出结果。 另外设置turtle的speed(0)
为最快绘制速度,使得代码更高效。display_results()
输出排名, 时间等信息到画布。
运行结果
运行此代码后,窗口会先绘制出赛道和乌龟。当所有乌龟跑过终点线后,会在下方显示所有乌龟的排名及耗时。
安全与注意事项
在执行涉及随机性的操作时,需留意程序的执行效果和稳定性。 务必对代码进行充分测试,尤其是在处理涉及到时间和位置的时候,确保参数和边界的有效性。 为了清晰理解和调试代码,可以增加一些调试打印,比如在终端打印每只乌龟移动的步数,或者到达的时间,帮助验证程序逻辑。