Variablen werden nicht übergeben Python?
Hi liebe Community,
ich habe eine Frage zum Thema Programmieren:
Ich versuche ein Platformerspiel in Python zu programmieren und habe jetzt das Problem, dass eine Variable von einem Unterprogramm nicht zurückgegeben wird.
Es geht um die Variable ontile, die True zurückmelden soll, wenn der Spieler mit einem Hindernis (tile) kollidiert. In Zeile 19-21 soll diese verändert werden und in Zeile 57 und 65 wird sie benötigt. Ich habe jetzt schon viel zum Übergeben von Variablen gelesen, aber kann es irgendwie nicht umsetzen.
Es wäre toll, wenn mir jemand, der etwas mehr Ahnung hat als ich, sich das einmal angucken könnte. 🙏
Danke im Voraus.
VG
P.S.: Meine Dateien sind unter diesem OneDrive-Link zu finden: https://1drv.ms/u/s!AvxsuMVLqGyjbEzboNkycVG8XPQ?e=HpAOmb
Hier ist bei mir noch eins…
Ist der Link noch aktuell?
Ich sehe in der Zeile 57 & 65 keine Erwähnung von ontile
Eigentlich schon aber es ist direkt vor der ersten # Reihe
Bei mit werden nur 2 Erwähnungen gefunden.
if sprungvar < 0:
n = -1
playerY -= (((sprungvar**2)*0.05)*n)
if ontile == False:
sprungvar -= 1
screen.fill(BLAU)
1 Antwort
Also eines vorweg: Ich würde dir deutlich davon abraten, globale Variablen zum Datenaustausch zu nutzen. Du solltest es schon bei deinem aktuellen Stand merken, dass es in Richtung Chaos geht.
Besser ist der Weg über Parameter und Rückgabewerte.
Beispiel:
def get_sum(number_one, number_two):
result = number_one + number_two
return result
Jede Funktion sollte nur eine einzige Aufgabe erfüllen, also maximal nur einen Wert zurückliefern (deine Funktion hitrefresh liefert zwei: gameover und tile).
So werden Funktionen flexibler und können tatsächlich (für mehrere Anwendungsfälle) wiederverwendet werden.
Teile deinen Code zudem in mehr Funktionen auf, statt Abgrenzungen (#) einzubauen. Zwischen jeder Funktionsdefinition wird eine leere Zeile gesetzt, dann wird das Programm auch übersichtlicher.
Zuletzt noch zu deinem Problem: Man kann wohl annehmen, dass die Funktion hitrefresh nicht aufgerufen wird oder keine Kollision stattfindet. Durchlaufe das Programm via Debugger oder setze dir Debugausgaben (print) in das Programm, um den Verlauf zur Laufzeit nachvollziehen zu können.
Weißt du zufällig wie man alle mit # getrennte Abschnitte in ein Unterprogramm bekommt?