Zum Inhalt springen

VB 6: HangMan


Empfohlene Beiträge

Geschrieben

Hallo zusammen,

meine neue Aufgabe ist es jetzt, in VB 6 (mit Visual Studio) ein HangMan Spiel zu programmieren.

Ich weis grad allerdings nicht wirklich wie ich das ganze nun angehen soll…

Die Oberfläche hab ich, es sind lauter einzelne bmp. Dateien aus denen sich dann das Männchen bei jedem falschen Buchstaben zusammensetzt.

Am Anfang steht eine Inputbox, in die das Wort das später erraten werden soll eingegeben wird.

Weiter bin ich noch nicht und weis ich im momment nicht.

In der Zeile, in die der Benutzer nachher die geratenen Buchstaben eingibt, müssen ja noch Stiche, so viele wie viel Buchstaben das Wort hat. Wie mache ich das?

Und dann müssen ja irendwie das vorher in einer variable gespeicherte Wort und jeder eingegebene Buchstabe verglichen werden. Wer hat mir da nen heißen Tipp dazu?

Ich steh voll aufm Schlauch…

Danke schon mal :-)

Geschrieben

Naja also ich würde sagen mit dem Bild von dem hängendem Mänchen wäre es am einfachsten wenn das lauter Bilder wären wo jedesmal ein Teil mehr drauf wäre, als wenn du Bilder der einzelnen Teile hast.

Dann müsstest du das Bild nämlich einfach nur immer durch das nächste austauschen.

Dann guckst du einfach wieviele Buchstaben das Wort hast und malst dementsprechend die Striche in dein Fenster (du kannst ja eine maximale Wortlänge vorgeben). Wenn die Striche dann immer an der selben Postition gemalt werden musst du bei erfolgreicher Eingabe eines Buchstabens dann einfach nur den Bustaben an die richtigen Positionen über die Striche malen.

PS: Das ist übrigens ne gute Idee mit dem HangMan weil ich gerade ein bisschen mit ASp.Net rumspiele und mir die Ideen ausgegangen sind :D

Geschrieben
Naja also ich würde sagen mit dem Bild von dem hängendem Mänchen wäre es am einfachsten wenn das lauter Bilder wären wo jedesmal ein Teil mehr drauf wäre, als wenn du Bilder der einzelnen Teile hast.

So meinte ich auch, hatte mich wohl etwas ungeschickt ausgedrückt ;)

Zum Rest sag ich später/morgen was, und probiere es, mache gleich Feierabend! :e@sy

Geschrieben

Alternativ hatte ich eben noch die Idee das du einfach einen String machen kannst der soviele _ Zeichen enthält wie das Wort Buchstaben hat. Jedesmal wenn ein Buchstabe richtig geraten wird ersetzt du die Unterstriche in dem String duch den Buchstaben.

Den String stellst du dann einfach in entsprechend großer Schriftart dar.

Geschrieben

Deine Idee klingt gut :)

Wie mache ich das mit dem String? Das der genauso viele Striche hat wie das Wort Buchstaben? Und das ersetzen dann?

Also angefangen hab ich jetzt mit einer Inputbox in die das Wort eingetragen wird, dann wirds in einer Variable gespeichert.

  • 3 Wochen später...
Geschrieben

So ich krame das Thema nochmal hoch, bin immer noch an Hangman dran und der der mir die Aufgabe gegeben hat und den ich fragen kann bei Problemen ist heute außer Haus, also frage ich jetzt mal euch.

Hier zu erst mal mein Code:

Dim wort As String

Dim zeichen As String

Dim zielarray() As String

Dim anzeigearray() As String



Private Sub Form_KeyPress(KeyAscii As Integer)

MsgBox (UCase(Chr(KeyAscii)))


Suchwort_prüfen (UCase(Chr(KeyAscii)))


End Sub



Private Sub Form_Load()


KeyPreview = True

wort = InputBox("Hier das Wort eingeben:")


'MsgBox (UCase(wort))


ReDim Preserve zielarray(Len(wort) - 1)

ReDim Preserve anzeigearray(Len(wort) - 1)



For i = 0 To Len(wort) - 1

zielarray(i) = UCase(Mid(wort, i + 1, 1))

anzeigearray(i) = "_"

Next


Anzeigearray_ausgeben


