/// <summary> /// Prepares the battle game setup instance. /// </summary> /// <param name="filePathForSetUp">The file path for set up.</param> /// <param name="arrayOfDataLines">The array of data lines.</param> /// <param name="battleShipGameSetup">The battle ship game setup.</param> /// <exception cref="Game.ExceptionHandler.InvalidInputFileException"> /// </exception> private static void PrepareBattleGameSetupInstance(string filePathForSetUp, string[] arrayOfDataLines, BattleGameSetup battleShipGameSetup) { if (arrayOfDataLines.Length > 4) // as per the problem statment { // 1. Setup BattleField Measurements // Assumption: 5 E == 5<space>E setupBattleField(filePathForSetUp, arrayOfDataLines[0], battleShipGameSetup); // 2. instantiate battle field battleShipGameSetup.BattleField = new int[(int)battleShipGameSetup.GameCoordinates.Y, (int)battleShipGameSetup.GameCoordinates.X]; // 3. no of battleships each player has // Assumption: 2 == 2 battleShipGameSetup.BattleshipsPerUser = Convert.ToInt32(arrayOfDataLines[1]); // 4. prepare Ship Fleet for PLayers var player1 = new Model.BattlePlayer() { ID = 1 }; var player2 = new Model.BattlePlayer() { ID = 2 }; int i; // start with '2' index till a Non-ShipType is found or( EndOfFile-2) lines achieved for (i = 2; i < arrayOfDataLines.Length - 2; i++) { var battleShipDetailsAry = arrayOfDataLines[i].Split(' '); // Assumption: Q 1 1 A1 B2 == Q<space>1<space>1<space>A1<space>B2 [11] means [Width Height] // Assumption: P 2 1 D4 C3 == P<space>2<space>1<space>D4<space>C3 BattleshipType shipType; Enum.TryParse(battleShipDetailsAry[0], true, out shipType); if (shipType == BattleshipType.NONE) { return; } // Width=X, Height = Y var shipDimensions = new Point(Convert.ToInt32(battleShipDetailsAry[1]), Convert.ToInt32(battleShipDetailsAry[2])); player1.ShipFleet.AddRange(prepareShipsForPlayer(shipType, shipDimensions, battleShipDetailsAry[3])); player2.ShipFleet.AddRange(prepareShipsForPlayer(shipType, shipDimensions, battleShipDetailsAry[4])); } if ((player1.ShipFleet.Count > battleShipGameSetup.BattleshipsPerUser) || (player2.ShipFleet.Count > battleShipGameSetup.BattleshipsPerUser)) { throw new InvalidInputFileException(filePathForSetUp, " More ships found per user than specified"); } else { battleShipGameSetup.Players.Add(player1); battleShipGameSetup.Players.Add(player2); // 5. Missile Target sequence for PLayer One getMissileFiringSequenceForPlayer(arrayOfDataLines[i], player1); //6. Missile Target sequence for PLayer Two getMissileFiringSequenceForPlayer(arrayOfDataLines[i + 1], player2); } } else { throw new InvalidInputFileException(filePathForSetUp, " Invalid Lines"); } }
/// <summary> /// Setups the battle field. /// </summary> /// <param name="filePathForSetUp">The file path for set up.</param> /// <param name="battleFieldDimensionData">battleFieldDimensionData</param> /// <param name="battleShipGameSetup">The battle ship game setup.</param> /// <exception cref="Game.ExceptionHandler.InvalidInputFileException">invalid dimensions of battle area</exception> private static void setupBattleField(string filePathForSetUp, string battleFieldDimensionData, BattleGameSetup battleShipGameSetup) { var gameDimension = battleFieldDimensionData.Split(' '); // width and Height separated by Space if (gameDimension == null || gameDimension.Length != 2) { throw new InvalidInputFileException(filePathForSetUp, " invalid dimensions of battle area"); } battleShipGameSetup.GameCoordinates = GameCoordinate.ConvertToGameCoordinate(gameDimension[0], gameDimension[1]); }