做了一个简单的剪刀纸石游戏。当你按下一个按钮(每个选择剪刀/纸/石头有3个差异按钮)时,如果你赢,输或抽,它会返回。它还为人类和计算机选择的选项(矩形)添加颜色,并添加一条消息来判断人类是赢还是输。
方法game.play根据参数输入计算谁赢了。 1是岩石,2是纸,3是剪刀。计算机选择是随机的。
以下代码有效,但发现它很乱,并试图找到一种方法将所有着色放在一个方法中,并将所有消息放在一个方法中。考虑到着色和消息传递可以有这么多选项,相当困惑。以下代码用于选择人造纸。做建议。谢谢。
private void button2_Paper(object sender, RoutedEventArgs e) // Human chose Paper
{
if (game.play(2) == "Draw")
{
rect2.Fill = red;
MessageBox.Show("It is a draw. both chose Paper");
}
else if (game.play(2) == "Win")
{
rect2.Fill = green;
rect1.Fill = yellow;
MessageBox.Show("Congratulations! Paper beats Rock");
}
else if (game.play(2) == "Lose")
{
rect2.Fill = green;
rect3.Fill = yellow;
MessageBox.Show("You lose. Scissor beats Paper");
}
gameReset();
}
答案 0 :(得分:0)
如果要清理代码,应尝试搜索看起来像是复制和粘贴的内容。我假设你有一个类似于你在这里发布的“Rock”和“Scissor”的方法。
在这种情况下,你可以重组你的游戏类来保存一个临时游戏结果,表明谁赢了。此外,您可以用枚举替换“字符串结果”。
这是一个小班来说明我的意思。请注意,我尚未测试此类,因此可能会返回错误的结果
namespace RockPaperScissor.GameEngine
{
public enum Move
{
Rock = 0,
Paper = 1,
Scissor = 2
}
public enum MoveResult
{
PlayerWon,
ComputerWon,
Draw
}
public class RPSEngine
{
public Move ComputerMove { get; set; }
public Move PlayerMove { get; set; }
public MoveResult Result
{
get
{
if(ComputerMove == PlayerMove)
{
return MoveResult.Draw;
}
else if(ComputerMove > PlayerMove || (ComputerMove == Move.Rock && PlayerMove == Move.Scissor))
{
return MoveResult.ComputerWon;
}
else
{
return MoveResult.PlayerWon;
}
}
}
}
}
这将允许您更新中心方法中的颜色,如下例所示:
private void RockButton_Click(object sender, RoutedEventArgs e)
{
engine.PlayerMove = GameEngine.Move.Rock;
displayResult();
}
private void PaperButton_Click(object sender, RoutedEventArgs e)
{
engine.PlayerMove = GameEngine.Move.Paper;
displayResult();
}
private void ScissorButton_Click(object sender, RoutedEventArgs e)
{
engine.PlayerMove = GameEngine.Move.Scissor;
displayResult();
}
private void displayResult()
{
switch(engine.Result)
{
case GameEngine.MoveResult.Draw:
//Display message and change color
break;
case GameEngine.MoveResult.PlayerWon:
break;
case GameEngine.MoveResult.ComputerWon:
break;
}
}
由于您将问题标记为XAML,因此您还可以创建类似ViewModel的内容,以存储颜色和要显示的消息字符串。然后NotifyPropertyChanged
将导致您的GUI更新。