es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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()
Tags:  , ,

Answer

  1. Avatar for 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:

    def carrera():
        while True:
            for corredor in corredores:
                distancia = random.randrange(1,20)
                corredor.avanzar(distancia)
                if corredor.xcor() > 600:
                    # detener a todos los corredores si alguno ha cruzado la línea de meta
                    for c in corredores:
                        c.subir_pluma()
                    time.sleep(5)
                    return  # salir de la función y terminar la carrera
    

    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!

Comments are closed.