Zahlenraten

    • VB.NET

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von der_Kurt.

      Zahlenraten

      Hello,

      angeregt durch diesen Thread habe ich kurz ein Zahlenratespiel zusammengebastelt.
      Vorgegeben ist eine Zahl zwischen 1 und 100, und ihr könnt so oft tippen, bis die Zahl erraten wurde.

      Wenn jemand noch nicht so sattelfest in VB ist, kann er/sie hier vielleicht etwas abschauen. (Und die Profis brauchen schließlich auch was zum Lachen :D )

      Spoiler anzeigen

      VB.NET-Quellcode

      1. Module Module1
      2. Dim zeile As Integer = 1
      3. Dim spalte As Integer = 1
      4. Dim bisherigeVersuche As List(Of Integer)
      5. Sub Main()
      6. 'Minimum und Maximum festlegen
      7. Dim minimum As Integer = 1
      8. Dim maximum As Integer = 100
      9. 'Das Zufallsobjekt und die Zufallszahl definieren
      10. Dim robj As New Random
      11. Dim zufallszahl As Integer
      12. 'Hilfsvariablen
      13. Dim count As Integer
      14. Dim Eingabe As String
      15. Dim zahl As Integer
      16. bisherigeVersuche = New List(Of Integer)
      17. 'Titelscreen "zeichnen"...
      18. Console.Clear()
      19. Console.WriteLine("*******************************************************************************")
      20. Console.WriteLine(" Zahlenraten")
      21. Console.WriteLine("*******************************************************************************")
      22. Console.WriteLine()
      23. Console.WriteLine()
      24. Console.WriteLine()
      25. Console.ForegroundColor = ConsoleColor.White
      26. Console.WriteLine("Ich denke an eine Zahl zwischen {0} und {1}", minimum, maximum)
      27. Console.WriteLine("Kannst du erraten, welche? ['e' für Ende]")
      28. Console.ForegroundColor = ConsoleColor.Gray
      29. Ausgabe("(zwischen zwei Mahlzeiten geschrieben von ...der_Kurt)", enInput.CopyRight)
      30. zufallszahl = robj.Next(minimum, maximum)
      31. 'Eine Schleife für das Spiel
      32. Do
      33. 'Zähler erhöhen
      34. count += 1
      35. 'Das Copyright kann nach ein paar Nummern ruhig verschwinden...
      36. If count > 5 Then Ausgabe("", enInput.CopyRight)
      37. 'Ausgabe der bisher gezogenen Nummern
      38. Ausgabe(getAllNumbers, enInput.Outputallnumbers)
      39. 'Wievielter Versuch... ?
      40. Ausgabe("Versuch Nummer " & count.ToString, enInput.versuch)
      41. 'Eingabeprompt anzeigen
      42. Ausgabe("===>", enInput.Input)
      43. Eingabe = Console.ReadLine()
      44. If IsNumeric(Eingabe) Then
      45. 'ist die Eingabe eine Zahl?
      46. zahl = CInt(Eingabe)
      47. Select Case zahl
      48. Case zufallszahl
      49. 'TREFFER! die Zahl wurde getroffen
      50. '====================
      51. 'die bisherigen Versuche werden gelöscht
      52. bisherigeVersuche.Clear()
      53. 'Zähler zurückstellen
      54. count = 0
      55. 'paarmal Senf dazugeben...;)
      56. Ausgabe("VOLLTREFFER! Die Zahl " & zahl.ToString & " war gesucht", enInput.meldung)
      57. warteauftaste()
      58. Ausgabe("", enInput.outputanswer)
      59. Ausgabe("", enInput.WaitForKey)
      60. 'neue Zufallszahl ermitteln
      61. zufallszahl = robj.Next(minimum, maximum)
      62. Case Is > zufallszahl
      63. Ausgabe("Ich suche eine kleinere Zahl", enInput.outputanswer_tohigh)
      64. bisherigeVersuche.Add(zahl)
      65. Case Is < zufallszahl
      66. Ausgabe("Ich suche eine größere Zahl", enInput.outputanswer_tolow)
      67. bisherigeVersuche.Add(zahl)
      68. End Select
      69. Else
      70. 'ist die Eingabe was anderes als 'ne Zahl?
      71. Ausgabe("Versuchs mal mit 'ner Zahl...", enInput.meldung)
      72. End If
      73. Loop Until Eingabe = "e" Or Eingabe = ""
      74. Ausgabe("", enInput.meldung)
      75. Ausgabe("wir sehen uns wieder...", enInput.WaitForKey)
      76. Console.ReadKey()
      77. End Sub
      78. ''' <summary>
      79. ''' stellt die vorher gespeicherte Cursorposition wieder her
      80. ''' </summary>
      81. ''' <remarks></remarks>
      82. Sub cursorposload()
      83. Console.CursorTop = zeile
      84. Console.CursorLeft = spalte
      85. End Sub
      86. ''' <summary>
      87. ''' Speichert die aktuelle Cursorposition
      88. ''' </summary>
      89. ''' <remarks></remarks>
      90. Sub cursorpossave()
      91. zeile = Console.CursorTop
      92. spalte = Console.CursorLeft
      93. End Sub
      94. Sub Ausgabe(ByVal meaning As String, ByVal nxInput As enInput)
      95. 'Standardfarben wiederherstellen
      96. Console.BackgroundColor = ConsoleColor.Black
      97. Console.ForegroundColor = ConsoleColor.Gray
      98. Select Case nxInput
      99. Case enInput.CopyRight
      100. Console.ForegroundColor = ConsoleColor.Yellow
      101. Console.CursorLeft = 1
      102. Console.CursorTop = 4
      103. Case enInput.Input
      104. Console.CursorLeft = 4
      105. Console.CursorTop = 9
      106. Case enInput.Outputallnumbers
      107. Console.CursorLeft = 2
      108. Console.CursorTop = 21
      109. Case enInput.outputanswer, _
      110. enInput.meldung, _
      111. enInput.outputanswer_tohigh, _
      112. enInput.outputanswer_tolow
      113. Select Case nxInput
      114. Case enInput.meldung
      115. Console.ForegroundColor = ConsoleColor.Red
      116. Case enInput.outputanswer_tohigh
      117. Console.ForegroundColor = ConsoleColor.Magenta
      118. Case enInput.outputanswer_tolow
      119. Console.ForegroundColor = ConsoleColor.DarkRed
      120. End Select
      121. Console.CursorLeft = 1
      122. Console.CursorTop = 13
      123. Case enInput.WaitForKey
      124. Console.CursorLeft = 1
      125. Console.CursorTop = 23
      126. Console.ForegroundColor = ConsoleColor.DarkYellow
      127. Case enInput.versuch
      128. Console.CursorLeft = 2
      129. Console.CursorTop = 19
      130. End Select
      131. 'Cursor wird gespeichert,
      132. 'Rest der Zeile wird gelöscht,
      133. 'der Cursor wieder zurückgestellt...
      134. cursorpossave()
      135. Console.Write(Space(60 - Console.CursorLeft))
      136. cursorposload()
      137. '...und dann die Meldung geschrieben
      138. Console.Write(meaning)
      139. Console.ForegroundColor = ConsoleColor.Gray
      140. End Sub
      141. ''' <summary>
      142. ''' Gibt alle bisher gezogenen Nummern getrennt durch Komma zurück
      143. ''' </summary>
      144. ''' <returns></returns>
      145. ''' <remarks>...ausser es gibt keine</remarks>
      146. Function getAllNumbers() As String
      147. If bisherigeVersuche.Count = 0 Then Return "<bisher noch keine Zahlen>"
      148. Dim gAll As String = ""
      149. For Each element In bisherigeVersuche
      150. gAll &= element.ToString & ", "
      151. Next
      152. 'das letzte ", " wegschneiden...
      153. gAll = gAll.Substring(0, gAll.Length - 2)
      154. Return gAll
      155. End Function
      156. Sub warteauftaste()
      157. '...wer das nicht versteht...
      158. Ausgabe("Bitte eine Taste drücken...", enInput.WaitForKey)
      159. Console.ReadKey()
      160. End Sub
      161. ''' <summary>
      162. ''' Verschiedene Arten der Ausgabe
      163. ''' </summary>
      164. ''' <remarks></remarks>
      165. Public Enum enInput
      166. undefined
      167. CopyRight
      168. WaitForKey
      169. Input
      170. Outputallnumbers
      171. outputanswer
      172. outputanswer_tohigh
      173. outputanswer_tolow
      174. versuch
      175. meldung
      176. End Enum
      177. End Module


      LG, der_Kurt

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

      Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

      Ja ich kann auch "Hi" eingeben und es wird eine Exception geworfen, er wollte denjenigen nur einen Denkanstoß geben.
      Mfg
      Loadsoft

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

      Hi LaPi!

      ...und es ist nicht der einzige Logik-Fehler im Programm...

      Ich habe, wie Load-soft.ch.vu richtig angemerkt hat, eigentlich mehr Zeit damit verbracht, das ganze anschaulich zu gestalten.
      Sprich, das Programmgerüst, die Form und die Kommentare waren mir hier wichtiger, als kleine Programmierfehler.

      Dennoch: Danke fürs testen
      LG, Kurti

      PS: den "HI"-Fehler kann ich bei mir nicht reproduzieren, das Programm führt dann den Else-Zweig ab Zeile 90 aus..