比较合约中的整数

时间:2018-10-10 15:33:08

标签: c# code-contracts

我正在基于代码契约创建一个小型应用程序,有没有一种写规范的方法,可以用石头,纸,剪刀的方式工作?我想制定一个规范,该规范应遵循以下内容:

0- rock
1- paper
2- scissors 

因此,如果您获得01-1获胜,如果您获得12-2获胜,并且获得0 20获胜。我想写一个指定这种情况的方法的规范,有可能这样做吗?

2 个答案:

答案 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;
}