plusben / hamster-game

Playing around with pygame and the Hamster-Game logic
GNU General Public License v3.0
2 stars 1 forks source link

Hamster bewegt sich nicht und kollidiert ständig mit Hindernissen #1

Open plusben opened 7 months ago

plusben commented 7 months ago

In unserem pygame-basierten Spiel haben wir ein Problem, bei dem der Hamster korrekt im Level erscheint, sich aber nicht wie erwartet bewegt. Anstatt sich frei im Level zu bewegen, scheint der Hamster sofort mit einem oder mehreren Hindernissen zu kollidieren und bleibt dann an Ort und Stelle. Schritte zur Reproduktion:

Starten Sie das Spiel.
Das Level wird generiert, und der Hamster erscheint auf dem Bildschirm.
Versuchen Sie, den Hamster zu bewegen (z.B. mit Tastatureingaben).

Erwartetes Verhalten: Der Hamster sollte sich frei im Level bewegen können, ohne sofort mit Hindernissen zu kollidieren.

Tatsächliches Verhalten: Sobald das Level geladen ist, kollidiert der Hamster sofort mit einem Hindernis und bewegt sich nicht mehr, unabhängig von den Benutzereingaben.

Zusätzliche Informationen:

Der Code für die Bewegung des Hamsters ist in der move-Methode der Hamster-Klasse implementiert.
Die Bewegungsrichtung des Hamsters wird durch die Variable self.direction gesteuert.
Die Position des Hamsters wird durch self.rect repräsentiert.
Das Problem könnte mit der Initialposition des Hamsters oder der Kollisionslogik zusammenhängen.

Umgebung:

Python-Version: [3.9]
Pygame-Version: [2.5.2]
Betriebssystem: [Windows 10]
RalfHain commented 7 months ago

(Betroffen: game5.py)

RalfHain commented 7 months ago

mypy game5.py liefert nichts auffälliges. (Liefert gar keinen output)

(Ich habe ein generelles Interesse bezüglich Testmethode "Statische Analyse", und versuche, dieses nun auch bei Python in Betrieb zu nehmen. Ich werde mir die Hilfe zum checker mypy mal durchlesen.)

RalfHain commented 7 months ago

Nach dem Hinzufügen von zahlreichen type hints:

 $ mypy --strict game5.py

game5.py:235: error: Argument 2 to "move_hamster" has incompatible type "Korn | None"; expected "Korn"  [arg-type]
Found 1 error in 1 file (checked 1 source file)

also finde_naechstes_korn() könnte None zurückgeben!? Ich habe mal den debugger bemüht -> nein, ist nicht der Fall. Ergebnis: unklar (Typisch für statische Analyse: Viel Aufwand, unklares Ergebnis)

plusben commented 7 months ago

kannst du auch die game4.py mal checken? da kommt auch im Log der Fehler.

RalfHain commented 7 months ago

game4.py: Im Wesentlichen das gleiche Ergebnis. (Noch ein paar mehr Warnungen, das sind aber lösbare Konfigurationsprobleme)

RalfHain commented 7 months ago

Ich habe mir pylint installiert, laufenlassen und mir die Warnungen angeschaut. Ich habe aber auch keinen Fix gefunden.

Hier sind zumindest die Auffälligkeiten:

game4: def move(self, level, koerner): das Argument koerner wird ja gar nicht benutzt.

game5: move-hamster(,) die lokalen Variablen start und end werden berechnet, aber mit den Werten wird dann nichts angefangen.