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; }