public void TestInvadeCorrectNumber2() { PlanetWars planetWars = new PlanetWars( "P 10.946215 11.757139 0 15 4#0\n" + "P 18.033072 20.11299 1 6 5#1\n" + "P 3.859357 3.4012883 2 130 5#2\n" + "P 19.282667 9.50695 0 61 2#3\n" + "P 2.609762 14.007327 0 61 2#4\n" + "P 4.9880333 6.555844 0 15 2#5\n" + "P 16.904396 16.958433 1 5 2#6\n" + "P 17.819895 5.624568 0 79 3#7\n" + "P 4.0725336 17.88971 0 79 3#8\n" + "P 12.936233 0.2987193 0 36 1#9\n" + "P 8.956196 23.215559 0 36 1#10\n" + "P 0 23.514278 0 43 1#11\n" + "P 21.89243 0 0 43 1#12\n" + "P 13.72995 13.885786 0 59 2#13\n" + "P 8.162479 9.628491 0 59 2#14\n" + "P 7.9460754 4.9982805 0 87 2#15\n" + "P 13.946353 18.515997 0 87 2#16\n" + "P 5.118788 4.420579 0 26 1#17\n" + "P 16.773642 19.093699 1 6 1#18\n" + "P 17.77824 11.674772 0 62 1#19\n" + "P 4.1141887 11.839505 0 62 1#20\n" + "P 20.811337 21.04995 1 5 5#21\n" + "P 1.0810924 2.4643273 0 38 5#22\n" + "F 1 5 21 1 3 1\n" + "F 1 15 18 0 10 8\n" + "F 1 5 1 18 2 1\n" + "F 1 5 21 1 3 2\n" + "F 1 22 18 6 3 2\n" + "go\n" ); IAdviser adviser = new InvadeAdviser(planetWars); List<MovesSet> movesList = adviser.RunAll(); bool sended = false; foreach (MovesSet movesSet in movesList) { Moves moves = movesSet.GetMoves(); foreach (Move move in moves) { if (move.DestinationID != 0) continue; sended = true; Assert.AreEqual(1, move.NumShips); Assert.AreEqual(0, move.TurnsBefore); } } Assert.IsTrue(sended); }
public void TestDoNothingWhenNoNeutralPlanets() { PlanetWars planetWars = new PlanetWars( "P 11.6135908004 11.6587374197 1 119 0#0\n" + "P 1.2902863101 9.04078582767 1 40 5#1\n" + "P 21.9368952907 14.2766890117 2 100 5#2\n" + "P 2.64835767563 10.2659924733 1 21 4#3\n" + "P 17.5788239251 5.05148236609 2 21 4#4\n" + "go\n"); IAdviser adviser = new InvadeAdviser(planetWars); List<MovesSet> moves = adviser.RunAll(); Assert.AreEqual(0, moves.Count); }
private void InitLastMove() { lastMove = new Dictionary<string, int>(7); FirstMoveAdviser firstMoveAdviser = new FirstMoveAdviser(Context); DefendAdviser defendAdviser = new DefendAdviser(Context); InvadeAdviser invadeAdviser = new InvadeAdviser(Context); AttackAdviser attackAdviser = new AttackAdviser(Context); SupplyAdviser supplyAdviser = new SupplyAdviser(Context); StealAdviser stealAdviser = new StealAdviser(Context); AntiCrisisAdviser antiCrisiAdviser = new AntiCrisisAdviser(Context); lastMove.Add(firstMoveAdviser.GetAdviserName(), 0); lastMove.Add(defendAdviser.GetAdviserName(), 0); lastMove.Add(invadeAdviser.GetAdviserName(), 0); lastMove.Add(attackAdviser.GetAdviserName(), 0); lastMove.Add(supplyAdviser.GetAdviserName(), 0); lastMove.Add(stealAdviser.GetAdviserName(), 0); lastMove.Add(antiCrisiAdviser.GetAdviserName(), 0); }
public void DoTurn() { try { if (turn == 1) { FirstMoveAdviser firstMoveAdviser = new FirstMoveAdviser(Context); FirstMoveAdviser.CheckTime checkTime = CheckTime; firstMoveAdviser.CheckTimeFunc = checkTime; RunAdviser(firstMoveAdviser); return; } if (Context.MyPlanets().Count == 0) return; DefendAdviser defendAdviser = new DefendAdviser(Context); InvadeAdviser invadeAdviser = new InvadeAdviser(Context); AttackAdviser attackAdviser = new AttackAdviser(Context); StealAdviser stealAdviser = new StealAdviser(Context); //AntiCrisisAdviser antiCrisisAdviser = new AntiCrisisAdviser(Context); RunAdviser(defendAdviser); if (!CheckTime()) return; Config.AttackSendMoreThanEnemyCanDefend = true; Config.UseSectorsForFront = true; if (Context.MyFutureProduction < Context.EnemyFutureProduction || ((Context.MyFutureProduction == Context.EnemyFutureProduction) && (Context.MyTotalShipCount < Context.EnemyTotalShipCount))) { if (turn - lastMove[attackAdviser.GetAdviserName()] > Config.IdleTurns && turn - lastMove[invadeAdviser.GetAdviserName()] > Config.IdleTurns && turn - lastMove[stealAdviser.GetAdviserName()] > Config.IdleTurns) { //Config.UseSectorsForFront = false; //Config.AttackSendMoreThanEnemyCanDefend = false; #if LOG Logger.Log("UseSectorsForFront = false"); #endif //antiCrisisAdviser.Attack = Context.MyTotalShipCount < Context.EnemyTotalShipCount; //RunAdviser(antiCrisisAdviser); //if (!CheckTime()) return; } } RunAdviser(stealAdviser); if (!CheckTime()) return; Config.InvadeSendMoreThanEnemyCanDefend = true;//(Context.MyProduction > Context.EnemyProduction*Config.DoInvadeKoef); RunAdviser(invadeAdviser); if (!CheckTime()) return; RunAdviser(attackAdviser); if (!CheckTime()) return; } finally { try { if (turn == 1) { MakeMoves(setList); setList.Clear(); } else { SelectAndMakeMoves(); if (CheckTime()) { //try { SupplyAdviser supplyAdviser = new SupplyAdviser(Context); RunAdviser(supplyAdviser); if (CheckTime()) { MakeMoves(setList); setList.Clear(); } } //catch { //Logger.Log("exception: " + e.Message); } } } } finally { Context.FinishTurn(); } } }
public void TestInvadeNeutralPlanet() { PlanetWars planetWars = new PlanetWars( "P 1 1 0 119 2#0\n" + "P 2 2 1 150 5#1\n" + "P 3 3 2 100 5#2\n" + "P 6 6 1 21 2#3\n" + "P 5 5 0 21 5#4\n" + "go\n"); Config.InvadeSendMoreThanEnemyCanDefend = true; IAdviser adviser = new InvadeAdviser(planetWars); Moves moves = adviser.Run(planetWars.GetPlanet(4)); //int extraTurns = (int)Math.Ceiling(planetWars.GetPlanet(4).NumShips() / (double)planetWars.GetPlanet(4).GrowthRate()); Assert.AreEqual(2, moves.Count); Assert.AreEqual(21 + 100 + 5 * 2 + 1, moves[0].NumShips + moves[1].NumShips); }
public void TestNeverInvadePlanetWithZeroGrowLevel() { PlanetWars planetWars = new PlanetWars( "P 1 1 1 100 5#0\n" + "P 2 2 0 1 0#1\n" + "go\n"); IAdviser adviser = new InvadeAdviser(planetWars); List<MovesSet> moves = adviser.RunAll(); Assert.AreEqual(0, moves.Count); }