3 回答

TA貢獻1799條經驗 獲得超8個贊
問題 1
RandomType = random.Next(0, 2)
只生成一個介于 0 和 1 之間的數字,您需要這樣做RandomType = random.Next(0, 3)
這將生成一個介于 0 和 2 之間的數字
問題 2
if (PlayerPicks == "Scissors" && Computer == "Scissor")
檢查計算機是否選擇Scissor
而不是Scissors
只需將其更改為if (PlayerPicks == "Scissors" && Computer == "Scissors")

TA貢獻1864條經驗 獲得超2個贊
這是另一種方法。它已從您的代碼中進行了極大的重構。首先,我在表單類中添加了一個私有System.Random成員字段:
private Random _rand = new Random();
然后,我設置了兩個enums,一個用于“手勢”(石頭、紙、剪刀),另一個用于結果:
public enum HandSign
{
Rock, // rock beats scissors
Paper, // paper beats rock
Scissors, // scissors beats paper
}
public enum Result
{
Draw,
ComputerWins,
PlayerWins
}
然后我創建了一些輔助函數,首先確定計算機的下一步動作:
private HandSign GetRandomPlay()
{
var result = _rand.Next(0, Enum.GetValues(typeof(HandSign)).Length);
return (HandSign) result;
}
接下來是確定獲勝者的規則引擎:
private Result DetermineWinner(HandSign player, HandSign computer)
{
if (player == computer)
{
return Result.Draw;
}
if (player == HandSign.Scissors && computer == HandSign.Rock)
{
return Result.ComputerWins;
}
if (player == HandSign.Rock && computer == HandSign.Scissors)
{
return Result.PlayerWins;
}
if (player > computer)
{
return Result.PlayerWins;
}
//finally, otherwise
return Result.ComputerWins;
}
最后來一張“玩游戲”,在表格上的一把標簽上展示了玩的結果:
private void PlayGame(HandSign playerPicks)
{
PlayerPicksLbl.Text = playerPicks.ToString();
var computerPicks = GetRandomPlay();
ComputerPicksLbl.Text = computerPicks.ToString();
WinnerLbl.Text = DetermineWinner(playerPicks, computerPicks).ToString();
}
那時,我的三個按鈕單擊處理程序看起來像這樣(這是 Rock 處理程序):
private void RockBtn_Click(object sender, EventArgs e)
{
PlayGame(HandSign.Rock);
}
以這種方式構造事物的一個結果是將其擴展到“Rocks, Paper, Scissors, Lizard, Spock”,您需要做的就是向枚舉添加兩個條目,向兩個條目添加HandSign更多邏輯DetermineWinner更多按鈕/按鈕處理程序。
另請注意,沒有辦法拼錯“剪刀”,仍然可以編譯!

TA貢獻1827條經驗 獲得超8個贊
在 Random.Next 上,上限是獨占的,所以你應該這樣做 RandomType = random.Next(0, 3);
此外在:
if (PlayerPicks == "Scissors" && Computer == "Scissor")
你有“Scissor”而不是“Scissor s ”
- 3 回答
- 0 關注
- 162 瀏覽
添加回答
舉報