2017-01-27 3 views
-1

Ich versuche, ein Mastermind-Spiel zu erstellen, ohne Arrays zu verwenden, die 5 Zufallszahlen 1-9 generiert, und Sie haben 15 Versuche, sie zu erraten. * = Korrekt - = WRONG + = falsche Position, aber die Nummer ist richtig.Erstellen eines MasterMind-Spiels ohne Verwendung von Arrays in C#?

Ich habe den ersten Teil davon erstellt, und es funktioniert für den Versuch, die erste zufällige Ziffer von 1-9 zu erraten. Ich bin mir nicht sicher, wie ich zur zweiten Nummer kommen soll, damit der Spieler die zweite 1-9 Ziffer erraten kann, und wie man den Code dazu bringt, die gleichen int's zu verwenden/addiere die Raten, die ich bereits eingerichtet habe. Ich habe alles versucht, was ich wusste, und ich kann es nicht herausfinden. Wenn ich etwas Hilfe bekommen könnte, wo ich falsch liege, und wie man es richtig einrichtet, würde es sehr geschätzt werden. Prost

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Decisions 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Guess the 5 Digit code, Under 15 tries!"); 

      Random myRandom = new Random(); 
      Int32 one = myRandom.Next(1, 10); 
      Int32 two = myRandom.Next(1, 10); 
      Int32 three = myRandom.Next(1, 10); 
      Int32 four = myRandom.Next(1, 10); 
      Int32 five = myRandom.Next(1, 10); 
      int guesses = 0; 
      bool incorrect = true; 

      do 
      { 

       if (guesses < 15) 
        Console.WriteLine("Guess a number between 1 and 9"); 
       string result = Console.ReadLine(); 
       guesses++; 

       if (guesses > 15) 
        Console.WriteLine("You went over 15 tries! Better luck next time"); 


       if (result == one.ToString()) 
        incorrect = false; 
       else if (result == two.ToString()) 
        Console.WriteLine("+"); 
       else if (result == three.ToString()) 
        Console.WriteLine("+"); 
       else if (result == four.ToString()) 
        Console.WriteLine("+"); 
       else if (result == five.ToString()) 
        Console.WriteLine("+"); 
       else 
        Console.WriteLine("-"); 
      } while (incorrect); 

      if (guesses < 15) 
       Console.WriteLine("*Correct! It took {0} guesses.", guesses); 
      if (guesses > 15) 
       Console.WriteLine("You took to many tries! Better luck next time! Total Guesses: {0}", guesses); 

      Console.ReadLine(); 
     } 
    } 
} 
+1

Warum Sie nicht Array verwenden möchten? – MacakM

+2

Warum möchten Sie es ohne Arrays machen? Mähen Sie Ihren Rasen auch mit Nagelknipsern? – itsme86

+0

Ist dies eine Hausaufgabe, bei der von Ihnen erwartet wird, dass Sie eine Liste anstelle eines Arrays verwenden? – chadnt

Antwort

0

Ich denke, was Sie suchen zu verwenden ist eine Liste. Aber zuerst -

Denken Sie daran, Sie möchten vorsichtig sein, wie Sie Dinge in Ihrem Programm bestellen, vor allem, wenn es um Benutzerfreundlichkeit geht. Zum Beispiel:

if (guesses < 15) 
    Console.WriteLine("Guess a number between 1 and 9"); 
string result = Console.ReadLine(); 
guesses++; 

if (guesses > 15) 
    Console.WriteLine("You went over 15 tries! Better luck next time"); 

Also, wenn guesses 14 ist, wird es den Text zeigen, haben die Benutzer erraten und Schrittmaß „Vermutungen“ - jedoch, wenn es wieder an den Anfang läuft, wird das Programm über die Eingabeaufforderung überspringen : "Rate eine Zahl zwischen 1 und 9" - aber es wartet immer noch auf die Benutzereingabe. Nachdem sie ihre Eingabe eingegeben haben, werden sie aufgefordert, die Anzahl der Versuche zu überprüfen, aber es wird immer noch prüfen, ob diese Zahl übereinstimmt! Wie Sie Ihr Programm bestellen, kann für die Benutzer sehr wichtig sein.

Ihr Programm kann wie folgt aussehen:

