Kleines Lernspiel

  • VB.NET

Es gibt 44 Antworten in diesem Thema. Der letzte Beitrag () ist von Pes1899.vb.

    Kleines Lernspiel

    Hallo,

    ich hab möchte für meine Schwestern ein kleines Lernspiel programmieren. Es soll so aussehen das wenn sie das Programm startet ein paar Rechenaufgaben angezeigt werden. Wenn sie alle Aufgaben gelöst hat klickt sie unten auf einen Überprüfen Button. Es soll dann eine kleine Auswertung angezeigt werden und wenn sie alle richtig hat ggf. ein kleines Bildchen oder so angezeigt werden. Jedes mal wenn sie das Programm neustartet sollten andere Aufgaben vorhanden sein, im Zahlenraum von 1 bis 30.

    Wie stelle ich sowas am besten an? ICh bin nähmlich noch Anfänger in VB....
    ein kleines beispiel:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim zufall As New Random
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. Label1.Text = zufall.Next(1, 30)
    5. Label2.Text = zufall.Next(1, 30)
    6. End Sub
    7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    8. If TextBox1.Text = Label1.Text + +Label2.Text Then
    9. MsgBox("Richtig")
    10. Label1.Text = zufall.Next(1, 30)
    11. Label2.Text = zufall.Next(1, 30)
    12. End If
    13. End Sub
    14. End Class

    ich hoffe es hilft dir.
    Hab noch ein Problem, was ist mit Minus Aufgaben? ICh hab es zwar hin bekommen das die Aufgaben minus gerechnet werden müssen, aber was ist wenn z.B. 3-7 kommt? Sowas kann meine Schwester leider noch nicht. ISt es möglich das immer die größere Zahl zuerst kommt? Außerdem ist es machbar das sich Minus/PLus Aufgaben zufällig abwechseln?
    Mein beispiel nochmal, aber mit minus und minuscheck.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim zufall As New Random
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. rechenaufgabe:
    5. Label1.Text = zufall.Next(1, 30)
    6. Label2.Text = zufall.Next(1, 30)
    7. If Label1.Text < Label2.Text Then GoTo rechenaufgabe
    8. End Sub
    9. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    10. If TextBox1.Text = Label1.Text - Label2.Text Then
    11. MsgBox("Richtig")
    12. rechenaufgabe:
    13. Label1.Text = zufall.Next(1, 30)
    14. Label2.Text = zufall.Next(1, 30)
    15. If Label1.Text < Label2.Text Then GoTo rechenaufgabe
    16. End If
    17. End Sub
    18. End Class
    @denny1: nochmals die Frage: hast du schon was, oder möchtest du das Spiel hier "zusammenfragen?"
    Mal ein kleines Beispiel zum Durchschmökern: LINK

    @UFO:Am Anfang funktionieren die Dinge vielleicht. Nur wenn du nicht sauber programmierst (oder einem anderen Neuling sowas beibringst), dann geht das nicht gut.
    Denn dann treten Fehler auf, die du sicher nicht leicht finden wirst. Beispiel:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Label1.Text = "2"
    3. Label2.Text = "11"
    4. If Label1.Text > Label2.Text Then
    5. MsgBox("2 ist grösser als 11???")
    6. End If
    7. End Sub

    PS: Gibt mal von der Hauptseite aus das Suchwort "GOTO" ein, und lies dir die Beiträge durch. (ich will nicht immer der Böse sein) 8-)

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

    Ich hab mal schnell was geschrieben, aber es ist eine Konsolenanwendung.

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Generiert Mathe-Aufgaben, wertet die Antworten aus und gibt ggf. eine Statistik zurück
    3. ''' </summary>
    4. ''' <param name="aufgabencount">Anzahl der Aufgaben, die generiert werden sollen</param>
    5. ''' <param name="runden">Die Stelle, auf die gerundet werden soll, wenn krumme Ergebnisse herauskommen</param>
    6. ''' <param name="statistik">Ob eine Statistik angezeigt werden soll (wenn nichts übergeben wird, ist es auf True)</param>
    7. ''' <remarks></remarks>
    8. Private Sub Mathe(ByVal aufgabencount As Integer, ByVal runden As Integer, Optional ByVal statistik As Boolean = True)
    9. Dim mycounter As Integer = 0
    10. Dim versuche As Integer = 1
    11. Dim totalversuche As Integer = 0
    12. Do
    13. Thread.Sleep(50)
    14. Dim rechenzeichen_index As Integer = New Random().Next(1, 5)
    15. Thread.Sleep(50)
    16. Dim parameter1 As Integer = New Random().Next(1, 30)
    17. Thread.Sleep(50)
    18. Dim parameter2 As Integer = New Random().Next(1, 30)
    19. Dim ergebnis As Double = 0
    20. Dim aufgabe As String = String.Empty
    21. Select Case rechenzeichen_index
    22. Case 1
    23. ergebnis = parameter1 + parameter2
    24. aufgabe = String.Format("{0} + {1} = ", parameter1, parameter2)
    25. Case 2
    26. ergebnis = parameter1 - parameter2
    27. aufgabe = String.Format("{0} - {1} = ", parameter1, parameter2)
    28. Case 3
    29. ergebnis = parameter1 * parameter2
    30. aufgabe = String.Format("{0} * {1} = ", parameter1, parameter2)
    31. Case 4
    32. ergebnis = parameter1 / parameter2
    33. aufgabe = String.Format("{0} / {1} = ", parameter1, parameter2)
    34. End Select
    35. ergebnis = Math.Round(ergebnis, runden)
    36. Console.Write("Neue Aufgabe: {0}", aufgabe)
    37. Dim answer As String = Console.ReadLine()
    38. Do Until answer = ergebnis.ToString()
    39. versuche += 1
    40. Console.WriteLine("Falsch - bisherige Versuche für diese Aufgabe: {0}", versuche)
    41. answer = Console.ReadLine()
    42. Loop
    43. totalversuche += versuche
    44. versuche = 1
    45. mycounter += 1
    46. Loop Until mycounter = aufgabencount
    47. If statistik = True Then
    48. Console.WriteLine("Übung zu Ende! :)" & vbCrLf & "Aufgaben: {0}" & vbCrLf & "Versuche insgesamt: {1}", aufgabencount, totalversuche)
    49. End If
    50. End Sub


    Der Aufruf könnte so aussehen (in Main):

    VB.NET-Quellcode

    1. Mathe(5, 2)
    2. Console.Write("Nochmal spielen? (ja oder nein): ")
    3. Dim antwort As String = Console.ReadLine().ToLower()
    4. Do Until antwort = "nein"
    5. Mathe(5, 2)
    6. Loop


    MfG
    ALso das ist jetzt mein Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim zufall As New Random
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. Dim ergebniss As Integer
    5. ergebniss = Label1.Text - +Label2.Text
    6. If TextBox1.Text = ergebniss Then
    7. MessageBox.Show("RICHTIG")
    8. erstellen()
    9. Else
    10. MessageBox.Show("FALSCH!")
    11. End If
    12. End Sub
    13. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    14. erstellen()
    15. End Sub
    16. Private Sub erstellen()
    17. Label1.Text = zufall.Next(1, 30)
    18. Label2.Text = zufall.Next(1, 29)
    19. If Label1.Text < Label2.Text Then
    20. Label1.Text = zufall.Next(1, 30)
    21. Label2.Text = zufall.Next(1, 29)
    22. End If
    23. End Sub
    24. End Class


    Nur klappt das halt nicht mit dem das die größere Zahl zuerst kommt! Was kann ich den als Alternative zu Label nehmen?

    @kurt: Sorry blick bei dir aber nicht durch.....
    vielleicht geht das:

    VB.NET-Quellcode

    1. Private Sub erstellen()
    2. Dim z1 As Integer = zufall.Next(1, 30)
    3. Dim z2 As Integer = zufall.Next(1, 29)
    4. If z1 < z2 Then
    5. Label1.Text = z2
    6. Label2.Text = z1
    7. Else
    8. Label1.Text = z1
    9. Label2.Text = z2
    10. End If
    11. End Sub
    Strings (z.B. label1.text) werden anders sortiert als Zahlen

    Beispiel: die folgenden Zahlen: 1, 100, 5, 200
    richtig sortiert lautet die Reihenfolge: 1, 5, 100, 200
    Als Text sortiert: 1, 100, 200, 5

    Deshalb oben meine Diskussion über den richtigen Stil beim Programmieren. Du hast jetzt genau so ein Beispiel, und der Fehler ist für Neulinge nicht zu finden, und hat riesige Auswirkungen.
    Appell an die Anfänger: Hört auf diejenigen, die sagen: In der ersten Zeile des Programmes die Anweisung "OPTION STRICT ON" einfügen. Damit wird die strikte Typüberprüfung eingeschaltet. Typ-Konvertierungen sind zwingend zu verwenden. Wenn ihr sagt, das Programm funkioniert, dann seid ihr schlicht im Irrtum. Ein versteckter Fehler ist oft gefährlicher als ein Fehler, der euch eine riesige Fehlerbeschreibung entgegenwirft.

    Versuche mal die Zeile 25 zu ersetzen:

    VB.NET-Quellcode

    1. If cInt(Label1.Text) < cInt(Label2.Text) Then


    EDIT @UFO. Schaut schon bissl anders aus 8-)