2017-11-15 1 views
0

Ich habe eine harte Zeit, die meine Meinung um dieses einwickelt. Jedes Mal, wenn der Spieler eine falsche Schätzung macht, sollte er seine Wette von der anfänglichen Balance subtrahieren. Da es sich in einer Schleife befindet, spuckt es immer das anfängliche Gleichgewicht von Anfang an jedes Mal das gleiche Gleichgewicht aus. (offensichtlich) Ich habe versucht, verschiedene Variablen zuweisen und kann es einfach nicht herausfinden.Behalten Sie Punkte im einfachen Konsolenspiel im Auge

Ich habe die mittleren und harten Schwierigkeitsmethoden weggelassen, da sie im Moment nichts nützen, bis ich diese herausfinde.

Mein Main() ruft nur die setDifficulty() auf. Nichts anderes.

class Control 
{ 
    int selectedNumber = 0; 
    Random num = new Random(); 
    bool playAgain = true; 
    int difficulty = 0; 
    int bet = 0; 
    int initialBalance = 20; 
    int runningCredits = 0; 
    int credits = 0; 

    public Control() 
    { } 

    //sets game difficulty 
    public void SetDifficulty() 
    { 


     Console.Clear(); 
     Console.WriteLine("Please select level of difficulty between 1 - 100"); 
     difficulty = int.Parse(Console.ReadLine()); 


     if (difficulty >= 1 && difficulty <= 20) 
      LetsPlayEasy(); 


     else if (difficulty >= 21 && difficulty <= 50) 
      LetsPlayMedium(); 


     else if (difficulty >= 51 && difficulty <= 100) 
      LetsPlayHard(); 


     else 
     { 
      SetDifficulty(); 
     } 


    } 

    //easy level method 
    public void LetsPlayEasy() 
    { 
     //variables 
     int userGuess; 
     int numGuesses = 0; 
     selectedNumber = num.Next(1, 101); 

     Console.BackgroundColor = ConsoleColor.DarkYellow; 
     Console.Clear(); 
     Console.ForegroundColor = ConsoleColor.White; 

     Console.WriteLine("Difficulty level = EASY"); 

     Console.WriteLine("\nBeggining credit balance = " + initialBalance); 
     Console.WriteLine("\nPlease place a bet. You will lose those credits for every incorrect guess!"); 
     bet = int.Parse(Console.ReadLine()); 

     do 
     { 
      Console.WriteLine("\nGuess a number between 1 and 100."); 
      userGuess = Convert.ToInt32(Console.ReadLine()); 
      numGuesses++; 

      UI output = new UI(); 
      output.CompareNumbers(userGuess, ref selectedNumber, ref playAgain, ref numGuesses); 


      runningCredits = (initialBalance - bet); 
      Console.WriteLine("\nYou have " + runningCredits + " credits remaining."); 

     } while (playAgain == true); 
    } 

class UI 
{ 
    Random num = new Random(); 
    int keepGoing; 

    public UI() 
    { } 

    //compare user's guess to selected number 
    public void CompareNumbers(int userGuess, ref int selectedNumber, ref bool playAgain, ref int numGuesses) 
    { 
     Control difficulty = new Control(); 
     Admin say = new Admin(); 


     if (userGuess > selectedNumber) 
     { 
      Console.Beep(600, 300); 
      Console.WriteLine("\nToo High! Guess Again!"); 

     } 

     else if (userGuess < selectedNumber) 
     { 
      Console.Beep(300, 300); 
      Console.WriteLine("\nToo Low! Guess Again!"); 

     } 
     else 
     { 
      Console.Beep(350, 300); 
      Console.Beep(380, 200); 
      Console.Beep(380, 100); 
      Console.Beep(500, 1100); 
      Console.WriteLine("\n\nCongrats! It took you " + numGuesses + " guesses to win."); 
      numGuesses = 0; 
      Console.WriteLine("Press 1 to play again or 2 to quit."); 
      keepGoing = int.Parse(Console.ReadLine()); 


      while (keepGoing != 1 && keepGoing != 2) 
      { 
       Console.WriteLine("\n\nPlease type either 1 or 2 only!"); 
       keepGoing = int.Parse(Console.ReadLine()); 
      } 

      if (keepGoing == 2) 
      { 
       playAgain = false; 
       say.Goodbye(); 
      } 

      else 
      { 
       Console.Clear(); 
       difficulty.SetDifficulty(); 
      } 

     } 

    } 
} 

}

Antwort

2

Initialise runningBalance zu initialBalance und diesen Wert nur für Berechnungen verwenden. Wenn Sie initialBalance nur einmal benötigen, können Sie dies auch tun, indem Sie einfach runningBalance in initialBalance umschalten, ohne runningBalance zu initialisieren.

Console.WriteLine("\nBeggining credit balance = " + initialBalance); 
Console.WriteLine("\nPlease place a bet. You will lose those credits for every incorrect guess!"); 
bet = int.Parse(Console.ReadLine()); 
runningBalance = initialBalance 
do 
{ 
    Console.WriteLine("\nGuess a number between 1 and 100."); 
    userGuess = Convert.ToInt32(Console.ReadLine()); 
    numGuesses++; 

    UI output = new UI(); 
    output.CompareNumbers(userGuess, ref selectedNumber, ref playAgain, ref numGuesses); 


    runningCredits -= bet; 
    Console.WriteLine("\nYou have " + runningCredits + " credits remaining."); 

} while (playAgain == true); 
0
runningCredits = (initialBalance - bet); 

Sie, nicht initialBalance oder bet in der Schleife ändern, so hat jede Iteration den gleichen Wert von runningCredits. diese

Außerhalb der Schleife tun:

runningCredits = initialBalance; 

Innerhalb der Schleife wie folgt vorgehen:

runningCredits -= bet; 

Hinweis: Sie haben keinen Code in der Schleife zu überprüfen, um zu sehen, wenn der Benutzer richtig oder falsch geraten hat (und als solcher verliert der Benutzer immer und Sie ziehen immer die Wette ab).

+0

Ich hatte ursprünglich geändert, aber wieder, es kepis zurückgesetzt, was es ursprünglich als sowieso erklärt wurde, so war es nicht Arbeit. –

+0

Die Methoden zum Vergleichen der Antwort werden in einer if-Anweisung in der anderen Klasse aufgerufen ... Was macht die - =? Entschuldigung, ganz neu, wenn du das nicht schon weißt. Danke auch für die Hilfe @crashmstr –

+0

'runniningCredits - = bet;' ist das gleiche wie 'runningCredits = runningCredits - bet;'. Was den Antwort-Test betrifft, brauchen Sie ihn auf dieser Ebene, also geben Sie einen Bool zurück oder fügen Sie einen anderen Referenz-Parameter hinzu (bevorzugen Sie einen Rückgabewert), so dass Sie wissen, ob sie gewonnen oder verloren haben und ob Sie den 'runningCredits' hinzufügen oder entfernen. – crashmstr

Verwandte Themen