const int iMaxGuesses = 15; 
    const int iListSize = 5; 
    static void Main(string[] args) 
    { 
     Random myRandom = new Random(); 

     // Hold a list of integers 
     List<int> numbers = new List<int>(); 
     int guesses = 0; 

     // Value where we will rebuild the code 
     string result = string.Empty; 

     // Placeholder for user's guess 
     string strGuess; 

     // Converted guess 
     int guess; 

     // Generate random list of numbers 
     for (int i = 0; i < iListSize; i++) 
      numbers.Add(myRandom.Next(1, 10)); 

     // Prompt user 
     Console.WriteLine("Guess the {0} Digit code, Under {1} tries!", iListSize, iMaxGuesses); 

     // Open the game loop 
     do 
     { 
      // Check if we have exceeded the max amount of times we get to guess 
      if (guesses > iMaxGuesses) 
       Console.WriteLine("You went over 15 tries! Better luck next time"); 
      else 
      { 
       // Prompt user 
       Console.WriteLine("Guess a number between 1 and 9"); 
       // Get input 
       strGuess = Console.ReadLine(); 
       // Check if input is in fact an integer, if so - put the value in our variable 'guess' 
       if (int.TryParse(strGuess, out guess)) 
       { 
        // We have a proper guess, increment 
        guesses++; 
        // Checks if the number is the next in our list 
        if (numbers[0] == guess) 
        { 
         Console.WriteLine("Congratulations, {0} was a match!", guess); 
         // Remove that from the List 
         numbers.Remove(numbers[0]); 
         // Add it to our sequence (result) 
         result += guess; 
        } 
        else if(numbers.Contains(guess)) 
         Console.WriteLine("Right number, wrong spot!"); 
        else 
         Console.WriteLine("Incorrect, please try again!"); 
       } 
       else // Inform user we will only accept numbered input 
        Console.WriteLine("That was not a number. Please try again!"); 
      } 

     } while (guesses <= iMaxGuesses && numbers.Count > 0); 

     if (guesses < iMaxGuesses) 
      Console.WriteLine("Correct! It took {0} guesses to come up with the pattern {1}", guesses, result); 
     else 
      Console.WriteLine("You took to many tries! Better luck next time! Total Guesses: {0}", guesses); 

     Console.ReadLine(); 
    } 

Paar Dinge zu beachten: Wir Klasse-Level-Konstanten für die Liste Größe haben (wir dazu kommen werden) und wie viele Vermutungen, falls Diese müssen im laufenden Betrieb geändert werden. Sie können dies ignorieren.

Das erste, was Sie bemerken können, ist eine Liste von ganzen Zahlen List<int> numbers = new List<int>() Hier sind einige Reading (what is difference between string array and list of string in c#) über die Unterschiede zwischen Arrays und Listen (Sammlungen).

Wir initialisieren die Liste der Zufallszahlen durch Erstellen einer Schleife die maximale Größe unserer Liste und Hinzufügen einer zufälligen ganzen Zahl zu dieser Liste.

Auf der Do/While-Schleife überprüfen wir, dass wir immer noch weniger als iMaxGuesses und wir haben Objekte in unserer Liste. Also nehmen wir die Benutzereingabe. Zuerst verwenden wir int.TryParse um festzustellen, ob wir tatsächlich eine Nummer haben. Wenn wir haben eine Nummer, werden wir überprüfen, dass gegen die erste Nummer, die in der Liste erscheint, numbers[0], und wenn ja, entfernen wir es aus der Liste: numbers.Remove(numbers[0]); Der coole Teil über Listen, ist das, wenn Sie eine entfernen Element, es ändert die Größe der Liste im Gegensatz zu einem Array, das eine feste Größe hat. Also, wenn Ihre Liste ist , und Sie entfernen die 1, das nächste Mal, wenn Sie den Wert von numbers[0] überprüfen, wird es 2 sein!

Ich bin mir ziemlich sicher, dass der Rest selbsterklärend sein sollte. Lassen Sie mich wissen, wenn etwas fehlt oder Sie Hilfe benötigen, um etwas zu verstehen.

+0

Vielen Dank, erklärte es sehr gut. –

+0

Ich fand "if (Zahlen [0]! = Raten) Console.WriteLine (" Falsch, versuche es noch einmal! ");" Und es funktioniert, Jetzt brauche ich nur eine, die Ihnen sagt, ob es richtig ist, aber nur in der falschen Nummer Position. Wie würde ich also in der Lage sein, zu überprüfen, ob Ihre Antworteingabe gleich der Zahl [0] ist, aber nicht die Nummer, für die Sie gerade raten, oder die vorherigen Zahlen, die Sie bereits erraten haben? –

+0

Wenn "if (numbers [0] == guess)" false zurückgibt, können Sie "else if (numbers.Contains (guess))" verwenden, um zu sehen, ob diese Zahl irgendwo anders in der Liste erscheint. Wickeln Sie diese if-Anweisung mit einem else ein, um die Meldung "Incorrect, Try again" anzuzeigen, anstatt diese Zahlen [0] zu prüfen! = Rate. –

Verwandte Themen