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); } }
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 }); }
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; }
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 }); }
public void DoTurn(IPirateGame game) { var myPirates = game.MyPirates(); }