/// <summary> /// Parses a list of the opponent's moves every round. /// Clears it at the start, so only the moves of this round are stored. /// </summary> /// <param name="moveInput"></param> public void ReadOpponentMoves(string[] moveInput) { OpponentMoves.Clear(); for (var i = 1; i < moveInput.Length; i++) { try { Move move; if (moveInput[i + 1].Equals("place_armies")) { var region = VisibleMap.GetRegion(int.Parse(moveInput[i + 2])); var playerName = moveInput[i]; var armies = int.Parse(moveInput[i + 3]); move = new PlaceArmiesMove(playerName, region, armies); i += 3; } else if (moveInput[i + 1].Equals("attack/transfer")) { var fromRegion = VisibleMap.GetRegion(int.Parse(moveInput[i + 2])); if (fromRegion == null) { //might happen if the region isn't visible fromRegion = FullMap.GetRegion(int.Parse(moveInput[i + 2])); } var toRegion = VisibleMap.GetRegion(int.Parse(moveInput[i + 3])); if (toRegion == null) { //might happen if the region isn't visible toRegion = FullMap.GetRegion(int.Parse(moveInput[i + 3])); } var playerName = moveInput[i]; var armies = int.Parse(moveInput[i + 4]); move = new AttackTransferMove(playerName, fromRegion, toRegion, armies); i += 4; } else { //never happens continue; } OpponentMoves.Add(move); } catch (Exception e) { Console.Error.WriteLine("Unable to parse Opponent moves " + e.Message); } } }
/// <summary> /// Visible regions are given to the bot with player and armies info. /// </summary> /// <param name="mapInput"></param> public void UpdateMap(string[] mapInput) { VisibleMap = FullMap.GetMapCopy(); for (var i = 1; i < mapInput.Length; i++) { try { var region = VisibleMap.GetRegion(int.Parse(mapInput[i])); var playerName = mapInput[i + 1]; var armies = int.Parse(mapInput[i + 2]); region.PlayerName = playerName; region.Armies = armies; i += 2; } catch (Exception e) { Console.Error.WriteLine("Unable to parse Map Update " + e.Message); } } var unknownRegions = new List <Region>(); //remove regions which are unknown. foreach (var region in VisibleMap.Regions) { if (region.PlayerName.Equals("unknown")) { unknownRegions.Add(region); } } foreach (var unknownRegion in unknownRegions) { VisibleMap.Regions.Remove(unknownRegion); } }
public Fov(ViewField viewField, VisibleMap visibleMap) { _viewField = viewField; _visiableMap = visibleMap; }