Smilla Geschrieben 25. September 2006 Geschrieben 25. September 2006 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 :-) Zitieren
Guybrush Threepwood Geschrieben 25. September 2006 Geschrieben 25. September 2006 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 Zitieren
Smilla Geschrieben 25. September 2006 Autor Geschrieben 25. September 2006 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 Zitieren
Guybrush Threepwood Geschrieben 25. September 2006 Geschrieben 25. September 2006 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. Zitieren
Smilla Geschrieben 26. September 2006 Autor Geschrieben 26. September 2006 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. Zitieren
ShaaitanTX Geschrieben 26. September 2006 Geschrieben 26. September 2006 Habe hier nur Access aber ich denke mal bei VB 6.0 wird es auch die Len-Funktion geben. Len(Variable) müsste dir die Länge das Strings wiedergeben womit du dann herausfindest wieviele "_" du brauchst. Zitieren
Smilla Geschrieben 26. September 2006 Autor Geschrieben 26. September 2006 In VBScript gibt es "Len" ich probiers in VB6 jetzt einfach mal aus, danke Zitieren
Smilla Geschrieben 11. Oktober 2006 Autor Geschrieben 11. Oktober 2006 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 Zitieren
Klotzkopp Geschrieben 11. Oktober 2006 Geschrieben 11. Oktober 2006 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. Zitieren
Smilla Geschrieben 11. Oktober 2006 Autor Geschrieben 11. Oktober 2006 @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?? Zitieren
Smilla Geschrieben 11. Oktober 2006 Autor Geschrieben 11. Oktober 2006 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? Zitieren
ShaaitanTX Geschrieben 11. Oktober 2006 Geschrieben 11. Oktober 2006 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. Zitieren
Smilla Geschrieben 11. Oktober 2006 Autor Geschrieben 11. Oktober 2006 Kannst du mir das mit der Boolean Variable näher erklären? Das sagt mir mommentan gar nix Zitieren
ShaaitanTX Geschrieben 12. Oktober 2006 Geschrieben 12. Oktober 2006 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 Zitieren
Smilla Geschrieben 12. Oktober 2006 Autor Geschrieben 12. Oktober 2006 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 Zitieren
ShaaitanTX Geschrieben 12. Oktober 2006 Geschrieben 12. Oktober 2006 Das weiss ich jetzt auch nicht, aber denke mal schon. Im Zweifelsfall einfach mal testen - viel kaputtmachen kannst du ja nicht und wenn es nicht funzt änderst du es einfach wieder :beagolisc Zitieren
Smilla Geschrieben 12. Oktober 2006 Autor Geschrieben 12. Oktober 2006 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: Zitieren
ShaaitanTX Geschrieben 12. Oktober 2006 Geschrieben 12. Oktober 2006 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 Zitieren
Smilla Geschrieben 12. Oktober 2006 Autor Geschrieben 12. Oktober 2006 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 Zitieren
ShaaitanTX Geschrieben 12. Oktober 2006 Geschrieben 12. Oktober 2006 Die ganzen "EsleIf" sehen nicht so toll aus. Kleiner Tipp: Nimm einen "Case" damit dürftest du auch das Problem mit der Zahl "11" gelöst haben Zitieren
grueni Geschrieben 12. Oktober 2006 Geschrieben 12. Oktober 2006 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. Zitieren
Smilla Geschrieben 13. Oktober 2006 Autor Geschrieben 13. Oktober 2006 Die ganzen "EsleIf" sehen nicht so toll aus. Kleiner Tipp: Nimm einen "Case" damit dürftest du auch das Problem mit der Zahl "11" gelöst haben Meinst du Select Case? Zitieren
Smilla Geschrieben 13. Oktober 2006 Autor Geschrieben 13. Oktober 2006 pic_1.Picture = LoadPicture("U:\VB 6\Hangman\Bilder\" & VariablenName & ".bmp") Hab eben nochmal auf das zurück gegriffen, ja es funktioniert! Zitieren
ShaaitanTX Geschrieben 13. Oktober 2006 Geschrieben 13. Oktober 2006 Meinst du Select Case? Yop meinte das - und schön das es funktioniert hat Zitieren
Empfohlene Beiträge
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.