Пример #1
0
        private void DotCollectTurn(IPirateGame game)
        {
            var firstPirate = game.MyPirates().First(p => p.Id == 1);
            var secondPirate = game.MyPirates().First(p => p.Id == 3);
            var firstCandidate = GetCandidate(game, firstPirate);
            var secondCadidate = GetCandidate(game, secondPirate);

            game.Debug("First {0} Second {1}", firstPirate.HasTreasure, secondPirate.HasTreasure);
            if (!firstPirate.HasTreasure && !secondPirate.HasTreasure)
            {
                game.Debug("Move Fast");
                var candiate = firstCandidate.Distance <= secondCadidate.Distance ? firstCandidate : secondCadidate;
                MoveToTreasure(game, candiate, 2);
            }
            else
            {
                game.Debug("Move Slow");
                MovePirateSlow(game, firstCandidate);
                MovePirateSlow(game, secondCadidate);
            }
        }
Пример #2
0
        private BoardStatus GetBoardStatus(IPirateGame game)
        {
            Pirate pirate = game.MyPirates()[0];

            game.Debug("pirate: " + pirate.Id);
            Treasure treasure = game.Treasures()[0];

            game.Debug("treasure: " + treasure.Id);
            return(new BoardStatus()
            {
                Pirate = pirate, Treasure = treasure
            });
        }
Пример #3
0
		public int DoTurn(IPirateGame game)
		{
			int movesConsumed = 0;

			var pirates = game.MyPirates().Where(pirate => pirate.Id % 2 == 0).ToArray();

			var firingPirates = new HashSet<Pirate>();
			var firedUponTargets = new HashSet<Pirate>();
			var shootingTuples =
				from pirate in pirates
				from enemy in game.EnemyPiratesWithTreasures()
				where pirate.ReloadTurns == 0
				where pirate.TurnsToSober == 0
				where enemy.TurnsToSober == 0
				where game.Distance(pirate, enemy) <= 4
				select new { Pirate = pirate, Target = enemy };
			if (shootingTuples.Any())
			{
				foreach (var shootingTuple in shootingTuples)
				{
					if (!firingPirates.Contains(shootingTuple.Pirate) && !firedUponTargets.Contains(shootingTuple.Target))
					{
						firingPirates.Add(shootingTuple.Pirate);
						firedUponTargets.Add(shootingTuple.Target);
						game.Attack(shootingTuple.Pirate, shootingTuple.Target);
						movesConsumed++;
					}
				}
			}

			var piratesAndEnemies = pirates.Except(firingPirates).Select(pirate => Tuple.Create(pirate, game.GetEnemyPirate(pirate.Id))).ToList();

			if (piratesAndEnemies.Any())
			{
				// if any pirate needs to move, move only the first pirate
				var movingTuple = piratesAndEnemies.Where(pair => game.Distance(pair.Item1, pair.Item2.InitialLocation) > 2).FirstOrDefault();

				if (movingTuple != null)
				{
					var movingPirate = movingTuple.Item1;
					var enemyHomeBase = movingTuple.Item2.InitialLocation;
					int distance = Math.Min(4, game.Distance(movingPirate, enemyHomeBase) - 2);
					var sailOptions = game.GetSailOptions(movingPirate, enemyHomeBase, distance);
					game.SetSail(movingPirate, sailOptions[random.Next(sailOptions.Count)]);
					movesConsumed += distance;
				}
			}

			return movesConsumed;
		}
Пример #4
0
        public void DoTurn(IPirateGame state)
        {
            // Initing stuff
            List <Island> islands     = state.NotMyIslands();
            List <Pirate> myPirates   = state.MyPirates();
            List <Pirate> copyPirates = new List <Pirate>(myPirates);
            Dictionary <Pirate, Island> pirateToIsland = new Dictionary <Pirate, Island>();

            for (int i = 0; i < islands.Count; i++)
            {
                Pirate closestPirate = GetClosestPirate(state, islands[i], myPirates);

                //state.Debug($"closest: {closestPirate.Id.ToString()} to island: {islands[i]}");
                if (closestPirate != null)
                {
                    myPirates.Remove(closestPirate);
                    pirateToIsland.Add(closestPirate, islands[i]);
                }
            }

            copyPirates.ForEach(pirate =>
            {
                if (pirateToIsland.ContainsKey(pirate) && pirateToIsland[pirate] != null)
                {
                    Island island = pirateToIsland[pirate];
                    state.Debug($"Pirate {pirate.Id.ToString()} to island {island.Id.ToString()}");
                    List <Direction> movingDirections = state.GetDirections(pirate, island);

                    if (movingDirections.Count > 0 && !pirate.IsLost)
                    {
                        state.Debug($"Pirate: {pirate.Id.ToString()}");
                        movingDirections.ForEach(direc =>
                        {
                            state.Debug($"{direc}");
                        });
                        state.SetSail(pirate, movingDirections[0]);
                    }
                }
                else // Bot that has no island
                {
                    state.Debug($"Nothing {pirate.Id.ToString()}");
                    Island closestIsland = GetClosestIsland(state, pirate, state.NotMyIslands());
                    if (closestIsland != null)
                    {
                        List <Direction> movingDirections = state.GetDirections(pirate, closestIsland);
                        state.SetSail(pirate, movingDirections[0]);
                    }
                }
            });
        }
        private BoardStatus GetBoardStatus(IPirateGame game)
        {
            Pirate pirate = game.MyPirates()[0];

            game.Debug("pirate: " + pirate.Id);
            Treasure treasure = game.Treasures()[0];

            game.Debug("treasure: " + treasure.Id);
            Script script = GetAvailableScript(game);

            return(new BoardStatus()
            {
                Pirate = pirate, Treasure = treasure, Script = script
            });
        }
Пример #6
0
        public void DoTurn(IPirateGame game)
        {
            var myPirates = game.MyPirates();


        }