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();
}
}
}
}
}
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. –
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 –
'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