使用递减运算符

Using decrement operator

对于我的代码,这是一个猜数游戏。他们在输之前得到 10 次猜测,它会告诉他们是否太低、太高等。当我告诉他们他们是太高还是太低时,在我的输出中,我还想显示他们有多少猜测左边。但目前它告诉他们每次都剩下 9 个猜测,我不确定为什么。

程序的其余部分有效。所以在 10 次猜测之后它会告诉他们他们输了,直到那时每次猜测它都说他们还剩下 9 次猜测。

namespace NumberGuessingGame
{
public class GuessingGame
{

    int myGuess = 0;
    int guessesLeft = 10;
    int gamesPlayed = 0;
    int gamesWon = 0;
    int gamesLost = 0;

    Random rand;
    int number = 0;

    public GuessingGame()
    {
        rand = new Random();
        number = rand.Next(1, 100);
    }
    public void ResetGame()
    {
        number = rand.Next(1, 100);
        guessesLeft = 10;
    }

    public int CheckGuess(int newGuess)
    {
        myGuess = newGuess;

        if (guessesLeft < 1)
        {                
            gamesLost++;
            gamesPlayed++;
            ResetGame();
            return 2;
        }
        else if (myGuess > number)
        {                
            guessesLeft--;
            return 1;
        }
        else if (myGuess < number)
        {               
            guessesLeft--;
            return -1;
        }
        else
        {                
            gamesPlayed++;
            gamesWon++;
            ResetGame();
            return 0;
        }
    }
}

}

表单代码 class

namespace NumberGuessingGame
{
public partial class frmMain : Form
{
    public frmMain()
    {
        InitializeComponent();           
    }        

    GuessingGame myGuess = new GuessingGame();

    private void btnCheck_Click(object sender, EventArgs e)
    {
        int inputGuess = Convert.ToInt32(txtGuess.Text);
        int result = myGuess.CheckGuess(inputGuess);

        int guessesLeft = 10;


        if(result == 2)
        { 
            MessageBox.Show("You ran out of guesses and lost!");
        }
        else if(result == 1)
        {
            guessesLeft--;
            MessageBox.Show("Your guess was too high, try again!" + "\n You have " + guessesLeft + " guesses left");
        }
        else if(result == -1)
        {
            guessesLeft--;
            MessageBox.Show("Your guess was too low, try again!" + "\n You have " + guessesLeft + " guesses left");
        }
        else if(result == 0)
        {
            MessageBox.Show("You won!");
        }

    }
}

}

每次单击按钮时,您将 guesses Left 设置为 10,这导致了问题。如果您猜测留下了私人领域,它将被修复。

像这样:

public partial class frmMain : Form
{
    private int guessesLeft = 10;

etc.

您有 2 个单独的 guessesLeft 变量 - 一个在您的 btnCheck_Click 事件方法中,一个在您的 GuessingGame class 中。每次单击该按钮时,它都会初始化一个新的 guessesLeft 并将其设置为 10,递减它,然后变量超出范围。您应该只有一个变量来保存该信息,最好的位置是在您的 guessingGame class 中作为 public 属性:

public class GuessingGame
{
    public int GuessesLeft { get; private set; }
}

并在您的点击事件中使用它:

MessageBox.Show("Your guess was too high, try again!" + "\n You have " 
    + myGuess.GuessesLeft + " guesses left");
private void btnCheck_Click(object sender, EventArgs e)
{
    int guessesLeft = 10;

这个guessesLeftbtnCheck_Click()栈上的局部变量。它在函数returns时被销毁,并且在每次按下按钮和调用函数时重新创建并重新初始化为10。

您需要公开 GuessingGame class 中的 guessesLeft。最好的方法是通过只读 属性:

public class GuessingGame
{
    // ...

    public int GuessesRemaining
    {
        get { return guessesRemaining; }
    }

每次单击按钮时,您都将 guessesLeft 变量重新初始化为 10。您反而想从您创建的名为 myGuess 的 GuessingGame 对象中查询变量。