Pfeiltasten pygame

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
hannah2001
User
Beiträge: 9
Registriert: Sonntag 16. November 2014, 21:52

Hallo,

im Programmieren bin ich noch ganz neu, denn ich hab mir erst vor kurzem ein Buch besorgt, mit dem ich jetzt lerne, mit Python Spiele zu programmieren. In dem Buch gibt es ein Spiel mit pygame vorgegeben, dass ich abgetippt habe, um es auszuprobieren. In dem Spiel geht es um eine Skifahrer, der einen Berg herrunterfährt. Dabei benutzt man für die Lenkung die Pfeiltasten. Doch bei mir klappt es irgendwie nicht und ich weiß echt nicht, woran das liegt. Hier sind die Zeilen aus dem Spiel, in denen die Tastendrücke vorkommen:

Code: Alles auswählen

if event.key == pygame.K_LEFT:
    geschwindigkeit = skier.wende(-1)
elif event.key == pygame.K_RIGHT:
    geschwindigkeit = skier.wende(1)
Ich hoffe, jemand kann mir helfen, da ich wirklich noch nicht allzuviel davon verstehe.
Vielen Dank schonmal im Voraus :D
Zuletzt geändert von Anonymous am Sonntag 16. November 2014, 22:07, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@hannah2001: Die Zeilen helfen nicht wirklich weiter. Werden die denn überhaupt ausgeführt? In welchem Kontext? Was ist `skier`? Versuchst Du tatsächlich Python zu lernen in dem Du mit einem kompletten Spiel inklusive objektorientierter Programmierung anfängst, beziehungsweise das abtippst ohne überhaupt die Grundlagen zu verstehen?
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Es wäre sinnvoller den kompletten Code zu zeigen oder wenigstens zu sagen, was nicht funktioniert bzw. wie sich das äußert. Ich hab das Buch nicht und vermutlich auch die Mehrheit der hier anwesenden nicht.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
hannah2001
User
Beiträge: 9
Registriert: Sonntag 16. November 2014, 21:52

Naja,
Also in dem Spiel fährt man, wie schon gesagt, einen Berg mit einem Skifahrer herunter und diesen sollte man mit den Pfeiltasten steuern können. Doch obwohl in dem Programm vorkommt, dass der Skifahrer nach links fährt, wenn man auf die linke Pfeiltaste drückt und auch das gleiche mit rechts, klappt das irgendwie nicht. Wenn ich das Spiel starte, grht alles perfekt, ich kann den Skifahrer nur nicht steuern.
@BlackJack: Die Grundlagen von Python kann ich natürlich und ich verstehe auch dieses Programm für das Spiel (ich bin ja nicht so blöd und tippe irgendetwas ab, was ich nicht verstehe). Mein Problem ist lediglich, dass ich diesen Skifahrer einfach nicht steuern kann, obwohl das eigentlich gehen sollte. Und da ich auch noch nicht ganz so alt bin und bevor ich das Buch bekommen habe, noch keine Kenntnisse in dem Bereich hatte, wäre es nett, wenn ihr mir trotzdem bitte helfen könntet.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@hannah2001: mit dem Abschnitt den Du da zeigst, kann leider niemand, der das Buch nicht hat, etwas anfangen. Es sieht zwar komisch aus, aber ob da wirklich was falsch dran ist, kann man so nicht sagen. Du kannst aber selbst herausfinden, was falsch ist, indem Du das Programm testest, das heißt, schaust, ob jede Funktion auch das tut, was Du erwartest. Dazu sind debug-Ausgaben nützlich, ob bestimmte Punkte im Code auch erreicht werden und welche Werte die Variablen an diesen Punkten haben.
hannah2001
User
Beiträge: 9
Registriert: Sonntag 16. November 2014, 21:52

@Sirius3: gut, danke, das werde ich heute nachmittag mal ausprobieren. :D
hannah2001
User
Beiträge: 9
Registriert: Sonntag 16. November 2014, 21:52

