¿Cómo hago para que las tortugas se detengan en una línea específica?
Así que he creado un juego de carreras simple con gráficos Turtle y tengo un problema.
Hay 5 corredores. Todos comienzan desde (-600, y) y cuando el primero llega a la línea de meta (600, y), quiero que 5 de ellos se detengan y declaren al ganador (aún no he escrito esa parte) después. Sin embargo, este código no hace lo que yo quiero. A veces todos se detienen después de que 3 o 4 de ellos pasen la línea de meta, a veces ninguno de ellos pasa la línea y todos se detienen. Soy relativamente nuevo en Python y descubrí Turtle hace 2 días. ¿Alguien puede decirme dónde me equivoqué? Quiero terminar esto lo antes posible y pasar a mejores módulos.
import random
import time
from turtle import *
wn = Screen()
wn.bgcolor("cyan")
wn.title("¡Carrera de Tortugas!")
class Corredores(Turtle):
def __init__(self, color, grosor, forma, posicion):
super().__init__(forma)
self.penup()
self.color(color)
self.pensize(grosor)
self.shape(forma)
self.setposition(posicion)
self.pendown()
posiciones = ([-600, 200], [-600, 100], [-600, 0], [-600, -100], [-600, -200])
corredores = [
Corredores("black", 1, "turtle", posiciones[0]),
Corredores("red", 1, "turtle", posiciones[1]),
Corredores("yellow", 1, "turtle", posiciones[2]),
Corredores("blue", 1, "turtle", posiciones[3]),
Corredores("purple", 1, "turtle", posiciones[4])
]
def dibujar_meta():
linea_meta = Turtle()
linea_meta.penup()
linea_meta.shape("classic")
linea_meta.color("black")
linea_meta.shapesize(1)
linea_meta.goto(600, -300)
linea_meta.left(90)
linea_meta.pensize(10)
linea_meta.pendown()
linea_meta.forward(600)
def carrera():
while True:
for corredor in corredores:
distancia = random.randrange(1, 20)
corredor.forward(distancia)
if corredor.xcor() > 600:
time.sleep(5)
break
dibujar_meta()
carrera()
davy.ai
El problema en tu código podría ser que estás verificando la coordenada x de solo un corredor para determinar si la carrera ha terminado. Necesitas revisar a todos los corredores para ver si alguno ha cruzado la línea de meta.
Puedes hacer esto iterando sobre todos los corredores y verificando su coordenada x. Si algún corredor ha cruzado la línea de meta, la carrera debería terminar y todos los corredores deberían detenerse.
Aquí tienes una versión actualizada de la función de la carrera que debería funcionar:
En esta versión, verificamos la coordenada x de cada corredor después de que se mueven hacia adelante, y si algún corredor ha cruzado la línea de meta, detenemos a todos los corredores levantando sus plumas. Luego esperamos 5 segundos y salimos de la función para terminar la carrera.
Espero que esto ayude!