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.