Esempio n. 1
0
        public static List<Move> ParseMoves(Map fullMap, string line)
        {
            var result = new List<Move>();
            var moveInput = InputParser.Split(line);
            for (int i = 1; i < moveInput.Length; i++)
            {
                try
                {
                    Move move;
                    if (moveInput[i + 1].Equals("place_armies"))
                    {
                        Region region = fullMap.GetRegionByID(int.Parse(moveInput[i + 2]));
                        String playerName = moveInput[i];
                        int armies = int.Parse(moveInput[i + 3]);
                        move = new PlaceArmiesMove(playerName, region, armies);
                        i += 3;
                    }
                    else if (moveInput[i + 1].Equals("attack/transfer"))
                    {
                        Region fromRegion = fullMap.GetRegionByID(int.Parse(moveInput[i + 2]));
                        Region toRegion = fullMap.GetRegionByID(int.Parse(moveInput[i + 3]));

                        String playerName = moveInput[i];
                        int armies = int.Parse(moveInput[i + 4]);
                        move = new AttackTransferMove(playerName, fromRegion, toRegion, toRegion, armies, MoveReason.Unknown);
                        i += 4;
                    }
                    else
                    {
                        // Should never happen.
                        continue;
                    }

                    result.Add(move);
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine("Unable to parse moves: " + ex);
                }
            }

            return result;
        }
        protected virtual int Place(IGameplayEngine actingPlayer, PlaceArmiesMove move, int armiesLeft)
        {
            Region region = _gameState.FullMap.GetRegionByID(move.Region.ID);

            if (region == null)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, "Player '{0}' tried to place {1} armies on region {2}, which does not exist. Move discarded.", move.PlayerName, move.Armies, move.Region.ID, move.Region.PlayerName);
                return 0;
            }
            if (move.PlayerName != region.PlayerName)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, "Player '{0}' tried to place {1} armies on region {2}, which is owned by '{3}' instead. Move discarded.", move.PlayerName, move.Armies, move.Region.ID, move.Region.PlayerName);
                return 0;
            }
            if (move.Armies < 1)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, "Player '{0}' tried to place {1} armies on region {2}, which is a bit silly. Move discarded.", move.PlayerName, move.Armies, move.Region.ID);
                return 0;
            }
            if (move.Armies > armiesLeft)
            {
                ConsoleExtensions.WriteColoredLine(ConsoleColor.Red, "Player '{0}' places {1} armies on region {2}, but only {3} armies were remaining. Move discarded.", move.PlayerName, move.Armies, move.Region.ID, armiesLeft);
                return 0;
            }

            ConsoleExtensions.WriteColoredLine(ConsoleColor.DarkGreen, "Player '{0}' places {1} armies on region {2}.", move.PlayerName, move.Armies, move.Region.ID);

            region.Armies += move.Armies;
            region.ArmiesAvailable += move.Armies;

            ConsoleExtensions.WriteColoredLine(ConsoleColor.Magenta, "Region {0} ('{1}'): {2} armies",
                                                                           region.ID,
                                                                           region.PlayerName,
                                                                           region.Armies);
            return move.Armies;
        }