我正在基于代码契约创建一个小型应用程序,有没有一种写规范的方法,可以用石头,纸,剪刀的方式工作?我想制定一个规范,该规范应遵循以下内容:
0- rock
1- paper
2- scissors
因此,如果您获得0
和1
-1
获胜,如果您获得1
和2
-2
获胜,并且获得0
2
,0
获胜。我想写一个指定这种情况的方法的规范,有可能这样做吗?
答案 0 :(得分:1)
我会做一些类似于object.CompareTo()的事情,并做一些模数运算。 圈中的下一个总是获胜,因此将手加1并检查除以3的其余部分,以将其投影回我们的3个选项。
用秒针比较它。如果相等:第一手输,另一手第二输。
public int CompareHands(int hand1, int hand2)
{
if (hand1 == hand2) return 0; //tie
return ((hand1 + 1) % 3) == hand2 ? -1 : 1; //we have a winner
}
答案 1 :(得分:0)
与其进行算术(比较值),不如使用域逻辑(游戏规则):
public enum Hand
{
Rock,
Paper,
Scissors,
}
public static Hand? Check(Hand h1, Hand h2)
{
// same hand draw
if (h1 == h2) return default;
var winningHands = new Dictionary<Hand, Hand>
{
[Hand.Rock] = Hand.Paper,
[Hand.Paper] = Hand.Scissors,
[Hand.Scissors] = Hand.Rock,
};
return h2 == winningHands[h1] ? h2 : h1;
}