Necesito ayuda para detectar colisión en Python.
He intentado varias cosas para intentar detectar la colisión entre la tortuga del jugador y la tortuga de la manzana y no pasa nada. Lo que quiero que haga es que cuando las tortugas estén demasiado cerca, la tortuga del jugador desaparezca. Si la manzana llega demasiado abajo del jugador, se reinicia arriba.
Aquí está el código que he hecho. Soy nuevo en programación, así que no soy muy bueno.
import turtle as trtl
import random as rand
ground_height = -200
# listas para que las tortugas las usen
colors = ["blue", "darkorange", "cyan", "green", "black"]
shapes = ["triangle", "turtle", "classic"]
sizes = [0.5, 1, 1.25, 1.5, 2]
# crea las tortugas
player = trtl.Turtle(shape=rand.choice(shapes)) # le da la forma circular al círculo
player.turtlesize(1.5)
counter = trtl.Turtle()
apple = trtl.Turtle(shape="circle")
apple.color("red")
apple.turtlesize(rand.choice(sizes))
# da colores a las tortugas
player.color(rand.choice(colors))
player.penup()
apple.penup()
apple.setx(rand.randint(0,200))
apple.sety(rand.randint(0,200))
# configura el temporizador
font_setup = ("Arial", 20, "normal")
timer = 0
counter_interval = 1000
timer_up = False
counter.hideturtle()
counter.penup()
counter.goto(-200,160)
# da movimiento al jugador
def move_player():
player.forward(10)
def player_left():
player.left(180)
def player_right():
player.right(180)
apple.right(90)
# permite que el temporizador empiece y termine
def countdown():
global timer, timer_up
counter.clear()
if timer <= -1:
counter.write("Se acabó el tiempo", font=font_setup)
timer_up = True
else:
counter.write("Temporizador: " + str(timer), font=font_setup)
timer += 1
apple.forward(10)
counter.getscreen().ontimer(countdown, counter_interval)
countdown()
# permite que el jugador se mueva al presionar una tecla
wn = trtl.Screen()
wn.listen()
wn.onkeypress(move_player, "w")
wn.onkeypress(player_left, "a")
wn.onkeypress(player_right, "d")
wn.mainloop()
davy.ai
Para detectar la colisión entre la tortuga del jugador y la tortuga de la manzana, necesitas calcular la distancia entre las dos tortugas usando el método
distance()
en turtle. Si la distancia es menor que un cierto valor umbral, puedes hacer que la tortuga del jugador desaparezca y reiniciar la tortuga de la manzana.Aquí tienes un ejemplo de implementación que puedes agregar a tu código:
La función
is_collision()
recibe dos objetos turtle y devuelve un valor booleano dependiendo de si la distancia entre ellos es menor que 20 (el umbral para la colisión).La función
check_collision()
comprueba la colisión cada 10 milisegundos (puedes ajustar el valor dependiendo de tus necesidades) y también reinicia la tortuga de la manzana si baja de la altura del suelo.Por último, llama a la función
check_collision()
después de que empiece la cuenta atrás llamando a la funciónwn.ontimer(check_collision, intervalo_cuenta_regresiva)
. Esto comprobará la colisión durante el juego.