C# 为什么游戏结束后我的价值没有重置

C# 为什么游戏结束后我的价值没有重置,c#,class,visual-studio-2012,operators,C#,Class,Visual Studio 2012,Operators,我的代码是一个猜谜游戏,用户猜1-100之间的数字。他们有10次尝试,每次猜测后,它会告诉他们是过低还是过高,等等 我有一个我似乎无法解决的问题,那就是在他们赢了之后,它会告诉他们他们赢了,以及他们赢了多少次猜测(使用guesssvariable)。我的问题是,如果他们赢了,并且他们再次比赛,猜测就不会重置。因此,如果他们在第一场比赛中尝试了5次,在第二场比赛中尝试了8次,那么在第二场比赛中,他们将在13次猜测中获胜(第一场5次,第二场8次) 我知道为什么会这样,但我所做的一切似乎都无法解决它。

我的代码是一个猜谜游戏,用户猜1-100之间的数字。他们有10次尝试,每次猜测后,它会告诉他们是过低还是过高,等等

我有一个我似乎无法解决的问题,那就是在他们赢了之后,它会告诉他们他们赢了,以及他们赢了多少次猜测(使用
guesss
variable)。我的问题是,如果他们赢了,并且他们再次比赛,猜测就不会重置。因此,如果他们在第一场比赛中尝试了5次,在第二场比赛中尝试了8次,那么在第二场比赛中,他们将在13次猜测中获胜(第一场5次,第二场8次)

我知道为什么会这样,但我所做的一切似乎都无法解决它。我假设如果我只是做了一些像
guesses=0在同一地点我做
attemptsLeft=10
认为它会起作用,因为
attemptsLeft
工作正常,但它总是说他们赢了,他们猜了0次。我还尝试设置
guesses=0if
语句中,当他们赢/输时使用code>,但它做了相同的事情,并表示他们在0次猜测中赢了

猜谜游戏类的代码
我想我有点困惑,为什么你增加了猜测和尝试的次数。你不能用逻辑来完成游戏的流程,而不是跟踪两件基本上意味着相同的事情吗?当你重新玩这个游戏时,看看每个变量都等同于什么,你是否正确地重置了每个变量并调用了该函数?祝你好运。

你永远不会重置
猜测值,所以它当然会不断递增。您希望在任何一轮的最终猜测之后保留猜测计数,以便可以显示它,然后在下一轮开始时重置它

目前,您的代码没有跟踪一轮的状态,因此这是需要解决的问题。此外,您还使用两个不同的变量来跟踪所做猜测和剩余猜测的数量,这是多余的。我们可以将其缩减为单个变量,用于跟踪在一轮开始时重置的猜测

所以,从游戏状态开始。我们可以像这样将一些项目打包到状态中:

public enum EGameState
{
    None,
    Playing,
    Won,
    Lost
}
None
状态将在第一轮中使用,此后将不再使用。在进行一轮比赛时,状态为
正在进行
,在回合结束时,状态为
,以指示结果


现在,您的
GuessingGame
类可以修改为使用状态来确定如何对猜测做出反应等。如果游戏状态未设置为
Playing
,则需要重新初始化回合变量。

使用调试器逐步完成代码-通过
ResetGame()关注
猜测的值
method。您也在混淆您的关注点-从概念上讲,您有
GuessingGame
代表一个游戏会话和一轮游戏-考虑将这些关注点分开。是的,谢谢。我去掉了猜测增量,只做了
guesses=10-attemptsLeft
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);                                           

            if(result == 2)
            {
                lblLosses.Text = "Losses: " + myGuess.gamesLost;
                lblPlayed.Text = "Games Played: " + myGuess.gamesPlayed;
                lblWins.Text = "Wins: " + myGuess.gamesWon;                                       
                MessageBox.Show("You ran out of guesses and lost!");                
            }
            else if(result == 1)
            {               
                MessageBox.Show("Your guess was too high, try again!" + "\n You have " + myGuess.attemptsLeft + " guesses left");
            }
            else if(result == -1)
            {
                MessageBox.Show("Your guess was too low, try again!" + "\n You have " + myGuess.attemptsLeft + " guesses left");
            }
            else if(result == 0)
            {                
                MessageBox.Show("You won!" + "\n It took you " + myGuess.guesses + " guesses");                
                lblLosses.Text = "Losses: " + myGuess.gamesLost;
                lblPlayed.Text = "Games Played: " + myGuess.gamesPlayed;
                lblWins.Text = "Wins: " + myGuess.gamesWon;    
            }                       
        }
public enum EGameState
{
    None,
    Playing,
    Won,
    Lost
}