Hangman

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Animator

Betreff: Hangman

BeitragDo, Jul 21, 2011 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich steh grad voll aufm Schlauch: Ich hab vorhin für nen Kumpel ein Hangman gecodet(sone Art Insider^^).

Alles funktioniert soweit, es ist auch relativ simpel, nur an einer Stelle hakts noch: Wenn in einem der Wörter ein Buchstabe zweimal vorkommt dann wird nur einer durch einen Buchstaben ersetzt. Beim zweiten eintippen des entsprechenden Buchstaben passiert gar nichts mehr(weder die Versuche werden hochgezählt noch wird ein Buchstabe aufgeschrieben)

und hier der Code:

Code: [AUSKLAPPEN]
AppTitle "Galgenmännchen"
Graphics 640,480,0,1

;Laden der Grafiken

Pfad$ = ".\Grafik\"

Galgen_staender = LoadImage (Pfad$ + "Galgen(ständer).bmp")
Galgen_stamm = LoadImage (Pfad$ + "Galgen(Stamm).bmp")
Galgen_stange = LoadImage (Pfad$ + "Galgen(Stange).bmp")
Galgen_schnur = LoadImage (Pfad$ + "Galgen(Schnur).bmp")
Galgenmaennchen_kopf = LoadImage (Pfad$ + "Galgenmännchen(Kopf).bmp")
Galgenmaenchen_Koerper = LoadImage (Pfad$ + "Galgenmännchen(Körper).bmp")
Galgenmaennchen_fuss_rechts = LoadImage (Pfad$ + "Galgenmännchen(Fuß_Rechts).bmp")
Galgenmaennchen_fuss_links = LoadImage (Pfad$ + "Galgenmännchen(Fuß_Links).bmp")

Hintergrund = LoadImage (Pfad$ + "Hintergrund.bmp")

MaskImage Galgen_Staender, 255,255,255
MaskImage Galgen_stamm, 255,255,255
MaskImage Galgen_stange, 255,255,255
MaskImage Galgen_schnur, 255,255,255
MaskImage Galgenmaennchen_kopf, 255,255,255
MaskImage Galgenmaenchen_Koerper, 255,255,255
MaskImage Galgenmaennchen_fuss_rechts, 255,255,255
MaskImage Galgenmaennchen_fuss_links, 255,255,255

;Wortschatz

Const Max = 63

.Wotschatz

Dim Wort$(Max)
Data "schule", "märchen", "haus", "hund", "mann", "frau", "wolke", "wiese", "badewanne", "windmühle", "katze", "ventilator", "gast", "bett", "gasthaus", "freund", "wanze", "käfer"
Data "vieh", "traktor", "arbeit", "junge", "mädchen", "jung", "alt", "zahl", "wort", "galgen", "galgenmännchen", "welt", "erde", "stein", "zyklop", "baumeister", "baum", "müllabfuhr"
Data "jahreszeit", "blume", "brett", "holz", "mähdrescher", "nervensäge", "altehrwürdig", "altmodisch", "neumodisch", "farbenblind", "stark", "schwach", "nervig", "stolz", "programmieren"
Data "hobbit", "wehrwolf", "blüte", "anders", "merkwürdig", "abnormal", "komisch", "weinen", "lachen", "toll", "gut", "salzig", "essen", "trinken"

SeedRnd MilliSecs()

For i = 0 To Max
   Read Wort$(i)
Next

Zufall$ = Wort$(Rand(Max))
versuche = 0
geraten$ = String$(".",Len(Zufall$))

Repeat

DrawImage Hintergrund, 0,0

 Text 20,40, Versuche

 Text 20,20, Geraten$

If Versuche > 0 Then DrawImage Galgen_staender, 60,200

If Versuche > 1 Then DrawImage Galgen_stamm, 290,40

If Versuche > 2 Then DrawImage Galgen_stange, 140,70

If Versuche > 3 Then DrawImage Galgen_schnur, 140,50

