Ejemplo n.º 1
0
    /// <summary>
    /// 从Dice列表中获得容器
    /// </summary>
    public static SidesContainer Parse(List <Dice> dices)
    {
        SidesContainer container = new SidesContainer();

        foreach (var dice in dices)
        {
            container.AddSide(dice.TopSide);
        }
        return(container);
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 从Skill中获得容器
    /// </summary>
    public static SidesContainer Parse(Skill skill)
    {
        SidesContainer container = new SidesContainer();

        foreach (var s in skill.needSides)
        {
            container.AddSide(s);
        }
        return(container);
    }
Ejemplo n.º 3
0
    /// <summary>
    /// 比较两个容器
    /// </summary>
    public static Result Conbine(SidesContainer A, SidesContainer B)
    {
        bool allEqualFlag = true;

        foreach (var side in A.sideDic.Keys)
        {
            //如果B中包含A的这个key
            if (B.sideDic.ContainsKey(side))
            {
                //如果二者完全相同,那么继续
                if (A.sideDic[side] == B.sideDic[side])
                {
                    continue;
                }
                //如果二者数量不同,B需求的比A提供的要多,那么这个会作为参考,可以继续执行
                else if (A.sideDic[side] < B.sideDic[side])
                {
                    allEqualFlag = false;
                }
                //如果A提供的已经超过了B需求的,那么返回失败
                else
                {
                    return(Result.Not);
                }
            }
            //如果B中就没有,说明这个不可能
            else
            {
                return(Result.Not);
            }
        }
        //只有当A和B种类数完全相同,每个小项都完全吻合时,才能断定二者相等
        if (allEqualFlag == true && A.sideDic.Count == B.sideDic.Count)
        {
            return(Result.Equal);
        }
        //如果能执行到这里那么这个可以作为参考
        else
        {
            return(Result.Except);
        }
    }