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 关注
- 130 浏览
添加回答
举报