3 回答

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

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

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
在 Random.Next 上,上限是獨(dú)占的,所以你應(yīng)該這樣做 RandomType = random.Next(0, 3);
此外在:
if (PlayerPicks == "Scissors" && Computer == "Scissor")
你有“Scissor”而不是“Scissor s ”
- 3 回答
- 0 關(guān)注
- 150 瀏覽
添加回答
舉報(bào)