If Versuche > 4 Then DrawImage Galgenmaennchen_kopf, 200,150

If Versuche > 5 Then DrawImage Galgenmaenchen_Koerper, 205,135

If Versuche > 6 Then DrawImage Galgenmaennchen_fuss_rechts, 205,125

If Versuche > 7 Then DrawImage Galgenmaennchen_fuss_links, 175,120

 Zeichen$ = Input()
 Stelle = Instr(Zufall$,Zeichen$)
 If Stelle <> 0 Then
  Neu$ = Left$(Geraten$,Stelle - 1) + Zeichen$
  Neu$ = Neu$ + Mid$(Geraten$,Stelle+1)
  Geraten$ = Neu$
Else
Versuche = Versuche + 1
 EndIf

Flip
Until KeyDown(1) Or Versuche > 7 Or Geraten$ = Zufall$ Or Zeichen$ = ""

If Geraten$ = Zufall$ Then Goto Sieg

Text 200,60, "Du hast verloren"
Text 200,80, "Beliebige Taste drücken"
Text 200,100, "es währe " + Zufall$ + " gewesen"
WaitKey
Goto Ende

.Sieg

Text 200,60, "du hast gewonnen"
Text 200,80, "Beliebige Taste drücken"

WaitKey


.Ende
End


das Ende hab ich schnell hingeschlampert man möge mir das entschuldigen Wink

findet ihr auf anhieb einen Fehler? oder habe ich vielleicht einen Befehl falsch verstanden? Auf jeden fall freue ich mich auf eure Antworten!

MFG Animator

SpionAtom

BeitragDo, Jul 21, 2011 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst die Variable Zufall$ so editieren, dass die gefundenen Buchstaben aus dem String fliegen. Du kannst zb mit einem replace die gefundenen Zeichen mit einem # ersetzen. Ansonsten findet Instr natürlich immer wieder dasselbe Zeichen...
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Midimaster

BeitragFr, Jul 22, 2011 9:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Funktion ist ein "Klassiker": Replace all

Du bist schon nahe dran, aber du musst natürlich den Zufalls$ mehrfach scannen, bis du sicher bist, dass er keines der betreffenden Zeichen mehr enthält:

Die Function INSTR() hat einen dritten Parameter Start%. Er legt fest ab wo gesucht werden soll.

BlitzBasic: [AUSKLAPPEN]
Zeichen$ = Input()
Local Start%=1
Repeat
Stelle = Instr(Zufall$ , Zeichen$ , Start%)
If Stelle <> 0 Then
Neu$ = Left$(Geraten$,Stelle - 1) + Zeichen$
Neu$ = Neu$ + Mid$(Geraten$,Stelle+1)
Geraten$ = Neu$
Start = Stelle + 1
EndIf
Until Stelle=0
If Start=1
Versuche = Versuche + 1
EndIf


Die Schleife sucht nun immer solange, bis Stelle auf 0 geht. Dabei wird der Startpunkt Start für die nächste Runde auf 1 Stelle hinter der letzten Fundstelle gesetzt.

Bedingt durch die Tatsache, dass Stelle jetzt am Ende immer 0 ist, kannst Du es nicht mehr nutzen, um festzustellen ob überhaupt etwas gefunden wurde. Das verrät dir jetzt Start, das nur dann 1 geblieben sein kann, wenn nichts gefunden wurde.

Noch zwei Anmerkungen:

So wie ich es dir jetzt beschrieben habe, werden doppelte Buchstaben gleich beim ersten richtigen Raten gleichzeitig ersetzt. Das ist so wie beim original Hangman. Oder wolltest Du es anders?

So wie SpionAtom es rät, wird ein weiteres Raten des selben Buchstabens zum Hochzählen der Variablen Versuche% führen.
 

Animator

BeitragFr, Jul 22, 2011 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Leute! Ja ich wollte es so wie im Original. Ich bin immer wieder froh dass es dieses Forum gibt =)

MFG Animator

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group