コード例 #1
0
        public bool IsMatch(MonsterSidePattern pattern)
        {
            // 「~である」系 条件を満たさない場合をチェック
            if ((isWerewolf & pattern.IsWerewolfBits) != isWerewolf)
            {
                return(false);
            }
            if ((isPossessed & pattern.IsPossessedBits) != isPossessed)
            {
                return(false);
            }
            if ((isWerewolfTeam & pattern.IsWerewolfTeamBits) != isWerewolfTeam)
            {
                return(false);
            }

            // 「~ではない」系 条件を満たさない場合をチェック
            if ((isNotWerewolf & ~pattern.IsWerewolfBits) != isNotWerewolf)
            {
                return(false);
            }
            if ((isNotPossessed & ~pattern.IsPossessedBits) != isNotPossessed)
            {
                return(false);
            }
            if ((isNotWerewolfTeam & ~pattern.IsWerewolfTeamBits) != isNotWerewolfTeam)
            {
                return(false);
            }

            // 満たさない条件が無ければ条件を満たしている
            return(true);
        }
コード例 #2
0
        public bool IsMatch(MonsterSidePattern pattern)
        {
            switch (Team)
            {
            case Team.VILLAGER:
                return(!pattern.WerewolfAgent.Contains(Agent) &&
                       !pattern.PossessedAgent.Contains(Agent) &&
                       !pattern.FoxAgent.Contains(Agent));

            //return !pattern.IsExist(Agent, Role.WEREWOLF) &&
            //       !pattern.IsExist(Agent, Role.POSSESSED) &&
            //       !pattern.IsExist(Agent, Role.FOX);
            case Team.WEREWOLF:
                return(pattern.WerewolfAgent.Contains(Agent) ||
                       pattern.PossessedAgent.Contains(Agent));

            //return pattern.IsExist(Agent, Role.WEREWOLF) || pattern.IsExist(Agent, Role.POSSESSED);
            case Team.OTHERS:
                return(pattern.FoxAgent.Contains(Agent));
                //return pattern.IsExist(Agent, Role.FOX);
            }

            // 引数が不正だった場合など
            return(false);
        }
コード例 #3
0
ファイル: NotCondition.cs プロジェクト: yoshinobc/aiwolf
        public bool IsMatch(MonsterSidePattern pattern)
        {
            // 条件が無い場合は、条件を満たしていない扱いにする
            if (condition == null)
            {
                return(false);
            }

            // 条件へのマッチをNOTして返す
            return(!condition.IsMatch(pattern));
        }
コード例 #4
0
ファイル: MatchNumCondition.cs プロジェクト: yoshinobc/aiwolf
        public bool IsMatch(MonsterSidePattern pattern)
        {
            int matchNum = 0;

            // 条件を1つずつチェック
            foreach (ICondition condition in conditions)
            {
                if (condition.IsMatch(pattern))
                {
                    matchNum++;
                }
            }

            // マッチ数が最低~最高の範囲内かを返す
            return(matchNum >= MinNum && matchNum <= MaxNum);
        }
コード例 #5
0
        public bool IsMatch(MonsterSidePattern pattern)
        {
            int matchNum = 0;

            // 「~である」系
            matchNum += BitCnt(isWerewolf & pattern.IsWerewolfBits);
            matchNum += BitCnt(isPossessed & pattern.IsPossessedBits);
            matchNum += BitCnt(isWerewolfTeam & pattern.IsWerewolfTeamBits);

            // 「~ではない」系
            matchNum += BitCnt(isNotWerewolf & ~pattern.IsWerewolfBits);
            matchNum += BitCnt(isNotPossessed & ~pattern.IsPossessedBits);
            matchNum += BitCnt(isNotWerewolfTeam & ~pattern.IsWerewolfTeamBits);

            // マッチ数が最低~最大なら条件を満たしている
            return(matchNum >= MinNum && matchNum <= MaxNum);
        }
コード例 #6
0
        public bool IsMatch(MonsterSidePattern pattern)
        {
            switch (Role)
            {
            case Role.WEREWOLF:
                return(pattern.IsExist(Agent, Role.WEREWOLF));

            case Role.POSSESSED:
                return(pattern.IsExist(Agent, Role.POSSESSED));

            case Role.FOX:
                return(pattern.IsExist(Agent, Role.FOX));
            }

            // 引数が不正だった場合など
            return(false);
        }
コード例 #7
0
        public bool IsMatch(MonsterSidePattern pattern)
        {
            switch (Team)
            {
            case Team.VILLAGER:
                return(!pattern.IsExist(Agent, Role.WEREWOLF) &&
                       !pattern.IsExist(Agent, Role.POSSESSED) &&
                       !pattern.IsExist(Agent, Role.FOX));

            case Team.WEREWOLF:
                return(pattern.IsExist(Agent, Role.WEREWOLF) || pattern.IsExist(Agent, Role.POSSESSED));

            case Team.OTHERS:
                return(pattern.IsExist(Agent, Role.FOX));
            }

            // 引数が不正だった場合など
            return(false);
        }
コード例 #8
0
ファイル: OrCondition.cs プロジェクト: yoshinobc/aiwolf
        public bool IsMatch(MonsterSidePattern pattern)
        {
            // 条件が1つも無い場合は、条件を満たした扱いにする
            if (conditions.Count == 0)
            {
                return(true);
            }

            // 条件を1つずつチェックし、1つでも満せば OR条件を満たす
            foreach (ICondition condition in conditions)
            {
                if (condition.IsMatch(pattern))
                {
                    return(true);
                }
            }

            // 条件を満たすものが無ければOR条件を満たさない
            return(false);
        }
コード例 #9
0
        public bool IsMatch(MonsterSidePattern pattern)
        {
            switch (Role)
            {
            case Role.WEREWOLF:
                return(pattern.WerewolfAgent.Contains(Agent));

            //return pattern.IsExist(Agent, Role.WEREWOLF);
            case Role.POSSESSED:
                return(pattern.PossessedAgent.Contains(Agent));

            //return pattern.IsExist(Agent, Role.POSSESSED);
            case Role.FOX:
                return(pattern.FoxAgent.Contains(Agent));
                //return pattern.IsExist(Agent, Role.FOX);
            }

            // 引数が不正だった場合など
            return(false);
        }
コード例 #10
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="pattern">人外陣営のパターン</param>
 public AggregateGuess(MonsterSidePattern pattern)
 {
     Pattern = pattern;
 }