/// <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); }
/// <summary> /// 从Skill中获得容器 /// </summary> public static SidesContainer Parse(Skill skill) { SidesContainer container = new SidesContainer(); foreach (var s in skill.needSides) { container.AddSide(s); } return(container); }
/// <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); } }