C# :: Aufgabe #25 :: Lösung #12
12 Lösungen

#25
Zahlen Raten - Fortgeschrittener
Fortgeschrittener - C#
von zayc_
- 28.12.2012 um 14:00 Uhr
Das zu programmierende Programm soll eine Zufallszahl (integer, der User soll nach dem Bereich gefragt werden) generieren.
Der User soll diese erraten. Nach jedem Versuch soll der User darüber informiert werden, der wie vielte Versuch es war, ob er richtig oder falsch liegt, und wenn er falsch liegt ob die gesuchte Zahl grösser oder kleiner als die vom User eingegebene ist.
Zusatz für Fortgeschrittene:
Bei Falscheingaben (Buchstaben, Sonderzeichen, etz.) soll der User darüber informiert werden.
Bei den Versuchen >10 soll eine führende Null mit ausgegeben werden (also statt 1,2,3 soll 01, 02 ,03 ausgegeben werden.)
Bei der wiederholten Eingabe einer Zahl soll der User darüber informiert werden.
Der User soll den Bereich in dem die Zufallszahl liegen soll, selbst definieren.
Der User soll informiert werden, wenn sein Versuch ausserhalb des definierten Bereichs liegt.
Beispiel einer Konsolenausgabe:
Der User soll diese erraten. Nach jedem Versuch soll der User darüber informiert werden, der wie vielte Versuch es war, ob er richtig oder falsch liegt, und wenn er falsch liegt ob die gesuchte Zahl grösser oder kleiner als die vom User eingegebene ist.
Zusatz für Fortgeschrittene:
Bei Falscheingaben (Buchstaben, Sonderzeichen, etz.) soll der User darüber informiert werden.
Bei den Versuchen >10 soll eine führende Null mit ausgegeben werden (also statt 1,2,3 soll 01, 02 ,03 ausgegeben werden.)
Bei der wiederholten Eingabe einer Zahl soll der User darüber informiert werden.
Der User soll den Bereich in dem die Zufallszahl liegen soll, selbst definieren.
Der User soll informiert werden, wenn sein Versuch ausserhalb des definierten Bereichs liegt.
Beispiel einer Konsolenausgabe:
Konsolenausgabe:
Bitte die Untergränze wählen: 20
Bitte die Obergränze wählen: 60
Bitte erraten sie die gesuchte Zahl, sie befindet sich zwischen 20 und 60.
Ihr 01. Versuch: 5
Die eingegebene Zahl befindet sich ausserhalb des von ihnen definierten Bereich.
Ihr 02. Versuch: halloooo
Bitte nur Z A H L E N eingeben.
Ihr 03. Versuch: 55
Die gesuchte Zahl ist kleiner.
Ihr 04. Versuch: 25
Die gesuchte Zahl ist grösser.
Ihr 05. Versuch: 55
Mit dieser Zahl haben Sie es schon einmal versucht!
Ihr 06. Versuch: 40
Glückwunsch die von Ihnen eingegebene Zahl ( 40 ) stimmt mit der gesuchten Zahl überein.
#12

von Flocke (180 Punkte)
- 26.11.2019 um 18:02 Uhr

namespace ZahlenRaten { class ZahlenRaten { static void Main(string[] args) { var enginge = new Engine(); enginge.ValidateSpan(); } } }

using System; using System.Linq; namespace ZahlenRaten { class Engine { string underS; string upperS; string guessS; int under; int upper; int attempts; int rndNumber; int guessedNumber; int[] guessedNumbers = new int[0]; public void ValidateSpan() { do { Console.Write("Bitte die Untergrenze angeben: "); underS = (Console.ReadLine()); Console.Write("Bitte die Obergrenze angeben: "); upperS = (Console.ReadLine()); if (TryParseInt(underS) && TryParseInt(upperS)) { under = Int32.Parse(underS); upper = Int32.Parse(upperS); rndNumber = this.GenerateRndNumber(under, upper); this.ValidateUserInput(under, upper); } else Console.WriteLine("Bitte nur Zahlen eingeben"); } while (!TryParseInt(underS) || !TryParseInt(upperS)); } private void ValidateUserInput(int under, int upper) { do { Console.WriteLine("Bitte erraten Sie die gesuchte Zahl, sie befindet sich zwischen {0} und {1}: ", under, upper); guessS = Console.ReadLine(); if (TryParseInt(guessS)) { guessedNumber = Int32.Parse(guessS); this.DetermineCorrectGuess(guessedNumber, under, upper); } else Console.WriteLine("Bitte nur Zahlen eingeben"); } while (!TryParseInt(guessS) || guessedNumber != rndNumber); } private void DetermineCorrectGuess(int guessedNumber, int under, int upper) { attempts++; if (guessedNumbers.Contains(guessedNumber)) { var attempt = attempts.ToString().PadLeft(2, '0'); Console.Clear(); Console.WriteLine("Versuch {0}: Mit dieser Zahl {1} haben sie es schon einmal versucht!", attempts, guessedNumber); } else if (guessedNumber < under || guessedNumber > upper) { var attempt = attempts.ToString().PadLeft(2, '0'); Console.Clear(); Console.WriteLine("Versuch {0}: Die gesuchte Zahl liegt außerhalb des Definitionbereichs", attempt); } else if (guessedNumber < rndNumber) { var attempt = attempts.ToString().PadLeft(2, '0'); Console.Clear(); Console.WriteLine("Versuch {0}: Die gesuchte Zahl ist größer", attempt); Array.Resize(ref guessedNumbers, guessedNumbers.Length + 1); guessedNumbers[guessedNumbers.GetUpperBound(0)] = guessedNumber; } else if (guessedNumber > rndNumber) { var attempt = attempts.ToString().PadLeft(2, '0'); Console.Clear(); Console.WriteLine("Versuch {0}: Die gesuchte Zahl ist kleiner", attempt); Array.Resize(ref guessedNumbers, guessedNumbers.Length + 1); guessedNumbers[guessedNumbers.GetUpperBound(0)] = guessedNumber; } else if (guessedNumber == rndNumber) { var attempt = attempts.ToString().PadLeft(2, '0'); Console.Clear(); Console.WriteLine("Versuch {0}: Glückwunsch! Die von Ihnen eingegebene Zahl {1} ist korrekt!", attempt, guessedNumber); Console.ReadKey(); } } private int GenerateRndNumber(int under, int upper) { var rndNumber = new Random(); return rndNumber.Next(under, upper++); } private bool TryParseInt(String s) { int i; bool valid = Int32.TryParse(s, out i); return valid; } } }
Konsolenausgabe:
Bitte die Untergrenze angeben: 20
Bitte die Obergrenze angeben: 50
Bitte erraten Sie die gesuchte Zahl, sie befindet sich zwischen 20 und 50:
Versuch 03: Mit dieser Zahl 22 haben sie es schon einmal versucht!
Versuch 08: Die eingegebene Zahl liegt außerhalb des Definitionbereichs
Versuch 12: Die gesuchte Zahl ist größer
Versuch 16: Die gesuchte Zahl ist kleiner
Versuch 18: Glückwunsch! Die von Ihnen eingegebene Zahl 47 ist korrekt!
Fehlermeldung:
Ungültige Spanne, Untergrenze muss größer oder gleich der Obergrenze sein!
Bitte nur Zahlen eingeben!
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1