Hangman mit ein Java2K-Feeling?!

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Wie der Titel schon verrät, habe ich ein Hangman-Spiel (mit dem Frog-Modul) geschrieben. Was mich allerdings stark wundert, ist das scheinbar zufällige Zeichnen des Galgens (erinnert mich an Java2K). Mir kommt es so vor, als ob mein Spiel nur jedes zweite Mal funktioniert. Um das ganze einmal zu verdeutlichen, zeige ich euch zwei Screenshots: der erste zeigt, wie es aussieht, wenn falsch gezeichnet wurde; der zweite zeigt das Ergebnis bei richtiger Zeichnung. Könnt ihr diese Beobachtung nachvollziehen?

Bild Bild

Eine Frage habe ich noch (siehe Zeile 191): Wenn ich weiß, dass mein Spiel auf jeden Fall nicht auf Windows oder Mac laufen wird, reicht dann auch so etwas wie

Code: Alles auswählen

/usr/share/dict/words
als Angabe oder muss trotzdem das os.path-Modul verwendet werden?
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

Ich kenn das Frog modul nicht, aber mir fällt auf, dass alle Zeichenfunktionen relative Bewegungen verwenden und Du nirgends sicher stellst, dass der Pen auch an der richtigen Stelle ist.

Wenn Du das Spiel nur auf Deinem Rechner verwenden willst, geht auch "/usr/share/dict/words". Oder Du verwendest das als Default und lässt dem Benutzer die Möglichkeit per command line argument eine andere Datei zu wählen.
http://www.felix-benner.com
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

derdon hat geschrieben:Mir kommt es so vor, als ob mein Spiel nur jedes zweite Mal funktioniert. Um das ganze einmal zu verdeutlichen, zeige ich euch zwei Screenshots: der erste zeigt, wie es aussieht, wenn falsch gezeichnet wurde; der zweite zeigt das Ergebnis bei richtiger Zeichnung. Könnt ihr diese Beobachtung nachvollziehen?
Das Problem ist ein anderes: Da der Frosch ein Weilchen braucht, um die einzelnen Teile zu zeichnen, du aber über Tastatur-Events die Zeichenoperationen anstößt, passiert es, dass der Frosch das nächste Element zeichnen soll, bevor er mit dem letzten fertig ist. Das bringt den Frosch durcheinander und am Ende ist die Zeichnung im Eimer.

Lösung: Zum einen bietet es sich an, die Geschwindigkeit der beiden verwendeten Frösche auf die Maximalwerte zu setzen:

Code: Alles auswählen

frog.speed = "max"
Das löst das Problem aber nicht 100%ig. Wenn du ganz fix tippst, kann es dir immer noch passieren, dass etwas schief geht. Um das zu verhindern, musst du zu Beginn es Event-Handlers, der die Buchstabeneingabe abfragt - bei dir die Methode attempt() - prüfen, ob dein Zeichenfrosch noch aktiv ist. Dazu verfügen Frösche über ein entsprechendes Attribut. Die folgende Zeile zu Beginn der attempt() Methode löst das Problem:

Code: Alles auswählen

if self.gallow_writer.active: return
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Danke numerix! Ich fügte die genannte Zeile (der zweite Codeschnipsel) am Anfang von attempt ein und jetzt funktioniert es!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Ich würde zusätzlich noch die Zeichengeschwindigkeit des Frosch hochsetzen, damit du bei der Eingabe der Buchstaben nicht so lange warten musst. Andererseits hat man so mehr Zeit, dem Frosch beim Zeichnen zuzusehen ... :wink:
Antworten