Esempio n. 1
0
 // TODO: Take into account existing own troops
 // TODO: Take into account existing opponent troops
 // TODO: Take into account moves decided so far this turn
 public List <Factory2> FindTargets(Factory2 factory, State state)
 {
     return(state.Factories
            .Where(f => f.Owner != Owner2.Own)
            .Where(f => f.Production != 0)
            .Where(f => f.Distances.ContainsKey(factory.Id))
            .OrderBy(f => f.Distances[factory.Id])
            .ToList());
 }
Esempio n. 2
0
        // TODO: Take into account own troops
        public int GetNumberOfAvailableCyborgs(Factory2 factory, State state)
        {
            var incomingEnemyTroops = state.Troops
                                      .Where(t => t.Owner == Owner2.Opponent)
                                      .Where(t => t.Destination == factory.Id)
                                      .ToList();

            if (!incomingEnemyTroops.Any())
            {
                return(factory.NumberOfCyborgs);
            }

            var currentNumberOfCyborgsInFactory     = factory.NumberOfCyborgs;
            var minimumNumberOfCyborgsLeftInFactory = factory.NumberOfCyborgs;
            var turnsTillFurthestEnemyTroopArrives  = incomingEnemyTroops
                                                      .Max(t => t.RemainingTravelTime);

            for (var i = 1; i <= turnsTillFurthestEnemyTroopArrives; i++)
            {
                currentNumberOfCyborgsInFactory +=
                    factory.Production
                    -
                    incomingEnemyTroops
                    .Where(t => t.RemainingTravelTime == i)
                    .Sum(t => t.NumberOfCyborgs);

                if (currentNumberOfCyborgsInFactory <= 0)
                {
                    return(0);
                }
                if (currentNumberOfCyborgsInFactory < minimumNumberOfCyborgsLeftInFactory)
                {
                    minimumNumberOfCyborgsLeftInFactory = currentNumberOfCyborgsInFactory;
                }
            }

            return(minimumNumberOfCyborgsLeftInFactory);
        }