예제 #1
0
        //
        // win lose feedback
        //

        private BattleResult GetResult()
        {
            if (Player.HP <= 0)
            {
                return(BattleResult.Lose);
            }
            if (!Targets.Any() || Targets.All(t => t.HP <= 0))
            {
                return(BattleResult.Win);
            }
            return(BattleResult.Continue);
        }
예제 #2
0
        private void addToNextGenForFollowUp(RunItem <PositionData, ActionData, CheckPointType> item)
        {
            //var category = PositionCategorizer.Categorize(item.Position);

            var area = AreaGuide.PositionAreaId(item.Position.Data);

            //item.PreSolution.CategoryPath.Add(category);
            item.Position.CategoryPath.Add(area);

            if (item.HasMoved && !Fingerprints.ContainsKey(item.Position.Data.Fingerprint) && !(Targets.All(t => t.ReachTarget(item.Position) || t.IsOptional) && CancelCriteria == CancelCriteria.TargetsReached) && !(CancelCriteria == CancelCriteria.MaxSteps && item.Position.Depth >= TargetOptCenterParams.MaxSearchDepth))
            {
                //item.Score = item.Position.Data.NextCheckPoint.Score(item.Position.Data);
                item.PreSolution.Score = AreaGuide.Score(item.Position.Data) + random.NextDouble() * 0.00001;

                var nextGen = CheckPoints.FirstOrDefault(ng => ng.CategoryNr == area);
                if (nextGen == null)
                {
                    nextGen            = new LocalCheckPoint();
                    nextGen.CategoryNr = area;
                    CheckPoints.Add(nextGen);
                }

                //if (nextGen.Positions.All(rI => AreaGuide.CanOvercome(item.Position.Data, rI.Position.Data)))
                {
                    nextGen.Positions.SortedInsert(item.PreSolution, TargetOptCenterParams.NextGenerationSize, (c) => c.Score);
                    Fingerprints.Add(item.Position.Data.Fingerprint, item);
                }
            }
            else
            {
            }
        }
예제 #3
0
        public override async Task <bool> IsCompleteAsync()
        {
            var values = await GetProgressValuesAsync();

            return(Targets.All(target => values.Contains(target)));
        }