简体   繁体   中英

Python Turtle Race

I got an assignment, where I have to make a "turtle race" with the turtle module. I need to implement a winner and an output of the Winner plus a restart function.

My code:

import turtle
import random

turtles = []

def setup():
    global turtles
    startline = -480 
    turtle1 = turtle.Turtle()
    turtle1.color("red")
    turtle1.shape("turtle")
    turtle1.penup()
    turtle1.setpos(startline,-40)
    turtle1.pendown()
    turtles.append(turtle1)

    turtle2 = turtle.Turtle()
    turtle2.color("green")
    turtle2.shape("turtle")
    turtle2.penup()
    turtle2.setpos(startline,-20)
    turtle2.pendown()
    turtles.append(turtle2)

    turtle3 = turtle.Turtle()
    turtle3.color("green")
    turtle3.shape("turtle")
    turtle3.penup()
    turtle3.setpos(startline,-20)
    turtle3.pendown()
    turtles.append(turtle3)

    turtle4 = turtle.Turtle()
    turtle4.color("green")
    turtle4.shape("turtle")
    turtle4.penup()
    turtle4.setpos(startline,-20)
    turtle4.pendown()
    turtles.append(turtle4)

def race():
    global turtles
    winner = False
    while not winner:
        for singleTurtle in turtles:
            singleTurtle.forward(random.randint(0,4))
            print(singleTurtle.fillcolor(),singleTurtle._position)

finishline = 200
stampsize = 20
squaresize = 15

for i in range(10):
    turtles.setpos(finishline, (150 - (i * squaresize * 2)))
    turtles.stamp()

for j in range(10):
    turtles.setpos(finishline + squaresize, ((150 - squaresize) - (j * squaresize * 2)))

turtles.hideturtle()

setup()
race()

turtles.mainloop()

Now, I am struggling on the finish line, and would kindly ask one of you to give me some support on to, what I am missing or doing completely wrong.

You can't call a Turtle object method on a list object, even if the list only consists of Turtle objects.

Instead, use a for loop to loop over the turtles list, and do the commands on each element of the list individually.

So change this part:

for i in range(10):
    turtles.setpos(finishline, (150 - (i * squaresize * 2)))
    turtles.stamp()

for j in range(10):
    turtles.setpos(finishline + squaresize, ((150 - squaresize) - (j * squaresize * 2)))

turtles.hideturtle()

To this:

for i in range(10):
    for turtle in turtles:
        turt.setpos(finishline, (150 - (i * squaresize * 2)))
        turt.stamp()

for j in range(10):
    for turt in turtles:
        turt.setpos(finishline + squaresize, ((150 - squaresize) - (j * squaresize * 2)))

for turt in turtles:
    turt.hideturtle()

So altogether:

import turtle
import random

turtles = []

def setup():
    global turtles
    startline = -480 
    turtle1 = turtle.Turtle()
    turtle1.color("red")
    turtle1.shape("turtle")
    turtle1.penup()
    turtle1.setpos(startline,-40)
    turtle1.pendown()
    turtles.append(turtle1)

    turtle2 = turtle.Turtle()
    turtle2.color("green")
    turtle2.shape("turtle")
    turtle2.penup()
    turtle2.setpos(startline,-20)
    turtle2.pendown()
    turtles.append(turtle2)

    turtle3 = turtle.Turtle()
    turtle3.color("green")
    turtle3.shape("turtle")
    turtle3.penup()
    turtle3.setpos(startline,-20)
    turtle3.pendown()
    turtles.append(turtle3)

    turtle4 = turtle.Turtle()
    turtle4.color("green")
    turtle4.shape("turtle")
    turtle4.penup()
    turtle4.setpos(startline,-20)
    turtle4.pendown()
    turtles.append(turtle4)

def race():
    global turtles
    winner = False
    while not winner:
        for singleTurtle in turtles:
            singleTurtle.forward(random.randint(0,4))
            print(singleTurtle.fillcolor(),singleTurtle._position)

finishline = 200
stampsize = 20
squaresize = 15

for i in range(10):
    for turtle in turtles:
        turt.setpos(finishline, (150 - (i * squaresize * 2)))
        turt.stamp()

for j in range(10):
    for turt in turtles:
        turt.setpos(finishline + squaresize, ((150 - squaresize) - (j * squaresize * 2)))

for turt in turtles:
    turt.hideturtle()

setup()
race()

turtle.mainloop()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM