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(); }
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(); }
public static bool IsNeedBuild(MapCM map, int playerID, Build build) { return (map.GetBuildCountAtIslands(map.GetIslandsByOwner(playerID), build, false) == 0); }
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; }
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; }