@Sirius3: Ich habs mal mit einem debugger probiert (weiß allerdings nicht so genau, ob ich das richtig gemcht habe, wie gesgat, ich habe im Programmieren noch keine Vorkenntnisse). Auf jeden Fall war in meinem Programm kein Fehler, doch trotzdem klappt das nicht mit den Pfeiltasten. Am besten beschreibe ich noch einmal ganz genau mein Problem:
Also, ich habe ein Programm, in dem ein Skifahrer einen Berg herunterfahren soll und dabei halt Fahnen einsammeln kann. In diesem Programm kommen folgende Zeilen vor, in denen es um die Tastendrücke geht:

Code: Alles auswählen

#startet Hauptschleife
aktiv = True
while aktiv:
    clock.tick(30) #aktualisiert die Grafik 30 Mal pro Sekunde
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            aktiv = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT: #mit linker Pfeiltaste nach links wenden
                    geschwindigkeit = skier.wende(-1)
                elif event.key == pygame.K_RIGHT: #mit rechter Pfeiltaste nach rechts wenden
                   geschwindigkeit = skier.wende(1)
                   skier.bewege(self, geschwindigkeit)
Wenn ich das Programm starte, wird es perfekt ausgeführt, mir wird keine Fehlermeldung oder sonstiges ausgegeben, das einzige Problem ist nur, dass nichts passiert, wenn ich auf die Pfeiltasten drücke. Und das kann eigentlich nicht sein. Und jetzt frage ich mich, warum das mit den Pfeiltasten nicht funktioniert.
Zuletzt geändert von Anonymous am Montag 17. November 2014, 17:17, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
hannah2001
User
Beiträge: 9
Registriert: Sonntag 16. November 2014, 21:52

Könnte das auch einfach an meinem PC oder so liegen?
BlackJack

@hannah2001: Das ist ganz offensichtlich falsch eingerückt. Damit das ``if`` in Zeile 8 wahr ist müsste ``event.type`` gleichtzeitig gleich `pygame.QUIT` *und* `pygame.KEYDOWN` sein.
hannah2001
User
Beiträge: 9
Registriert: Sonntag 16. November 2014, 21:52

@BlackJack: Sorry, aber wie genau meinst du das jetzt? Ich kann dir leider schlecht zeigen, wie ich denk, wie du es meinst, weil ich nicht genau weiß, wie das hier mit diesen Code funktioniert, also mit den Farben und Zeilen. Ich bin ja auch erst seit gestern hier.
BlackJack

@hannah2001: In Zeile 6 wird geprüft ob der `event.type` den Wert `pygame.QUIT` hat, und der tiefer eingerückte Quelltext danach wird nur dann ausgeführt wenn das wahr ist. In Zeile 8 wird dann geprüft ob der `event.type` den Wert `pygame.KEYDOWN` hat. Was er nicht hat, denn das wird ja nur ausgeführt wenn er den Wert `pygame.QUIT` hat. Damit wird der nach Zeile 8 tiefer eingerückte Code niemals ausgeführt. Was ja auch genau Deiner Beobachtung entspricht.
hannah2001
User
Beiträge: 9
Registriert: Sonntag 16. November 2014, 21:52

@BlackJack: Aber wenn ich das so mache, ist das ein Fehler im Programm.
BlackJack

@hannah2001: So wie es da steht ist das ein Fehler, ja. Das macht so keinen Sinn. Du musst halt überlegen wie es sinnvoller wäre.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Für mich sieht das ziemlich eindeutig so aus, als gehöre der Block mit "if event.type == pygame.KEYDOWN:" auf die gleiche Ebene wie das "if event.type == pygame.QUIT:". Die Bedeutung der Einrückung ist dir schon klar, oder?
hannah2001
User
Beiträge: 9
Registriert: Sonntag 16. November 2014, 21:52

@/me: Aber wenn ich das so mache, ist das ein Fehler im Programm.
hannah2001
User
Beiträge: 9
Registriert: Sonntag 16. November 2014, 21:52

@BlackJack: Ok, ich schaue mir die Stelle noch einmal genauer an.
Antworten