/// <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);
            }
        }
Beispiel #3
0
 public Fov(ViewField viewField, VisibleMap visibleMap)
 {
     _viewField   = viewField;
     _visiableMap = visibleMap;
 }