Пример #1
0
        private void DetectionFailure(ArchetypeConditionType condition, string[] archetypeCards, ArchetypeColor archetypeColor, string[] testMainboard, string[] testSideboard)
        {
            var archetype = new ArchetypeSpecific()
            {
                Conditions = new ArchetypeCondition[]
                {
                    new ArchetypeCondition()
                    {
                        Type = condition, Cards = archetypeCards
                    }
                }
            };

            var result = ArchetypeAnalyzer.Detect(
                testMainboard.Select(c => new Card()
            {
                Count = 4, Name = c
            }).ToArray(),
                testSideboard.Select(c => new Card()
            {
                Count = 4, Name = c
            }).ToArray(),
                new ArchetypeFormat
            {
                Archetypes = new Archetype[]
                {
                    archetype
                },
                Lands    = _modern.Lands,
                NonLands = _modern.NonLands
            });

            result.Matches.Should().HaveCount(0);
        }
Пример #2
0
        private static bool Test(Card[] mainboardCards, Card[] sideboardCards, ArchetypeColor color, ArchetypeSpecific archetypeData)
        {
            foreach (var condition in archetypeData.Conditions)
            {
                switch (condition.Type)
                {
                case ArchetypeConditionType.InMainboard:
                    if (!mainboardCards.Any(c => c.Name == condition.Cards[0]))
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.InSideboard:
                    if (!sideboardCards.Any(c => c.Name == condition.Cards[0]))
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.InMainOrSideboard:
                    if (!mainboardCards.Any(c => c.Name == condition.Cards[0]) && !sideboardCards.Any(c => c.Name == condition.Cards[0]))
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.OneOrMoreInMainboard:
                    if (!mainboardCards.Any(c => condition.Cards.Contains(c.Name)))
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.OneOrMoreInSideboard:
                    if (!sideboardCards.Any(c => condition.Cards.Contains(c.Name)))
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.OneOrMoreInMainOrSideboard:
                    if (!mainboardCards.Any(c => condition.Cards.Contains(c.Name)) && !sideboardCards.Any(c => condition.Cards.Contains(c.Name)))
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.TwoOrMoreInMainboard:
                    if (mainboardCards.Where(c => condition.Cards.Contains(c.Name)).Count() < 2)
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.TwoOrMoreInSideboard:
                    if (sideboardCards.Where(c => condition.Cards.Contains(c.Name)).Count() < 2)
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.TwoOrMoreInMainOrSideboard:
                    if ((mainboardCards.Where(c => condition.Cards.Contains(c.Name)).Count() + sideboardCards.Where(c => condition.Cards.Contains(c.Name)).Count()) < 2)
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.DoesNotContain:
                    if (mainboardCards.Any(c => c.Name == condition.Cards[0]) || sideboardCards.Any(c => c.Name == condition.Cards[0]))
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.DoesNotContainMainboard:
                    if (mainboardCards.Any(c => c.Name == condition.Cards[0]))
                    {
                        return(false);
                    }
                    break;

                case ArchetypeConditionType.DoesNotContainSideboard:
                    if (sideboardCards.Any(c => c.Name == condition.Cards[0]))
                    {
                        return(false);
                    }
                    break;

                default:
                    throw new NotImplementedException();
                }
            }

            return(true);
        }