Exemplo n.º 1
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static List<IslandCM> GetBridgedNeibourIslands(MapCM map, int islandID, int playerID, bool enemyOnly = false)
		{
			List<IslandCM> bridgedNeibours = new List<IslandCM>();
			List<IslandCM> neibours = (enemyOnly ? GetNeibourEnemyIslands(map, islandID, playerID) : GetNeibourIslands(map, islandID));
			for (int i = 0; i < neibours.Count; ++i)
			{
				IslandCM island = neibours[i];
				if (map.HasIslandsShipBrige(islandID, island.ID, playerID))
					bridgedNeibours.Add(island);
			}
			return bridgedNeibours;
		}
Exemplo n.º 2
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static List<IslandCM> GetNeibourIslands(MapCM map, int islandID)
		{
			List<IslandCM> neibours = new List<IslandCM>();

			List<Hex> seas = map.GetSeasNearIsland(islandID);
			for(int i = 0; i < seas.Count; ++i)
			{
				List<IslandCM> islands = map.GetNeiborIslandsByMapPos(seas[i]);
				for (int t = 0; t < islands.Count; ++t)
				{
					IslandCM island = islands[t];
					if (island.ID != islandID && !neibours.Contains(island))
						neibours.Add(island);
				}
			}

			return neibours;
		}
Exemplo n.º 3
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static float GetIslandPriceVP(MapCM map, int islandID, int playerID, AIOptions options)
		{
			float price = 0;
			IslandCM island = map.Islands[islandID];

			price += island.Horns * options.coefficients.HornVPT * options.turnsToEnd;
			price += island.HasMetro ? options.coefficients.MetroVP : 0;

			if (island.OwnerID != playerID)
			{
				price += island.Slots.Where(e => e != Build.None).Select(e => (Library.Map.IsNeedBuild(map, playerID, e) ? options.coefficients.NeedBuildVP : options.coefficients.NotNeedBuildVP)).Sum();
			}
			else
			{
				price += island.Slots.Where(e => e != Build.None).Select(e => options.coefficients.NeedBuildVP).Sum();
			}

			return price;
		}
Exemplo n.º 4
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static List<IslandCM> GetEnemyNeibourIslands(MapCM map, int playerID, bool hasBridge)
		{
			List<IslandCM> res = new List<IslandCM>();
			List<IslandCM> playerIslands = map.GetIslandsByOwner(playerID);
			for (int i = 0; i < playerIslands.Count; ++i)
			{
				IslandCM island = playerIslands[i];
				List<IslandCM> bridgedEnemy = GetBridgedNeibourIslands(map, island.ID, playerID, true);
				if (hasBridge)
				{
					res.AddRange(bridgedEnemy);
				}
				else
				{
					List<IslandCM> neibourEnemy = GetNeibourEnemyIslands(map, island.ID, playerID);
					res.AddRange(neibourEnemy.Where(e => !bridgedEnemy.Contains(e)));
				}
			}
			return res.Distinct().ToList();
		}
Exemplo n.º 5
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static List<IslandCM> GetNeibourEnemyIslands(MapCM map, int islandID, int playerID)
		{
			return GetNeibourIslands(map, islandID).Where(e => e.OwnerID != playerID).ToList();
		}
Exemplo n.º 6
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static bool HasPlayerPlaceForBuilding(MapCM map, int playerID)
		{
			List<IslandCM> islands = map.GetIslandsByOwner(playerID);
			for (int i = 0; i < islands.Count; ++i)
			{
				IslandCM island = islands[i];
				if (island.Slots.Skip(island.HasMetro ? IslandCM.IslandMetroSizeByIslandSize(island.Slots.Count) : 0).Any(e => e == Build.None))
					return true;
			}
			return false;
		}			 
Exemplo n.º 7
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static int GetTheLastEmptySlot(MapCM map, int islandID)
		{
			IslandCM island = map.Islands[islandID];
			List<Build> slots = island.Slots;
			int metroSize = island.HasMetro ? IslandCM.IslandMetroSizeByIslandSize(island.Slots.Count) : 0;
			if (metroSize > 0)
				slots = slots.Skip(metroSize).ToList();

			int index = slots.FindIndex(e => e == Build.None);
			if (index >= 0)
				return index + metroSize;
			return -1;
		}
Exemplo n.º 8
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static List<NavyUnitCM> GetUselesShips(MapCM map, int playerID)
		{
			List<NavyUnitCM> uselesNavy = new List<NavyUnitCM>();
			List<NavyUnitCM> playersNavy = map.Navy.Where(e => e.OwnerID == playerID && !map.IsWhereSeaHornByPoint(e.Cell)).ToList();
			for (int i = 0; i < playersNavy.Count; ++i)
			{
				NavyUnitCM navy = playersNavy[i];
				if (map.GetNeiborIslandsByMapPos(navy.Cell).Count < 2)
					uselesNavy.Add(navy);
			}
			return uselesNavy;
		}
