public class Agent : AgentBase
public const int UnownedPlanetOwnerId = -1;
public Agent() : base("The Empire", -1){}
public override void Update(StatusResult gs)
Console.WriteLine($"[{DateTime.Now.ToShortTimeString()}]Current Turn: {gs.CurrentTurn}");
Console.WriteLine($"Owned Planet Id's: {string.Join(", ", gs.Planets.Where(p => p.OwnerId == MyId).Select(p => p.Id))}");
var MyPlanets = gs.Planets.Where(p => p.OwnerId == MyId);
var AvailibleShips = MyPlanets.Sum(p => p.NumberOfShips);
Planet targetPlanet = new Planet();
Planet BigestPlanet = gs.Planets.Where(p => p.OwnerId != MyId).OrderByDescending(p => p.GrowthRate).FirstOrDefault();
gs.Planets.Where(p => (p.OwnerId == UnownedPlanetOwnerId || p.OwnerId != MyId) && p.NumberOfShips + 1 <= (int)Math.Floor(AvailibleShips / 2.0))
.OrderBy(p => p.NumberOfShips)
.ThenByDescending(p => p.GrowthRate);
if (!targetPlanets.Any()) return;
targetPlanet = targetPlanets.First();
foreach (var planet in MyPlanets)
Console.WriteLine(string.Format("Targeting planet {0} which has {1} ships", targetPlanet.Id, targetPlanet.NumberOfShips));
var ships = (int)Math.Floor(planet.NumberOfShips / 2.0);
Console.WriteLine(string.Format("Sending {0} ships from {1}", ships, planet.Id));
SendFleet(planet.Id, targetPlanet.Id, ships);
if(BigestPlanet != null && BigestPlanet.OwnerId != MyId && ships > 1)
SendFleet(planet.Id, BigestPlanet.Id, 1);