Seite 1 von 1

Hilfe bei Programmierung mit der Turtle-grafik

Verfasst: Samstag 9. Januar 2021, 19:52
von timo7674
Hallo,

ich bin Timo und brauche gerade Hilfe bei einer Programmierung. Ich habe 3 verschiedene Turtles erschaffen und will das die erste sobald eine Pfeiltaste gedrückt wird sich bewegt. Ich dachte, dass das Drücken einer Taste ja nichts mit einer Turtle zu tun hat, sondern erst das Bewegen der ersten Turtle. Aber anscheinend ist das nicht so. Ich habe unten meinen Code eingefügt.
Über Hilfe/Ideen wäre ich sehr dankbar!

Viele Grüße

Timo

from gturtle import *
meinframe = TurtleFrame()

a = Turtle(meinframe)
b = Turtle(meinframe)
c = Turtle(meinframe)


left = 37
right = 39
up = 38
down = 40


a.hideTurtle()
a.penUp()

def draw():
drawImage("sprites/bubble4.png")


while (True):
key = a.getKeyCodeWait()
if key == left:
a.heading(270)
a.fd(10)
a.draw()
elif key == right:
a.heading(90)
a.fd(10)
a.draw()
elif key == up:
a.heading(0)
a.fd(10)
a.draw()
elif key == down:
a.heading(180)
a.fd(10)
a.draw()

Re: Hilfe bei Programmierung mit der Turtle-grafik

Verfasst: Samstag 9. Januar 2021, 21:58
von __blackjack__
@timo7674: Wo ist denn das `gturtle`-Modul her und was ist denn das konkrete Problem? Gibt es eine Fehlermeldung? Falls ja welche? Oder verhält sich das Programm nicht so wie Du es erwartest? Falls ja, was erwartest Du? Und wie weicht das Programmverhalten davon ab?

Meine Glaskugel sieht da eine Fehlermeldung. An welcher Stelle in der Dokumentation beziehungsweise dem/den Tutorials zu dem Python-Derivat, das Du verwendest, bist Du denn auf die Idee gebracht worden, dass man das so schreiben kann, wo der Fehler auftritt?

Was soll das `mein` in `meinframe` bringen? Gibt es auch andere Frames als ”Deinen”? Ausserdem sollte man keine Sprachen mischen, schon gar nicht im gleichen Namen.

`a`, `b`, und `c` sind schlechte, weil absolut nichtssagende Namen. Was bedeuten diese Turtle-Objekte? Das sollte man am Namen ablesen können.

Konstanten werden KOMPLETT_GROSS geschrieben und üblicherweise nach den Importen, vor dem restlichen Code definiert. Funktionsdefinitionen und Code mischt man auch nicht, weil das unübersichtlich ist, und auch das Hauptprogramm sollte in einer Funktion stehen.

Anmerkungen zum Quelltext: Bedingungen bei ``while`` brauchen keine Klammern.

In den ``if``/``elif``-Zweigen steht jeweils fast identischer Code. Nur der Winkel bei der Ausrichtung der Schildkröte unterscheidet sich, und der hängt direkt vom Tastencode ab. Man kann also eine Abbildung von Tastencode auf Winkel als Datenstruktur anlegen und den Code damit deutlich vereinfachen.

Code: Alles auswählen

from gturtle import *

KEYCODE_UP = 38
KEYCODE_DOWN = 40
KEYCODE_LEFT = 37
KEYCODE_RIGHT = 39

KEY_CODE_TO_ANGLE = {
    KEYCODE_UP: 0,
    KEYCODE_DOWN: 160,
    KEYCODE_LEFT: 270,
    KEYCODE_RIGHT: 90,
}


def draw():
    drawImage("sprites/bubble4.png")


def main():
    frame = TurtleFrame()
    turtle = Turtle(frame)
    turtle.hideTurtle()
    turtle.penUp()
    while True:
        key_code = turtle.getKeyCodeWait()
        angle = KEY_CODE_TO_ANGLE.get(key_code)
        if angle is not None:
            turtle.heading(angle)
            turtle.fd(10)
            turtle.draw()


main()

Re: Hilfe bei Programmierung mit der Turtle-grafik

Verfasst: Samstag 9. Januar 2021, 23:17
von Dennis89
@__blackjack__ Sorry für die Zwischenfrage, aber dass ist jetzt das erste Mal, das ich in deinem Beitrag einen *-Import sehe. Gibt es dafür einen Grund oder hast du "einfach" nur dein Eingangs-Code so weit wie möglich original lassen wollen?

Danke und Grüße
Dennis

Re: Hilfe bei Programmierung mit der Turtle-grafik

Verfasst: Samstag 9. Januar 2021, 23:52
von __blackjack__
@Dennis89: Der OP verwendet TigerJython, das hat nicht viel mit sauberer, normaler Programmierung zu tun. Diese ganze Umgebung baut im Grunde darauf, dass die Objekte aus dem `gturtle`-Modul global zur Verfügung stehen, und man importiert da auch nichts anderes, denn wenn man anfängt andere, normale Module zu brauchen, ist der Punkt erreicht, wo man TigerJython in die Tonne kloppt und ein echtes Python verwendet. Oder Java.

Re: Hilfe bei Programmierung mit der Turtle-grafik

Verfasst: Sonntag 10. Januar 2021, 09:20
von Dennis89
@__blackjack__ Vielen Dank für die Erklärung.