Problem bei Schleife im Zahlenratespiel

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von enIking1998.

    Problem bei Schleife im Zahlenratespiel

    Hallo Leute,

    ich bin noch Anfänger in visual Basic und muss ein Zahlenrate spiel Programmieren.
    Es wird eine Zufallszahl gesucht die man erraten muss und zur Hilfe bekommt man immer gesagt
    ob die gesuchte Zahl größer oder kleiner ist.
    Das ist aber nicht das Problem, sondern das Programm soll wenn man die zufallszahl nach 8 versuchen noch nicht gefunden hat aufhören.

    Das Problem ist wenn ich das spiel debugge, lässt es keine weitere eingabe von der nächsten Zahl zu. Sondern man muss 8 mal auf OK bei der Msgbox drücken bis kommt "sie haben alle versuche aufgebraucht"

    Ich hoffe mir kann jemand helfe, vielen dank schon mal im vorraus. :thumbsup:






    Public Class Form2

    Dim i As Integer
    Dim Zufallszahl As Integer

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Zufallszahl = Rnd() * 100 + 1

    End Sub


    Private Sub cmd_Prüfen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Prüfen.Click
    Dim Eingabe As Integer
    Eingabe = txt_eingabe.Text
    txt_eingabe.Text = ""

    Do Until i = 8

    i = i + 1


    If Eingabe = Zufallszahl Then
    MsgBox("Super, du hast die gesuchte Zahl gefunden, gehe nun ins nächste Level")
    Form3.Show()
    Me.Hide()

    Else
    If Eingabe < Zufallszahl Then
    MsgBox("Die gesuchte Zahl ist größer als " & Eingabe & " ")
    If i < 8 Then ......?


    Else
    MsgBox("Die gesuchte Zahl ist kleiner als " & Eingabe & "")


    End If

    End If

    If Me.i = 8 Then MsgBox("Sie haben leider alle Versuche aufgebraucht")

    Loop

    End Sub



    End Class
    Willkommen im Forum :thumbup:
    Deinen Code kann so keiner lesen. Bitte VB Tags benutzen - was ist damit gemeint?

    EDIT: Hab doch mal versucht, deinen Code zu lesen. Ein Integer ist kein String! Option Strict On!!!!
    Mfg
    Vincent

    Der Grund dafür ist, dass nach dem Button Click die Schleife einfach 8 mal ausgeführt wird.
    Lösung:
    - In die erste Zeile Option Strict On
    - Wenn die Anzahl der Schleifendurchläufe bekannt ist verwendet man in der Regel keine Do-While, sondern eine For Schleife (welche du aber nicht brauchst)
    - Verwende eine Globale Variable wo du die Versuche hochzählst. Nach jedem Klick wird diese überprüft und falls die maximale Anzahl noch nicht erreich wurde um 1 erhöht.
    - Verwende anstatt Rnd -> Private r as New Random() Im Form Load dann -> r.Next(1, 100)
    - Verwende anstatt MsgBox -> Messagebox.Show

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Danke für die schnelle Hilfe!! :thumbup:

    nur leider funktioniert es nicht, wenn ich "option strict on" einfüge kommt eine fehlermeldung das es vor keiner deklaration stehen darf : Fehler 1 Option-Anweisungen müssen vor allen Deklarationen oder Imports-Anweisungen stehen.7

    bitte um Hilfe ich brauche es dringend :(



    Okay vielen vielen dank dafür schon mal. Ich weis ich stelle mich blöd an, aber es funktioniert immer noch nicht.

    Meine erste frage ist, für was ist das

    VB.NET-Quellcode

    1. option strict on
    gut?
    Und die andere wo soll ich das

    VB.NET-Quellcode

    1. r.Next(1, 100)
    rein machen? form load weis ich leider nicht was das


    hier mal der code wie er jetzt ist:

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form2
    3. Dim i As Integer Dim Zufallszahl As Integer
    4. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. Zufallszahl = Private r as New Random() * 100 + 1
    6. End Sub
    7. Private Sub cmd_Prüfen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Prüfen.Click
    8. Dim Eingabe As Integer Eingabe = txt_eingabe.Text txt_eingabe.Text = ""
    9. Do Until i = 8
    10. i = i + 1
    11. If Eingabe = Zufallszahl Then MessageBox.Show("Super, du hast die gesuchte Zahl gefunden, gehe nun ins nächste Level") Form3.Show() Me.Hide()
    12. Else If Eingabe < Zufallszahl Then MessageBox.Show("Die gesuchte Zahl ist größer als " & Eingabe & " ")
    13. Else MessageBox.Show("Die gesuchte Zahl ist kleiner als " & Eingabe & "")
    14. End If
    15. End If
    16. If Me.i = 8 Then MessageBox.Show("Sie haben leider alle Versuche aufgebraucht")
    17. Loop
    18. End Sub
    19. End Class



    als Fehlermeldung kommt: ausdruck erwartet wegen dem Private von

    VB.NET-Quellcode

    1. Private r as New Random() * 100 + 1



    und das Option strict on keine impliziten konvertierungen von integer in string zulässt. wegen

    VB.NET-Quellcode

    1. Eingabe = txt_eingabe.Text



    danke nochmals ^^ ich hoffe des klappt dieses mal mit dem quellcode anzeigen
    Option Strict On sorgt für eine strenge Type-Überprüfung.
    Random ist ein Objekt. r.Next(1, 100) gibt die Zufallszahl zurück.
    und das Option strict on keine impliziten konvertierungen von integer in string zulässt. wegen

    Jop, du musst das Parsen. Richtig würde die Zeile heißen:

    VB.NET-Quellcode

    1. Eingabe = Integer.Parse(txt_eingabe.Text)


    Hier der Code für die Zufallszahl:

    VB.NET-Quellcode

    1. Private r as New Random()
    2. Dim MeineZufallsZahl As Integer = r.Next(0, 100)
    Mfg
    Vincent

    Okay jetzt aber :D

    Soweit hab ich des jetzt, verändert hat sich leider noch nichts wenn ich debugge.
    Mein Programm kann sich aber leider mit dem "Private" nicht anfreunden und meint das es bei der deklaration von lokalen variablen ungültig ist O.o

    jetzt nochmal der code aber richtig:

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form2
    3. Dim i As Integer
    4. Dim Zufallszahl As Integer
    5. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. Dim r As New Random()
    7. Private Zufallszahl As Integer = r.Next(0, 100)
    8. End Sub
    9. Private Sub cmd_Prüfen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_Prüfen.Click
    10. Dim Eingabe As Integer
    11. Eingabe = Integer.Parse(txt_eingabe.Text)
    12. txt_eingabe.Text = ""
    13. Do Until i = 8
    14. i = i + 1
    15. If Eingabe = Zufallszahl Then
    16. MessageBox.Show("Super, du hast die gesuchte Zahl gefunden, gehe nun ins nächste Level")
    17. Form3.Show()
    18. Me.Hide()
    19. Else
    20. If Eingabe < Zufallszahl Then
    21. MessageBox.Show("Die gesuchte Zahl ist größer als " & Eingabe & " ")
    22. Else
    23. MessageBox.Show("Die gesuchte Zahl ist kleiner als " & Eingabe & "")
    24. End If
    25. End If
    26. If i = 8 Then MessageBox.Show("Sie haben leider alle Versuche aufgebraucht")
    27. Loop
    28. End Sub
    29. End Class
    Ehm...
    Warum "loopst" Du während der Überprüfung?

    Ich hab mich kurz drangesetzt:

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Dim Zufallszahl As New Random
    4. Dim Zahl As Integer
    5. Dim Chancen As Integer
    6. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    7. Dim Eingabe = Integer.Parse(TextBox1.Text)
    8. Select Case Chancen
    9. Case 8
    10. MessageBox.Show("Leider ist Deine Chance verbraucht!")
    11. Case Else
    12. If Eingabe = Zahl Then
    13. MessageBox.Show("Gewonnen!")
    14. ElseIf Eingabe < Zahl Then
    15. MessageBox.Show("Knapp!" & Environment.NewLine & "Die gesuchte Zahl ist größer als " & Eingabe & "!")
    16. TextBox1.Text = ""
    17. Chancen += 1
    18. ElseIf Eingabe > Zahl Then
    19. MessageBox.Show("Knapp!" & Environment.NewLine & "Die gesuchte Zahl ist kleiner als " & Eingabe & "!")
    20. TextBox1.Text = ""
    21. Chancen += 1
    22. End If
    23. End Select
    24. End Sub
    25. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    26. Zahl = Zufallszahl.Next(0, 100)
    27. End Sub
    28. End Class


    Private im Load, bzw. im Sub...
    LoL...

    Wenn's schon eine "lokale" Deklaration ist, dann Dim...

    Mfg.eniking1998

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „enIking1998“ ()

    @Alias_Blade
    Alias_Blade, ich hoffe Du nutzt diesen Thread, und programmierst Option Strict On...

    Geh mal bitte auf My_Project, Verweise, und entferne das Häckchen innerhalb des Auflistungfenster, bei Microsoft.VisualBasic ...

    Mfg.eniking1998