使用递减运算符
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;
这个guessesLeft
是btnCheck_Click()
栈上的局部变量。它在函数returns时被销毁,并且在每次按下按钮和调用函数时重新创建并重新初始化为10。
您需要公开 GuessingGame
class 中的 guessesLeft
。最好的方法是通过只读 属性:
public class GuessingGame
{
// ...
public int GuessesRemaining
{
get { return guessesRemaining; }
}
每次单击按钮时,您都将 guessesLeft 变量重新初始化为 10。您反而想从您创建的名为 myGuess 的 GuessingGame 对象中查询变量。
对于我的代码,这是一个猜数游戏。他们在输之前得到 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;
这个guessesLeft
是btnCheck_Click()
栈上的局部变量。它在函数returns时被销毁,并且在每次按下按钮和调用函数时重新创建并重新初始化为10。
您需要公开 GuessingGame
class 中的 guessesLeft
。最好的方法是通过只读 属性:
public class GuessingGame
{
// ...
public int GuessesRemaining
{
get { return guessesRemaining; }
}
每次单击按钮时,您都将 guessesLeft 变量重新初始化为 10。您反而想从您创建的名为 myGuess 的 GuessingGame 对象中查询变量。