[英]why is my value not resetting after game ends
我的代碼用於猜謎游戲,用戶猜出1-100之間的數字。 他們進行了10次嘗試,每次猜測后都會告訴他們其值太低還是太高等等。
我遇到的一個我似乎無法解決的問題是,在他們贏得比賽后,它告訴他們他們贏得了勝利,以及贏得比賽需要花費多少猜測(使用guesses
變量)。 我的問題是,如果他們贏了,然后又玩了一次,猜測就不會重置。 因此,如果他們在第一局中嘗試5次,在第二局中嘗試8次,那么在第二局中,它將告訴他們他們以13個猜測贏得了比賽(第1次贏5次,第2次贏8次)。
我知道為什么會這樣,但是我嘗試的所有事情似乎都無法解決。 我以為我是否只是做過guesses = 0;
我在同一地點進行attemptsLeft = 10;
自從attemptsLeft
正常運行以來,它就可以正常工作,但是它總是總是說他們贏了,所以他們猜了0次。 我也嘗試設置guesses = 0;
在if
語句中表示何時獲勝/失敗,但它做同樣的事情,並說他們以0的猜測獲勝。
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;
}
}
我想我有點困惑,為什么您要增加猜測和嘗試的次數。 您難道不能僅使用任一邏輯來完成游戲流程,而不是跟蹤本質上意味着同一件事的兩件事嗎? 當您重新玩游戲時,也可以看到每個變量的含義,是否正確地重置了每個變量並調用了該函數? 祝好運。
您永遠不會重置guesses
值,因此它會不斷增加。 您希望在任何回合的最終猜測之后保留猜測計數,以便您可以顯示它,然后在下一輪開始時將其重置。
目前,您的代碼都無法跟蹤回合的狀態,因此需要解決。 另外,您還使用兩個不同的變量來跟蹤猜測和剩余猜測的數量,這是多余的。 我們可以將其切回單個變量以跟蹤所做的猜測,並在回合開始時將其重置。
因此,從游戲狀態開始。 我們可以將一些項目打包成這樣的狀態:
public enum EGameState
{
None,
Playing,
Won,
Lost
}
None
狀態將用於第一輪,此后永遠不會。 在進行回合時,狀態將為“ Playing
並且在回合結束時,無論是Won
還是Loss
,都表明結果。
現在,可以將GuessingGame
類修改為使用狀態來確定對猜測的反應方式,等等。如果游戲狀態未設置為“ Playing
則需要重新初始化回合變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.