在简单的控制台游戏中跟踪点数

时间:2017-11-15 16:48:07

标签: c# console-application

我很难绕过这个问题。每次玩家做出错误猜测时,都应该从初始余额中减去他/她的下注。 由于它处于循环中,因此每次始终从初始平衡时都会产生相同的平衡。 (明显) 我尝试过分配不同的变量,但似乎无法弄明白。

我省略了中等难度和难度难度的方法,因为它们现在没用,直到我弄清楚这个。

My Main()只调用setDifficulty()。没有其他的。

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

        }

    }
}

}

2 个答案:

答案 0 :(得分:2)

将runningBalance初始化为initialBalance并仅将此值用于计算。如果你只需要一次initialBalance,你也可以通过简单地将runningBalance切换到initialBalance而不初始化runningBalance来实现。

 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);

答案 1 :(得分:0)

runningCredits = (initialBalance - bet);

您不会在循环中更改initialBalancebet,因此每次迭代都具有相同的runningCredits值。

在循环之外,执行此操作:

runningCredits = initialBalance;

在循环内部,执行以下操作:

runningCredits -= bet;

注意:您没有任何代码可以检查循环以查看用户是否猜对了(因此,用户总是输了而且您总是减去赌注)