Seite 1 von 1

turtle.distance(other_turtle)

Verfasst: Montag 18. Mai 2020, 20:50
von unknown_user_123
Hallo,
zwei Fragen:
1. Gibt es in diesem Forum einen extra bereich für Turtle?
2. Ich wollte einmal die Methode/Funktion (Ich weiß nicht genau, was das ist) distance ausprobieren.
(Ich weiß, dass der Code darum herum sehr schlecht ist. Ich wollte es, aber wie gesagt einfach mal ausprobieren)
Mein Problem ist, dass er die Meldung "gefangen" nie ausgibt Wisst ihr woran es liegt?

Code: Alles auswählen

import turtle as t
import random

def settings(player):
    player.penup()
    player.shape("square")
    player.color((random.randint(0, 101)/100, random.randint(0, 101)/100, random.randint(0, 101)/100))

    
player = t.Turtle()
bad = t.Turtle()
settings(player)
settings(bad)
player.setpos((0, 100))
bad.setpos((0, -100))


#player go
def go_right():
    player.forward(100)
def go_left():
    player.backward(100)
def go_up():
    player.left(90)
    player.forward(100)
    player.right(90)
def go_down():
    player.right(90)
    player.forward(100)
    player.left(90)
    

def game():
    while player.distance(bad) <= 0:
        print("gefangen")
    t.onkey(go_left, "a")
    t.onkey(go_up, "w")
    t.onkey(go_down, "s")
    t.onkey(go_right, "d")
    t.listen()
    
game()
t.mainloop()
Danke schon mal für die Antwort!!

Re: turtle.distance(other_turtle)

Verfasst: Montag 18. Mai 2020, 21:43
von unknown_user_123
Dies passiert auch wenn man die Zeile

Code: Alles auswählen

while player.distance(bad) <= 0
durch

Code: Alles auswählen

if player.distance(bad) <= 0
ersetzt

Re: turtle.distance(other_turtle)

Verfasst: Montag 18. Mai 2020, 22:58
von __blackjack__
@unknown_user_123: Kleiner 0 kann eine Entfernung nie werden. Und wenn man den Spieler auf (0, 100) und den Bösen auf (0, -100) setzt, dann ist die Entfernung ja offensichtlich nicht ≤0, also warum sollte dann "gefangen" ausgegeben werden?

Re: turtle.distance(other_turtle)

Verfasst: Dienstag 19. Mai 2020, 04:44
von sparrow
@unknown_user_123: Ich glaube, dein Verständnisproblem liegt darin, wann die Prüfung durchgeführt wird.

Die Prüfung mit if ist übrigens richtig. Würdest du in eine Schleife eintreten, wäre sie, so wie sie hier gezeigt wird, endlos. Dein Programm würde hängen und ausschließlich die Meldung ausgeben.

Aber grundsätzlich prüfst du an der falschen Stelle. Lass dir doch mal direkt vor der Zeile mit dem if den Wert ausgeben. Und dann schau mal, wie oft der ausgegeben wird. So siehst du wann und wie oft die Abfrage geprüft wird.