Seite 1 von 1

Hangman mit ein Java2K-Feeling?!

Verfasst: Donnerstag 22. Januar 2009, 16:37
von derdon
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?

Verfasst: Donnerstag 22. Januar 2009, 18:39
von tordmor
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.

Re: Hangman mit ein Java2K-Feeling?!

Verfasst: Donnerstag 22. Januar 2009, 19:37
von numerix
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

Verfasst: Donnerstag 22. Januar 2009, 21:22
von derdon
Danke numerix! Ich fügte die genannte Zeile (der zweite Codeschnipsel) am Anfang von attempt ein und jetzt funktioniert es!

Verfasst: Donnerstag 22. Januar 2009, 22:33
von numerix
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: