Beispiel #1
0
        protected ASimulator(Monster monster, int heroLevel, int itemLevel)
        {
            this.HeroLevel = heroLevel;
            this.monster   = monster;

            foreach (var hero in Library.Heroes)
            {
                var relevantItems = ItemFilter.RelevantFor(hero, itemLevel, monster, StatsFilter.All);
                var items         = new Stats[(int)ItemSlot.N][];
                for (int i = 0; i < relevantItems.Count; i++)
                {
                    items[i]       = relevantItems[(ItemSlot)i];
                    maxItemChoices = Math.Max(maxItemChoices, items[i].Length);
                }

                AllItems.Add(hero, items);
            }
        }
Beispiel #2
0
        private void initItems(Hero hero, int maxItemLevel, Monster monster, BuildPurpose buildFor)
        {
            var statsMask = (StatsFilter)0;

            switch (buildFor)
            {
            case BuildPurpose.MaxDefense:
                statsMask = StatsFilter.Defenses;
                break;

            case BuildPurpose.MaxEffectiveHp:
                statsMask = StatsFilter.Defenses | StatsFilter.Hp;
                break;

            case BuildPurpose.MinHpLoss:
                statsMask = StatsFilter.Defenses | StatsFilter.Offensive;
                break;

            case BuildPurpose.MinTurns:
                statsMask = StatsFilter.Offensive;
                break;
            }

            this.AllItems          = ItemFilter.RelevantFor(hero, maxItemLevel, monster, statsMask);
            this.Slots             = AllItems.Keys.OrderBy(x => (int)x).ToArray();
            this.BuildCombinations = new List <EquipmentBuild>();

            BuildCombinations.Add(new EquipmentBuild(0, new int[Slots.Length]));
            bool moreCombinations = true;

            while (moreCombinations)
            {
                var build = new EquipmentBuild(BuildCombinations.Count, new int[Slots.Length]);
                for (int i = 0; i < Slots.Length; i++)
                {
                    build.Combination[i] = BuildCombinations[BuildCombinations.Count - 1].Combination[i];
                }

                build.Combination[0]++;
                for (int i = 0; i < Slots.Length; i++)
                {
                    if (build.Combination[i] >= AllItems[Slots[i]].Length)
                    {
                        if (i + 1 < Slots.Length)
                        {
                            build.Combination[i] = 0;
                            build.Combination[i + 1]++;
                        }
                        else
                        {
                            moreCombinations = false;
                        }
                    }
                }

                if (moreCombinations)
                {
                    BuildCombinations.Add(build);
                }
            }
        }