Пример #1
0
        /**
         * Count the number of tiles protected by the turret.
         */
        public IEnumerable <int> UniquelyProtectedTiles()
        {
            var protectedTiles = ProtectedTiles().ToList();

            for (int i = 0; i < AllTurrets.GetNumberVariables(); ++i)
            {
                if (AllTurrets[i] != this)
                {
                    var coveredByOther = AllTurrets[i].ProtectedTiles();
                    protectedTiles.RemoveAll(tile => coveredByOther.Contains(tile));
                }
            }

            return(protectedTiles);
        }
Пример #2
0
        public void Run()
        {
            // Setup the scenario with the provided function
            int  numTurrets;
            int  radius;
            Grid grid;

            _setup(out numTurrets, out radius, out grid);

            var turrets = new TurretSet(numTurrets, Team.ALLY, radius, grid);

            var constraints = new List <TurretConstraint>
            {
                new InTerritory(turrets),
                //new ProtectOwnTiles(turrets),
                new NoOverlap(turrets),
                //new CloseToEnemy(turrets)
            };

            var objective = new Coverage();

            var solver = new Solver <Turret, TurretSet, TurretConstraint>(turrets, constraints, objective);

            solver.solve(100, 500);

            grid.Draw(turrets);

            for (int i = 0; i < turrets.GetNumberVariables(); ++i)
            {
                var t = turrets[i];
                Console.WriteLine("Turret " + i + " (radius " + t.Radius + ")");
                Console.WriteLine("    Protected allied tiles " + t.ProtectedTiles().Count());
                Console.WriteLine("    Protected allied tiles (unique) " + t.UniquelyProtectedTiles().Count());
                Console.WriteLine("    Covered enemy tiles " + t.CoveredEnemyTiles().Count());
                Console.WriteLine("    Covered enemy tiles (unique) " + t.UniquelyCoveredEnemyTiles().Count());
                Console.WriteLine("    Distance to enemy " + t.DistanceToClosestEnemyTerritory());
            }
            Console.WriteLine(turrets[0].CoveredEnemyTiles().Count());
        }