End Sub


Private Sub Anzeigearray_ausgeben()

For i = 0 To Len(wort) - 1

txt_wort.Text = txt_wort.Text + anzeigearray(i) + " "

Next


End Sub



[COLOR="Red"]Private Sub Suchwort_prüfen(zeichen As String)


For i = 0 To Len(wort) - 1


If zielarray(i) = zeichen Then

[B]anzeigearray(i) = zeichen

txt_wort.Text = txt_wort.Text + Replace(anzeigearray(i), i, zeichen)[/B]


Else

MsgBox ("Buchstabe nicht gefunden")


End If


Next

End Sub[/COLOR]

Mein Problem liegt im Moment bei dem rotmarkierten Codeabschnitt. Dieses vergleicht die eingegebenen Zeichen mit dem Suchwort. Das klappt mehr oder weniger, Problem ist, auch wenn der Buchstabe richtig ist, kommt die MsgBox "Buchstabe nicht gefunden". Außerdem weis ich nicht ich bei einem richtigen Buchstaben den Strich durch den Buchstaben ersetzten kann (der Fett markierte Teil).

Hoffe ihr könnt mir helfen :)

Geschrieben
Problem ist, auch wenn der Buchstabe richtig ist, kommt die MsgBox "Buchstabe nicht gefunden".
Du kannst eben nach einem einzigen Schleifendurchlauf noch nicht erkennen, ob der Buchstabe nicht vielleicht später noch gefunden wird. Die Messagebox darf nicht in der Schleife stehen.
Geschrieben

@Klotzkopp, die Schleife läuft ja so oft durch das Array wie das Wort Buchstaben hat. Und bei jedem Durchlauf, nach jedem Buchstaben also wird eine MsgBox ausgegeben (Die MsgBox diehnt mommentan noch der Kontrolle, wird später natürlich ersetzt). Verständlich? ;)

Es hat so ähnlich auch funktioniert, dann ist meine Datei aber bei einem Serverumzug verschütt gegangen und ich musste nochmal von vorn beginnen. Ich war vorher auch schonmal so weit, da hats funktioniert mit den Message Boxen.

Habs eben nochmal zurück gesetzt, jetzt klappts, bei gefundenem Buchstaben wird die MsgBox "Buchstabe gefunden" Ausgegeben.

Private Sub Suchwort_prüfen(zeichen As String)


For i = 0 To Len(wort) - 1


If zielarray(i) = zeichen Then

MsgBox ("Buchstabe gefunden")

Else

MsgBox ("Buchstabe nicht gefunden")



End If


Next

End Sub

Jetzt soll aber bei gefundenem Buchstaben nicht mehr die MSGBox ausgegeben werden, sondern im entsprechenden Array soll das entsprechende Stichle gegen den Buchstaben ersetzt werden. Wie mach ich das?? ;)

Geschrieben

Neuer Status:

Wenn ein richtiger Buchstabe eingegeben wird, wird das Strichle an der Richtigen Position durch diesen ersetzt.

Jetzt gehts um das, was passiert wenn der Buchstabe falsch ist und im ganzen Wort nicht vorkommt.

Dann soll das Bild geändert werden und in einer Weiteren Textbox soll die Anzahl der Fehler erhöht werden, aber nur wenn im GANZEN Wort keine Übereinstimmung gefunden wurde. Ich komm da grad einfach nicht weiter...

Private Sub Suchwort_prüfen(zeichen As String)


For i = 0 To Len(wort) - 1


If zielarray(i) = zeichen Then

'MsgBox ("Buchstabe gefunden")

anzeigearray(i) = zeichen


Anzeigearray_ausgeben


Else

'MsgBox ("Buchstabe nicht gefunden")


fehler_erhöhen


End If


Next

End Sub



Private Sub fehler_erhöhen()




End Sub

Was muss ich in die Sub "fehler_erhöhen" eintragen?

Geschrieben

Nimm eine Boolean-Variable die du bei der Abfrage auf True setzt wenn ein wert gefunden wurde und ansonsten falsch bleibt.

Je nach Wert der Variable kannst du dann reagieren und das Bild verändern / die Fehler-Anzahl hochsetzen.

Bei einem integerwert muss bei Fehler erhöhen zB.


Private Sub Fehler_erhoehen()

