Zahlenraten mit VB08

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von spasssssgi.

    Zahlenraten mit VB08

    Zahlenraten

    Ich würde gern mein eigenes Zahleraten Programm schreiben. Dazu habe ich ein paar Probleme, da ich schon lange nicht mehr mit Visual Basic gearbeitet habe. Damit alle verstehen wie ich es am Ende haben will habe ich hier einiges Notiert.

    Window 1
    Hier sollte man seine 2 Zahlen eingeben. z.B 1 und 10, dann ratet man eine Zahl von 1 bis 10. Die zweite Zahl sollte höchstens 100 sein. Falls es höher sein sollte soll eine MsgBox kommen mit dem Text Bitte eine tiefere Zahl eingeben. Die beiden Felder sollte sobald eine Zahl eingegeben wird überprüft werden. Buchstaben sollte man nicht eingeben können. Bei Start geht die Applikation zum Window 2.


    Window 2
    Hier werden die in Klammern gesetzten Worte durch die vorherige eingaben ersetzt. Oben rechts sieht man eine Leiste mit schon eingegebenen Zahlen. Die letzt eingegebenen Zahlen sollte oben sein. In der Mitte sieht man ein Panel und dort steht der Tipp. Der Tipp überprüft ob die geratene Zahl mit der Zufallszahl übereinstimmt. Falls sie kleiner ist sollte dann im Panel gross "zu klein" stehen. Dasselbe für zu hoche Zahlen. Und der Abbrech Button sollte zum Window 1 zurückführen.

    Window 3
    Dies ist das letzte Window und dies kommt wenn die geratene Zahl mit der Zufallszahl übereinstimmt. Nochmals! sollte zum Window 1 führen und Schliessen sollte die Anwendung beenden.

    _______________________________________________________________________________________________________________________________________________________________________________

    Ich währe sehr froh wenn einige mir bei meinem Programm behilflich sein könnten. Einiges habe ich schon selber hingekriegt. Aber mein Hauptproblem ist im Moment die Inhaltskontrolle. Falls Ihr Ihr mal Zeit habt dann könnt Ihr mich vielleicht bei MSN hinzufügen oder schreibt hier.

    Mit Freundlichen Grüssen


    Spasssssgi
    window 1:

    nur zahlen eingeben findeste bei google
    um zu überprüfen ob eine zahl kleiner als 100 eingegeben wurde kannste einfach mit textbox2.text < 101 prüfen. (gibt natürlich error wenn keine zahl eingetragen wurde! also vorsicht!)

    window 2:

    werte aus einer anderen form übernimmt man einfach indem man noch den formnamen davorsetzt... wenn du zB von form 2 auf form1 zugreifen willst schreibst du einfach zB. form1.textbox1.text
    naja wenn man auf raten klickt musste dann auch wieder einfach prüfen ob die zahl grösser oder kleiner als die korrekte zahl wäre und dann eben den text entsprechend ändern

    Mille25 schrieb:

    window 1:

    nur zahlen eingeben findeste bei google
    um zu überprüfen ob eine zahl kleiner als 100 eingegeben wurde kannste einfach mit textbox2.text < 101 prüfen. (gibt natürlich error wenn keine zahl eingetragen wurde! also vorsicht!)

    window 2:

    werte aus einer anderen form übernimmt man einfach indem man noch den formnamen davorsetzt... wenn du zB von form 2 auf form1 zugreifen willst schreibst du einfach zB. form1.textbox1.text
    naja wenn man auf raten klickt musste dann auch wieder einfach prüfen ob die zahl grösser oder kleiner als die korrekte zahl wäre und dann eben den text entsprechend ändern
    Ja das mit dem überprüfen ist ein bisschen blöd den es sollte ja erst prüfen wenn etwas eingegeben wurde. Wie soll ich das im Code schreiben? Und ich werde nur eine Form verwenden, da werde ich einfach die Elemente ein und ausblenden.
    so:

    VB.NET-Quellcode

    1. Try
    2. 'normale befehle die du verwendest
    3. Catch as Exception
    4. 'z.B. MsgBox("keine zahl")
    5. End Try


    wenn du nur schauen möchtest ob irgentwas eingegeben wurde gehts auch mit if.

    VB.NET-Quellcode

    1. if textbox1.text = "" then
    2. 'blala
    3. End if


    lG TiMMy :thumbsup:
    Das hier ist mein "Code" :wacko: Der rote Bereich hat einen Umwandlungsfehler. Was ist den Falsch?

    Könntest du mir zeigen wie du das meinsst mit If textbox.text = "" then WHAT? Mit Else?

    Quellcode

    1. Public Class Zahlenraten
    2. Dim Zufallszahl As Integer
    3. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    4. Select Case Asc(e.KeyChar)
    5. Case 48 To 57, 8, 32
    6. ' Zahlen, Backspace und Space zulassen
    7. Case Else
    8. ' alle anderen Eingaben unterdrücken
    9. e.Handled = True
    10. End Select
    11. End Sub
    12. Private Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
    13. Select Case Asc(e.KeyChar)
    14. Case 48 To 57, 8, 32
    15. ' Zahlen, Backspace und Space zulassen
    16. Case Else
    17. ' alle anderen Eingaben unterdrücken
    18. e.Handled = True
    19. End Select
    20. End Sub
    21. Public Function GetRandom(ByVal minimum As Integer, ByVal maximum As Integer) As Integer
    22. Try
    23. Dim nRandom As Integer
    24. Randomize()
    25. nRandom = CInt(TextBox1.Text + (TextBox2.Text - TextBox1.Text + 1) * Rnd())
    26. While nRandom < TextBox1.Text OrElse nRandom > TextBox2.Text
    27. Randomize()
    28. nRandom = CInt(TextBox1.Text + (TextBox2.Text - TextBox1.Text + 1) * Rnd())
    29. End While
    30. Return nRandom
    31. Catch ex As Exception
    32. 'ToDo Fehlerbehandlung
    33. Return minimum
    34. End Try
    35. End Function
    36. Private Sub Startbtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Startbtn.Click
    37. VonLabel.Visible = False
    38. bisLabel.Visible = False
    39. Zufallszahl = 25
    40. TextBox1.Visible = False
    41. Startbtn.Visible = False
    42. ListBox1.Visible = True
    43. Abbrechenbtn.Visible = True
    44. Ratenbtn.Visible = True
    45. Label1.Text = "Zahl zwischen " + TextBox1.Text + " und " + TextBox2.Text + " raten"
    46. TextBox2.Text = ""
    47. TextBox2.Location = New Point(274, 227)
    48. End Sub
    49. Private Sub Ratenbtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ratenbtn.Click
    50. If TextBox2.Text = Zufallszahl Then
    51. MsgBox("Richtig!")
    52. Label1.Text = "Wähle deine Zahlen"
    53. TextBox1.Visible = True
    54. Startbtn.Visible = True
    55. ListBox1.Visible = False
    56. bisLabel.Visible = True
    57. VonLabel.Visible = True
    58. Abbrechenbtn.Visible = False
    59. Label2.Visible = False
    60. TextBox2.Text = "100"
    61. Else
    62. TextBox2.Text = ""
    63. ListBox1.Items.Add(TextBox2.Text)
    64. If CInt(TextBox2.Text) < Zufallszahl Then
    65. Label2.Text = "zu klein"
    66. ElseIf CInt(TextBox2.Text) > Zufallszahl Then
    67. Label2.Text = "zu gross"
    68. End If
    69. End If
    70. End Sub
    71. Private Sub Zahlenraten_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    72. Abbrechenbtn.Visible = False
    73. Ratenbtn.Visible = False
    74. Label2.Visible = False
    75. ListBox1.Visible = False
    76. End Sub
    77. End Class


    Mit freundlichen Grüssen

    Spasssssgi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „spasssssgi“ () aus folgendem Grund: Edit

    Abbrechenbtn.Visible = False schreibst du in das Form Load ereignis (doppelklick auf die form)
    du willst doch dass er beim laden der form unsichtbar ist oder? ?( (so deute ich das was du schreibst^^)
    Ich empfehle dir eher "Try", weil if überprüft dann nur ob was eingegeben wurde, da könnte man einfach en leerzeichem eingeben und schon hätte man nen fehler oder nen buchstaben und es würde nicht klappen...
    Nach dem if textbox1.text = "" then kommen deine befehle... :rolleyes: z.B.:

    VB.NET-Quellcode

    1. If textbox.text = "" then
    2. msgbox("du hast nix eingegeben")
    3. end if

    da ist übrigens nix rot :D
    haste den code selbst geschrieben?
    weil da kommen komponenten wie die if schleife und try schon vor :)
    wie wärs mal damit:
    *hust* :P

    lG TiMMy :thumbsup:

    TiM_My schrieb:

    Abbrechenbtn.Visible = False schreibst du in das Form Load ereignis (doppelklick auf die form)
    du willst doch dass er beim laden der form unsichtbar ist oder? ?( (so deute ich das was du schreibst^^)
    Ich empfehle dir eher "Try", weil if überprüft dann nur ob was eingegeben wurde, da könnte man einfach en leerzeichem eingeben und schon hätte man nen fehler oder nen buchstaben und es würde nicht klappen...
    Nach dem if textbox1.text = "" then kommen deine befehle... :rolleyes: z.B.:

    VB.NET-Quellcode

    1. If textbox.text = "" then
    2. msgbox("du hast nix eingegeben")
    3. end if

    da ist übrigens nix rot :D
    haste den code selbst geschrieben?
    weil da kommen komponenten wie die if schleife und try schon vor :)
    wie wärs mal damit:
    *hust* :P

    lG TiMMy :thumbsup:

    Das mit der Form hatte ich gerade selber gemerkt.. Sry habe einiges vergessen und ich habe alles selber geschrieben bis auf den Teil bei dem die Zufallszahl generiet wird.

    Der Teil der rot sein sollte ist:

    Quellcode

    1. Else
    2. TextBox2.Text = ""
    3. ListBox1.Items.Add(TextBox2.Text)
    4. If CInt(TextBox2.Text) < Zufallszahl Then
    5. Label2.Text = "zu klein"
    6. ElseIf CInt(TextBox2.Text) > Zufallszahl Then
    7. Label2.Text = "zu gross"
    8. End If


    Und wie kann ich die eingegebene Zahl in die Listbox einfügen? mit listbox1.Items.Add(textbox1.Text)?

    mit freundlichen Grüssen

    Spasssssgi

    PS: Die DVD habe ich schon mal geladen. Ich brauche nur noch Zeit zum Sie zu schauen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „spasssssgi“ ()

    Else
    TextBox2.Text = ""
    ListBox1.Items.Add(TextBox2.Text)
    If CInt(TextBox2.Text) < Zufallszahl Then
    Label2.Text = "zu klein"
    ElseIf CInt(TextBox2.Text) > Zufallszahl Then
    Label2.Text = "zu gross"
    End If


    Hier ist ein Fehler. Zum vergleichen brauche ich ja den Text (String) in einen Integer umzuwandlen, dass geht aber nicht...
    Ich habe nur so blöd gefragt weil es nicht funktioniert hier im VB...
    Sry für unverständlichkeiten meinerseits xD

    mit freundlichen Grüssen

    Spasssssgi
    Da kann ich dir ned helfen xD
    ich habs mir jetzt einfacher gemacht :)
    habe mir ne textbox genommen, 2 label, ne Listbox und nen button...
    label 1 visible auf false setzten und dann ins form load ereignis schreiben:

    VB.NET-Quellcode

    1. Label1.Text = ""
    2. Dim zufall As New Random
    3. For i As Integer = 0 To 1 'zwei stellige Zahl
    4. Label1.Text &= zufall.Next(0, 9)
    5. Next

    in den button hab ich dann geschrieben:

    VB.NET-Quellcode

    1. ListBox1.Items.Add(TextBox1.Text)
    2. If TextBox1.Text > Label1.Text Then
    3. label2.text = "zu groß"
    4. End If
    5. If TextBox1.Text < Label1.Text Then
    6. label2.text = "zu klein"
    7. End If


    is natürlich en komplett andrer code, aber so hätt ichs gemacht :)

    Viel Glück noch^^
    lG TiMMy :thumbsup:
    OK nun haben sich alle Fragen geklährt bis auf 2.

    1.

    Ich würde gerne meine Beiden EingabeFelder überprüfen nachdem die Zahl eingegeben wurde. Die Prüfung soll genau dann ausgeführt werden wenn die Maus weggeht. Der Überprüfungscode stelle ich mir so vor:

    Quellcode

    1. If VonTextbox.Text > BisTextbox.Text Then
    2. MsgBox("Das linke Eingabefeld muss eine kleinere Zahl beinhalten als das rechte!")
    3. VonTextbox.Text = "0"
    4. BisTextbox.Text = "100"
    5. End If
    Mir fehlt jetzt nur noch der Code für den Zeitpunkt der Ausführung.

    2.

    Mein Zufallszahlscript funktioniert nicht ganz. Dies sieht so aus:

    Quellcode

    1. Try
    2. Dim nRandom As Integer
    3. Randomize()
    4. nRandom = CInt(BisTextbox.Text + (BisTextbox.Text - VonTextbox.Text + 1) * Rnd())
    5. While nRandom < BisTextbox.Text OrElse nRandom > VonTextbox.Text
    6. Randomize()
    7. nRandom = CInt(BisTextbox.Text + (VonTextbox.Text - VonTextbox.Text + 1) * Rnd())
    8. ZufallszahlLabel.Text = CInt(BisTextbox.Text + (VonTextbox.Text - BisTextbox.Text + 1) * Rnd())
    9. End While
    10. Return
    11. Catch ex As Exception
    12. 'ToDo(Fehlerbehandlung)
    13. Return
    14. End Try
    Das Label ZufallsLabel bekommt bei diesem Schritt gar keine Zufallszahl zugeteilt. Folge ist das man so viel raten kann wie man will weil es keine Zahl gibt.


    Freundliche Grüsse

    Spasssssgi