Exemplo n.º 9
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static IslandCM GetTheBestIslandForBuild(MapCM map, int playerID, bool metro = false, bool build = false, bool horn = false)
		{
			List<IslandCM> playerIslands = map.GetIslandsByOwner(playerID);

			if (build)
				playerIslands = playerIslands.Where(e => GetTheLastEmptySlot(map, e.ID) >= 0).ToList();
			if (metro)
				playerIslands = playerIslands.Where(e => !e.HasMetro).ToList();

			if (playerIslands.Count == 0)
				return map.GetIslandsByOwner(playerID).First();
			if (playerIslands.Count == 1)
				return playerIslands[0];

			IslandCM theMostProtectedIsland = GetTheMostProtectedIsland(map, playerIslands);
			return theMostProtectedIsland;
		}
Exemplo n.º 10
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static List<Hex> GetSeaPathToAnyPoint(MapCM map, int playerID, Hex from, List<Hex> toList)
		{
			for (int i = 0; i < toList.Count; ++i)
			{
				Hex to = toList[i];
				List<Hex> path = MapCM.GetSeaPath(map, from, to, playerID, Constants.navyMove);
				if (path != null)
					return path;
			}
			return null;
		}
Exemplo n.º 11
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static int NeedForceToDefenceIsland(MapCM map, int islandID)
		{
			//TODO
			return 0;
		}
Exemplo n.º 12
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static float GetProbOfIslandCapture(MapCM map, int islandID, int attackForce)
		{
			int islandForce = GetIslandForce(map, islandID, true);
			int defenceArmy = GetIslandForce(map, islandID, false);
			if (defenceArmy == 0)
			{
				return 1;
			}
			else
			{
				if (attackForce > islandForce + 2)
					return 0.9f;
				else if (attackForce > islandForce + 1)
					return 0.75f;
				else if (attackForce > islandForce)
					return 0.5f;
				else if (attackForce == islandForce)
					return 0.4f;
				else if (attackForce > islandForce - 1)
					return 0.25f;
				else
					return 0;
			}
		}
Exemplo n.º 13
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static int GetForceNeedToCapture(MapCM map, int islandID, float prob)
		{
			return (GetIslandForce(map, islandID, false) == 0 ? 1 : GetIslandForce(map, islandID, true) + 1);
		}
Exemplo n.º 14
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static int GetIslandForce(MapCM map, int islandID, bool withBuilds = true)
		{
			IslandCM island = map.Islands[islandID];
			return map.GetArmyCountByIsland(islandID, island.OwnerID) + (withBuilds ? map.GetBuildCountAtIsland(islandID, Build.Mars, true) : 0) + (map.IsThereCreatureOnIsland(Card.Minotaur, islandID) ? Constants.minotaurForce : 0);
		}
Exemplo n.º 15
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static bool IsNeedBuild(MapCM map, int playerID, Build build)
		{
			return (map.GetBuildCountAtIslands(map.GetIslandsByOwner(playerID), build, false) == 0);
		}
Exemplo n.º 16
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static IslandCM GetTheMostProtectedIsland(MapCM map, List<IslandCM> playerIslands)
		{
			IslandCM theMostProtectedIsland = playerIslands.OrderByDescending(e => map.GetArmyCountByIsland(e.ID, e.OwnerID)).First();
			return theMostProtectedIsland;
		}
Exemplo n.º 17
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static List<IslandCM> GetEnemyNeibourIslandsWithTheirBridge(MapCM map, int playerID)
		{
			List<IslandCM> res = new List<IslandCM>();
			List<IslandCM> playerIslands = map.GetIslandsByOwner(playerID);
			for (int i = 0; i < playerIslands.Count; ++i)
			{
				IslandCM island = playerIslands[i];
				List<IslandCM> neibourEnemy = GetNeibourEnemyIslands(map, island.ID, playerID);
				res.AddRange(neibourEnemy.Where(e => map.HasIslandsShipBrige(e.ID, island.ID, e.OwnerID)));
			}
			return res.Distinct().ToList();
		}
Exemplo n.º 18
0
Arquivo: Map.cs Projeto: AciesNN/cyc
		public static List<Hex> GetAccessibleSeaHorns(MapCM map, int playerID, bool onlyForReadyShips, bool is_possible_to_attack_enemy)
		{
			List<Hex> horns = new List<Hex>();
			List<Hex> fromCells;
			if (onlyForReadyShips)
				fromCells = map.Navy.Where(e => e.OwnerID == playerID && !map.IsWhereSeaHornByPoint(e.Cell)).Select(e => e.Cell).Distinct().ToList();
			else
				fromCells = map.GetAllPlayerCoast(playerID);

			for (int i = 0; i < fromCells.Count; ++i)
			{
				List<Hex> cells = MapCM.GetConnectedSeas(map, playerID, fromCells[i], Constants.navyMove, false);
				List<Hex> _horns = cells.Where(e => map.IsWhereSeaHornByPoint(e)).ToList();
				horns.AddRange(_horns);
			}
			return horns.Distinct().ToList();
		}