【发布时间】:2015-12-18 20:47:33
【问题描述】:
我的代码是一个猜谜游戏,用户猜一个 1-100 之间的数字。他们有 10 次尝试,每次猜测后它都会告诉他们它是太低还是太高,等等。
我遇到的一个我似乎无法解决的问题是,在他们获胜后,它会告诉他们他们赢了,以及他们赢了多少次猜测(使用guesses 变量)。我的问题是,如果他们赢了,他们再玩一次,猜测不会重置。因此,如果他们在第一场比赛中尝试 5 次,在第二场比赛中尝试 8 次,那么在第二场比赛中,它会告诉他们他们在 13 次猜测中获胜(第一次猜测中的 5 次 + 第二次中的 8 次)。
我知道为什么会这样,但我尝试的一切似乎都无法解决它。我假设如果我只是在我做attemptsLeft = 10; 的同一个地方做类似guesses = 0; 的事情,那么它会起作用,因为attemptsLeft 工作正常,但它总是说他们赢了,他们猜了0。我还尝试在if 语句中设置guesses = 0; 以了解他们何时赢/输,但它做同样的事情并说他们在0 次猜测中获胜。
GuessingGame 类的代码
namespace NumberGuessingGame
{
public class GuessingGame
{
int myGuess = 0;
int guessesLeft = 10;
public int gamesPlayed = 0;
public int gamesWon = 0;
public int gamesLost = 0;
public int attemptsLeft = 10;
public int guesses = 0;
Random rand;
int number = 0;
public GuessingGame()
{
attemptsLeft = 10;
rand = new Random();
number = rand.Next(1, 100);
}
public void ResetGame()
{
attemptsLeft = 10;
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)
{
attemptsLeft--;
guesses++;
guessesLeft--;
return 1;
}
else if (myGuess < number)
{
attemptsLeft--;
guesses++;
guessesLeft--;
return -1;
}
else
{
guesses++;
gamesWon++;
gamesPlayed++;
ResetGame();
return 0;
}
}
}
}
表单类代码
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;
}
}
【问题讨论】:
-
使用调试器逐步检查您的代码 - 通过
ResetGame()方法关注guesses的值。 -
您还混淆了您的顾虑 - 从概念上讲,您有
GuessingGame代表游戏会话和单轮游戏 - 考虑分散这些顾虑。
标签: c# class visual-studio-2012 operators