turtle.distance(other_turtle)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
unknown_user_123
User
Beiträge: 27
Registriert: Dienstag 14. April 2020, 09:32

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!!
unknown_user_123
User
Beiträge: 27
Registriert: Dienstag 14. April 2020, 09:32

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
Benutzeravatar
__blackjack__
User
Beiträge: 14005
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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?
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Benutzeravatar
sparrow
User
Beiträge: 4529
Registriert: Freitag 17. April 2009, 10:28

@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.
Antworten