示例#1
0
        public void TestDoNothingWhenNobodyAttacks()
        {
            PlanetWars planetWars = new PlanetWars(
                "P 11.6135908004 11.6587374197 0 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 0 21 4#4\n" +
                "F 1 25 1 4 5 3\n" +
                "F 1 50 1 2 10 1\n" +
                "F 2 30 2 4 5 2\n" +
                "go\n");

            IAdviser adviser = new DefendAdviser(planetWars);
            List<MovesSet> moves = adviser.RunAll();

            Assert.AreEqual(0, moves.Count);
        }
示例#2
0
文件: MyBot.cs 项目: rhiensch/pwbot
		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);
		}
示例#3
0
        public void TestDefendPlanetUnderAttack()
        {
            PlanetWars planetWars = new PlanetWars(
                "P 11.6135908004 11.6587374197 0 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 31 4#3\n" +
                "P 17.5788239251 5.05148236609 0 21 4#4\n" +
                "F 1 25 1 4 5 3\n" +
                "F 1 50 1 2 10 1\n" +
                "F 2 70 2 1 5 3\n" +
                "go\n");

            DefendAdviser adviser = new DefendAdviser(planetWars);
            Moves moves = adviser.Run(planetWars.GetPlanet(1));

            Assert.AreEqual(1, moves.Count);
            Assert.AreEqual(3, moves[0].SourceID);
            Assert.AreEqual(1, moves[0].DestinationID);
            Assert.AreEqual(15 + Config.MinShipsOnPlanetsAfterDefend, moves[0].NumShips);
        }
示例#4
0
文件: MyBot.cs 项目: rhiensch/pwbot
		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();
				}
			}
		}
示例#5
0
        public void TestNoExtraDefence()
        {
            PlanetWars planetWars = new PlanetWars(
                "P 10.619331099 20.0028830106 1 122 5#0\n" +
                "P 10.6897926 1.87550420275 2 18 5#1\n" +
                "P 6.42926362386 21.4118201349 1 5 4#2\n" +
                "F 2 50 1 2 20 14\n" +
                "F 2 27 1 2 20 15\n" +
                "F 2 16 1 2 20 16\n" +
                "F 2 11 1 2 20 17\n" +
                "F 2 8 1 2 20 18\n" +
                "go\n");

            DefendAdviser adviser = new DefendAdviser(planetWars);
            Moves moves = adviser.Run(planetWars.GetPlanet(2));

            int totalCount = 0;
            foreach (Move move in moves)
            {
                Assert.AreEqual(2, moves[0].DestinationID);
                totalCount = totalCount + move.NumShips;
            }

            Assert.AreEqual(12 + Config.MinShipsOnPlanetsAfterDefend, totalCount);
        }
示例#6
0
        public void TestNoDoubleDefence()
        {
            PlanetWars planetWars = new PlanetWars(
                "P 10.619331099 20.0028830106 1 122 5#0\n" +
                "P 10.6897926 1.87550420275 2 18 5#1\n" +
                "P 6.42926362386 21.4118201349 1 5 4#2\n" +
                "F 2 50 1 2 20 14\n" +
                "F 2 27 1 2 20 15\n" +
                "F 2 16 1 2 20 16\n" +
                "F 2 11 1 2 20 17\n" +
                "F 2 8 1 2 20 18\n" +
                "F 1 35 0 2 5 2\n" +
                "go\n");

            IAdviser adviser = new DefendAdviser(planetWars);
            List<MovesSet> moves = adviser.RunAll();

            Assert.AreEqual(0, moves.Count);
        }