Hangman Problem

Dede16

Grünschnabel
Heyho

Stehe vor einem Hangman Programm das volgende Bedingungen erfüllen sollte:

Erst gibt man ein Wort ein das erraten werden sollte.Klickt man dann auf weiter kommt man zum Hauptbildschirm.Dort kann man dann Buttons von A-Z Anklicken und wenn der buchstabe nicht in dem Wort vohanden ist dann gibt es einen Fehlerpunkt.Ist er einmal oder mehr Vorhanden erscheint der Buchstabe auf einem freien Feld.

Habe das Wort das man am anfang eingibt schon als ganzen strig definiert.
Mein Problem ist folgendes:Ich weiß nicht was ich eingeben muss das wenn ich z.B auf A drücke die Variable also den string durchsucht wieoft der buchstabe in der string vorkommt oder ob er überhaupt vorkommt...

Hoffe mal ihr versteht mich.

Danke schonmal

Dede
 
Herzlich Willkommen im Forum, Dede16!

Die Überprüfung kannst du mit der Funktion instr() durchführen.
Sie überprüft ob in string ein text vorkommt, den du in den Klammern bestimmst.

Zum Beispiel:
Erstelle 3 Textfelder(Text1, Text2, Text3) und einen Button. Füge den folgenden Code in den CommandButton1(Click-Event) ein:
Code:
Dim Suchwort As String
Dim UserWort As String
Suchwort = Text1.Text
UserWort = Text2.Text
If InStr(Suchwort, UserWort) Then
MsgBox "ja"
Text3.Text = "ja"
Else
MsgBox "nein"
Text3.Text = "nein"
End If

Ich hoffe, ich konnte helfen

Ciao:
Da' Hacker
 
Das Problem mit der Anzahl des jeweiligen Buchstabens könnte man z.B. wie folgt lösen:

Code:
Sub buchstabe()
        Dim str$, b$
        Dim x%
        str = "Hangman - Suchwort"
        b = "a" 'Hier sollte natürlich der jeweils geklickte Buchstabe rein
        x = Len(str) - Len(Replace(str, b, ""))
        If x > 0 Then
            MsgBox("Der Buchstabe '& b & "' ist " & x & " mal vorhanden", MsgBoxStyle.Information)
        Else
            MsgBox("Nicht vorhanden", MsgBoxStyle.Information)
        End If
End Sub

Geht bestimmt auch eleganter, aber auf die Schnelle funktioniert's erstmal...
 
Hi Zusammen

Nimm mal ne neues Projekt, setze die Keypreview Eigenschaft der Form auf True und platziere noch ein Label mit dem Namen Label1 auf der Form.

Kopiere dann unten stehenden Code
Code:
Option Explicit

Dim m_szOrgString                           As String

Private Function CheckInput(ByVal szChar As String) As Boolean
    Dim nCounter                            As Integer

    Rem =======================================================================
    Rem == Prüfen wir Zeichen für Zeichen, ob der gerade getippte Buchstabe  ==
    Rem == im Wort vorkommt. Es spielt dabei keine Rolle, ob der Buchstabe   ==
    Rem == schon mal geraten worden ist.                                     ==
    Rem =======================================================================
    For nCounter = 1 To Len(m_szOrgString)
        If Mid$(m_szOrgString, nCounter, 1) = szChar Then
            Rem ===============================================================
            Rem == Ist der Buchstabe im Original vorhanden, wird an der ent- ==
            Rem == sprechenden Stelle im Label der Buchstabe sichtbar.       ==
            Rem == Brauchst Du die Anzahl der ausgetauschten Buchstaben,     ==
            Rem == mußt Du hier nur noch einen Zähler einbauen.              ==
            Rem ===============================================================
            Label1.Caption = Left$(Label1.Caption, nCounter - 1) & szChar & _
                             Mid$(Label1.Caption, nCounter + 1)
        End If
    Next nCounter

    If UCase$(m_szOrgString) = UCase$(Label1.Caption) Then
        CheckInput = True
    Else
        CheckInput = False
    End If
End Function

Private Sub Form_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
    Case 32, 97 To 122, 228, 246, 252, 255
        If CheckInput(Chr$(KeyAscii)) Then MsgBox "Hurra. Puzzle solved"
    End Select
End Sub

Private Sub Form_Load()
    m_szOrgString = "löse das rätsel"
    Label1.Caption = "---------------"
End Sub

hope it helps
Das Orakel
 
Zuletzt bearbeitet:
Hi danke für die Antworten.

habe eine Frage zu Ein_Freunds Code, Verstehe folgende zeilen nicht:

x = Len(str) - Len(Replace(str, b, ""))
If x > 0 Then

Was ist mit Len bzw. Len(repace) gemeint

EDIT: Hab es jetzt so gelöst:

Dim ges As String
Dim b
Dim x

ges = Text1.Text
b = "a" 'Hier sollte natürlich der jeweils geklickte Buchstabe rein
x = Len(ges) - Len(a)
If x > 0 Then
Label1.Caption = x
Else
Label1.Caption = "Nicht vorhanden"
End If
 
Zuletzt bearbeitet:
Die Len() - Funktion gibt die Länge (also die Anzahl der Zeichen) eines Strings zurück.
So würde Dir z.Bsp. mit folgendem Code die Zahl 69 ausgegeben:
Code:
MsgBox Len("Mit ein wenig Eigeninitiative wärst Du da auch allein drauf gekommen!")
Mit der Replace() - Funktion können einzelne Zeichen oder auch SubStrings ersetzt werden.
In folendem Beispiel werden alle Leerzeichen durch Bindestriche ersetzt:
Code:
MsgBox Replace("Zum Beispiel mit Hilfe der Suchfunktion!", " ", "-")
Die Idee war einfach, den geklickten Buchstaben aus dem Hangman-Suchwort zu entfernen und mittels der Diffenzbildung der beiden Strings zum einen das Vorkommen und zum anderen die Anzahl zu ermitteln.

MfG
 

Neue Beiträge

Zurück