【问题标题】:How to declare winner in Python turtle race如何在 Python 海龟比赛中宣布获胜者
【发布时间】:2019-03-02 11:34:41
【问题描述】:

我正在使用 Python 模块“turtle”创建一个基本的海龟程序。我遇到的唯一问题是如何宣布获胜者。

我将尝试解释我的程序:我开始制作一些垂直线和最后的“终点线”。然后我使用了 3 个形状并使用randint() 将这些海龟向前移动以进行比赛。代码如下:

from turtle import *
from random import randint

speed(0)
penup()
goto(-100,200)
for step in range(15):
    write(step, align='center')
    right(90)
    forward(10)
    pendown()
    forward(160)
    penup()
    backward(170)
    left(90)
    forward(20)

goto(200,250)
write("Finish Line", align='center')
pendown()
right(90)
forward(300)

vince = Turtle()
vince.color('red')
vince.shape('turtle')
vince.penup()
vince.goto(-120,160)
vince.pendown()

lawliet = Turtle()
lawliet.color('blue')
lawliet.shape('turtle')
lawliet.penup()
lawliet.goto(-120,130)
lawliet.pendown()

boyka = Turtle()
boyka.color('green')
boyka.shape('turtle')
boyka.penup()
boyka.goto(-120,100)
boyka.pendown()

for turn in range(100):
    speed(0)
    vince.forward(randint(1,5))
    lawliet.forward(randint(1,5))
    boyka.forward(randint(1, 5))

问题是:我想声明赢得比赛的形状。但是当我查看 Turtle 库时,没有内置函数可以这样做。有没有办法宣布这场比赛的获胜者?

【问题讨论】:

    标签: python turtle-graphics


    【解决方案1】:

    有很多方法可以做到这一点。您需要两件事是终点线的 x 坐标 (200) 和海龟的 x 坐标 turtle.xcor()。下面是一个简单的解决方案,其中第一只重心超过终点线的乌龟变成金币,表示胜利:

    from turtle import Screen, Turtle
    from random import randint, choice
    
    track = Turtle(visible=False)
    track.speed('fastest')
    track.penup()
    track.goto(-100, 200)
    
    for step in range(15):
        track.write(step, align='center')
        track.right(90)
        track.forward(10)
        track.pendown()
        track.forward(160)
        track.penup()
        track.backward(170)
        track.left(90)
        track.forward(20)
    
    track.goto(200, 250)
    track.write("Finish Line", align='center')
    track.pendown()
    track.right(90)
    track.forward(300)
    
    vince = Turtle('turtle')
    vince.speed('fastest')
    vince.color('red')
    vince.penup()
    vince.goto(-120, 160)
    vince.pendown()
    
    lawliet = Turtle('turtle')
    lawliet.speed('fastest')
    lawliet.color('blue')
    lawliet.penup()
    lawliet.goto(-120, 130)
    lawliet.pendown()
    
    boyka = Turtle('turtle')
    boyka.speed('fastest')
    boyka.color('green')
    boyka.penup()
    boyka.goto(-120, 100)
    boyka.pendown()
    
    screen = Screen()
    
    while True:
        turtle = choice([vince, lawliet, boyka])
        turtle.forward(randint(1, 5))
        if turtle.xcor() > 200:
            break
    
    turtle.color('gold')
    
    screen.exitonclick()
    

    【讨论】:

    • 感谢您的帮助。这是一种有趣的方式。但是我有一个问题: 1. 为什么我们使用变量'track'而不是直接声明? 2、Screen()的作用是什么?而且我还想在程序执行后打印出获胜者
    • @VinceD, 1. 你使用的是未命名的default海龟——当我切换到OOP风格import时,这个海龟不再可用; 2.Screen()是屏幕单例对象,响应.title().bgcolor()等特定方法。这里我只需要一个方法调用。最后,你可以用任何你想要的方式来表示你的获胜者,我只是提供了一个例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多