if BooleanVariable = False Then

   Fehler_Anzahl += 1

   [oder Fehler_Anzahl = Fehler_Anzahl + 1    'Ausgeschrieben halt]


   'Hier kannst du dann auch das Bild updaten mit dem entsprechenden Befehl

else

   'brauchste ja eigentlich nicht

end if


End Sub

Darfst halt nur nicht vergessen die Boolean-Variable wieder zurückzusetzen.

Geschrieben

Wikipedia sagt dazu das hier wobei das auch nicht gerade umwerfend ist. Ne Menge Hintergrundinformation aber im großen und ganzen hier das Wichtigste:

Eine Boolean-Variable hat zwei Möglichkeiten:

BooleanVariable = True

BooleanVariable = False

Damit kann man also super Überprüfungen machen von Abfragen die auch nur "wahr" oder "falsch" sein können.

Am Anfang setzt du die Variable auf "BooleanVariable = False". Dann lässt du deine Schleife durchrattern, da fragst du ja ab ob das eingegebene Zeichen einem aus deinem Array entspricht.

Wenn das der Fall ist setzt du in dem If die Variable "= True" - wenn nicht dann bleibt sie False.

Dann fragst du in deiner Sub Fehler_erhoehen mit einem If die Variable ab und je nachdem ob sie "True" oder "False" ist setzt du die Fehleranzahl hoch und änderst das Bild oder du machst einfach normal weiter.

Hoffe es hat geholfen ;)

Geschrieben

Danke @ShaaitanTX. So ähnlich habe ich es jetzt auch gelöst. Problem ist nur jetzt, das sich das Bild ja noch ändern muss.

Wie mache ich das? Momentan ist in der Picture Box Pic1 das Bild 0.bmp drin. Jetzt soll ich das erhöhen.... die folgenden Bilder heißen pic1.bmp, pic2.bmp usw.

Kann ich das einfach so schreiben:

Pic_1.Picture = pic1.bmp

Geschrieben

Im Formular hab ich ja bei der Eigenschaft Picture das erste Bild also 0.bmp eingestellt.

Mit folgender Zeile kann man ein anderes Bild laden, klappt auch :)

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\1.bmp")

Allerdings muss ich ja bei einem weiteren Fehler ein weiteres neues Bild laden... :confused:

Geschrieben

kannst die bilder ja durchnummerieren und beim aufruf dann die Variable aufrufen wo du auch die Anzahl der Fehler speicherst.

Wäre zumindest die erste Lösung die mir einfallen würde ;)

müsste dann ja mit


pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\" & VariablenName & ".bmp")

funktionieren. Bin mir nicht sicher aber nen Versuch wäre es wert ;)

Geschrieben

Habe das Problem jetzt mit einer Schleife gelöst! :)

Funktioniert auch. Nur muss ich noch machen das die Fehleranzahl auf 11 Begrenzt ist, bzw. ab dem 11. Fehler wars das ;)

Hab nur grad kein Plan wie ich das machen könnt. Genauso ist das Spiel ja auch zu Ende wenn das Wort erraten wurde.

Private Sub fehlerzahl_erhöhen()


anzahl_fehler = anzahl_fehler + 1

txt_fehler.Text = CStr(anzahl_fehler) + " Fehler"


If anzahl_fehler = 1 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\1.bmp")

ElseIf anzahl_fehler = 2 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\2.bmp")

ElseIf anzahl_fehler = 3 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\3.bmp")

ElseIf anzahl_fehler = 4 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\4.bmp")

ElseIf anzahl_fehler = 5 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\5.bmp")

ElseIf anzahl_fehler = 6 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\6.bmp")

ElseIf anzahl_fehler = 7 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\7.bmp")

ElseIf anzahl_fehler = 8 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\8.bmp")

ElseIf anzahl_fehler = 9 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\9.bmp")

ElseIf anzahl_fehler = 10 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\10.bmp")

ElseIf anzahl_fehler = 11 Then

pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\11.bmp")

End If



End Sub

Geschrieben

Vielleicht läßt sich das ganze auch viel eleganter mit einer ImageList lösen. So würde ich das Problem auf jeden Fall in Delphi lösen und AFAIK gibts eine ImageList auch in VB.

Nur so als Anregung. ;)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...