public static void CommenceGame(Player playerOne, Player playerTwo, BLL.GameLogic.Board boardOne, BLL.GameLogic.Board boardTwo) { DisplayManipulation.ResetDisplay(playerOne); DisplayManipulation.ResetDisplay(playerTwo); while (!playerOne.IsWinner && !playerTwo.IsWinner) { if (playerOne.OnTurn) { Turn(playerOne, boardTwo); playerTwo.OnTurn = true; } else { Turn(playerTwo, boardOne); playerOne.OnTurn = true; } DisplayManipulation.ShotHistoryDisplay(boardTwo, playerOne); DisplayManipulation.ShotHistoryDisplay(boardOne, playerTwo); } if (playerOne.IsWinner) { Console.Clear(); Console.WriteLine(playerOne.Name + " IS VICTORIOUS!"); Console.ReadLine(); } else if (playerTwo.IsWinner) { Console.Clear(); Console.WriteLine(playerTwo.Name + " IS VICTORIOUS!"); Console.ReadLine(); } else { Console.Clear(); Console.WriteLine("SOMETHING WENT SERIOUSLY WRONG"); Console.ReadLine(); } }
public static void ShotHistoryDisplay(BLL.GameLogic.Board board, Player player) { for (int x = 1; x < 11; x++) { for (int y = 1; y < 11; y++) { BLL.Requests.Coordinate coordinate = new BLL.Requests.Coordinate(x, y); BLL.Responses.ShotHistory shot = board.CheckCoordinate(coordinate); if (shot == BLL.Responses.ShotHistory.Hit) { player.Display[x, (y * 2) + 1] = "H"; } else if (shot == BLL.Responses.ShotHistory.Miss) { player.Display[x, (y * 2) + 1] = "M"; } else { player.Display[x, (y * 2) + 1] = "_"; } } } }
public static void NewGame(Player playerOne, Player playerTwo) { Random random = new Random(); int whoIsFirst = random.Next(2); playerOne.IsWinner = false; playerTwo.IsWinner = false; BLL.GameLogic.Board playerOneBoard = new BLL.GameLogic.Board(); BLL.GameLogic.Board playerTwoBoard = new BLL.GameLogic.Board(); if (whoIsFirst == 0) { playerOne.OnTurn = true; playerTwo.OnTurn = false; } else { playerOne.OnTurn = false; playerTwo.OnTurn = true; } if (playerOne.OnTurn) { PlaceShips(playerOne, playerOneBoard); PlaceShips(playerTwo, playerTwoBoard); GameUI.CommenceGame(playerOne, playerTwo, playerOneBoard, playerTwoBoard); } else { PlaceShips(playerTwo, playerTwoBoard); PlaceShips(playerOne, playerOneBoard); GameUI.CommenceGame(playerOne, playerTwo, playerOneBoard, playerTwoBoard); } }
public static void PlaceShips(Player player, BLL.GameLogic.Board board) { bool setUpAccepted = false; BLL.Requests.PlaceShipRequest[] finalPlacement = new BLL.Requests.PlaceShipRequest[5]; while (!setUpAccepted) { BLL.GameLogic.Board scrapBoard = new BLL.GameLogic.Board(); DisplayManipulation.ResetDisplay(player); int shipsLeft = 4; BLL.Ships.ShipType currentShip = new BLL.Ships.ShipType(); while (shipsLeft > -1) { bool validResponse = false; switch (shipsLeft) { case 4: currentShip = BLL.Ships.ShipType.Destroyer; break; case 3: currentShip = BLL.Ships.ShipType.Submarine; break; case 2: currentShip = BLL.Ships.ShipType.Cruiser; break; case 1: currentShip = BLL.Ships.ShipType.Battleship; break; case 0: currentShip = BLL.Ships.ShipType.Carrier; break; } bool invalidShipPlacement = false; while (!validResponse) { string userInput = null; bool validCoord = false; bool invalidFirstCoord = false; bool invalidSecondCoord = false; bool noEntry = false; while (!validCoord) { Console.Clear(); player.ShipPlacementDisplay(player.Color); if (invalidFirstCoord) { Console.WriteLine("INVALID FIRST COORDINATE ENTRY"); } if (invalidSecondCoord) { Console.WriteLine("INVALID SECOND COORDINATE ENTRY"); } if (invalidShipPlacement) { Console.WriteLine("YOU PLACED YOUR " + currentShip.ToString().ToUpper() + " IN A INVALID POSITION!"); } if (noEntry) { Console.WriteLine("YOUR ENTRY LACKED COORDINATES ENTIRELY"); } Console.Write("ENTER VALID COORDINATES FOR " + currentShip.ToString().ToUpper() + " PLACEMENT : "); userInput = Console.ReadLine(); if (userInput.Length > 0) { string first = userInput.Substring(0, 1).ToUpper(); string second = userInput.Substring(1); int firstCoord = first[0] - 'A' + 1; int secondCoord; if (userInput.Length < 2) { invalidFirstCoord = true; invalidSecondCoord = true; } else if (!int.TryParse(second, out secondCoord)) { invalidSecondCoord = true; invalidFirstCoord = false; } else if (secondCoord < 1 || secondCoord > 10 && firstCoord < 1 || firstCoord > 10) { invalidFirstCoord = true; invalidSecondCoord = true; } else if (firstCoord < 1 || firstCoord > 10) { invalidFirstCoord = true; invalidSecondCoord = false; } else if (secondCoord < 1 || secondCoord > 10) { invalidFirstCoord = false; invalidSecondCoord = true; } else { validCoord = true; } } else { noEntry = true; } } int[] coordRequest = new int[4]; coordRequest = Decipher.CoordinateTranslator(userInput); //switch (shipsLeft) //{ // case 4: // player.Display[coordRequest[2], coordRequest[3]] = "D"; // break; // case 3: // player.Display[coordRequest[2], coordRequest[3]] = "S"; // break; // case 2: // player.Display[coordRequest[2], coordRequest[3]] = "U"; // break; // case 1: // player.Display[coordRequest[2], coordRequest[3]] = "B"; // break; // case 0: // player.Display[coordRequest[2], coordRequest[3]] = "C"; // break; //} BLL.Requests.Coordinate shipPlacementCoord = new BLL.Requests.Coordinate(coordRequest[0], coordRequest[1]); string directionEntry = null; bool validDirection = false; BLL.Requests.ShipDirection shipDirection = new BLL.Requests.ShipDirection(); while (!validDirection) { Console.Clear(); player.ShipPlacementDisplay(player.Color); bool invalidEntry = false; if (invalidEntry) { Console.WriteLine("INVALID DIRECTION ENTRY"); } Console.Write("ENTER VALID DIRECTION FOR SHIP PLACEMENT : "); directionEntry = Console.ReadLine(); directionEntry = directionEntry.ToUpper(); switch (directionEntry) { case "UP": shipDirection = BLL.Requests.ShipDirection.Up; validDirection = true; break; case "DOWN": shipDirection = BLL.Requests.ShipDirection.Down; validDirection = true; break; case "LEFT": shipDirection = BLL.Requests.ShipDirection.Left; validDirection = true; break; case "RIGHT": shipDirection = BLL.Requests.ShipDirection.Right; validDirection = true; break; default: invalidEntry = true; Console.Clear(); break; } } //Decipher.PlaceShipDisplayAdjustment(player, coordRequest, directionEntry, shipsLeft); BLL.Requests.PlaceShipRequest request = new BLL.Requests.PlaceShipRequest(); request.Coordinate = shipPlacementCoord; request.Direction = shipDirection; request.ShipType = currentShip; if (scrapBoard.PlaceShip(request) == BLL.Responses.ShipPlacement.Ok) { finalPlacement[shipsLeft] = request; validResponse = true; Decipher.PlaceShipDisplayAdjustment(player, coordRequest, directionEntry, shipsLeft); switch (shipsLeft) { case 4: player.Display[coordRequest[2], coordRequest[3]] = "D"; break; case 3: player.Display[coordRequest[2], coordRequest[3]] = "S"; break; case 2: player.Display[coordRequest[2], coordRequest[3]] = "U"; break; case 1: player.Display[coordRequest[2], coordRequest[3]] = "B"; break; case 0: player.Display[coordRequest[2], coordRequest[3]] = "C"; break; } shipsLeft--; } else { invalidShipPlacement = true; } } } Console.Clear(); player.ShipPlacementDisplay(player.Color); Console.Write("DO YOU ACCEPT YOUR CURRENT SHIP PLACEMENT? ENTER YES TO CONFIRM : "); string confirmPlacement = Console.ReadLine(); if (confirmPlacement.Equals("y", StringComparison.CurrentCultureIgnoreCase) || confirmPlacement.Equals("yes", StringComparison.CurrentCultureIgnoreCase)) { setUpAccepted = true; } } board.PlaceShip(finalPlacement[4]); board.PlaceShip(finalPlacement[3]); board.PlaceShip(finalPlacement[2]); board.PlaceShip(finalPlacement[1]); board.PlaceShip(finalPlacement[0]); }
public static void Turn(Player player, BLL.GameLogic.Board board) { Console.ForegroundColor = player.Color; bool validShot = false; Console.Clear(); Console.WriteLine(player.Name.ToUpper() + "'S TURN IS COMMENCING, SWITCH CONTROL NOW."); Console.WriteLine("PRESS ENTER TO CONTINUE."); Console.ReadLine(); while (!validShot) { Console.Clear(); player.ShowDisplay(); string userInput = null; int[] coordRequest = new int[4]; Console.Write("ENTER COORDINATES FOR FIRING A SHOT : "); userInput = Console.ReadLine(); if (userInput.Length > 0) { coordRequest = Decipher.CoordinateTranslator(userInput); } BLL.Requests.Coordinate shotDestination = new BLL.Requests.Coordinate(coordRequest[0], coordRequest[1]); BLL.Responses.FireShotResponse response = board.FireShot(shotDestination); switch (response.ShotStatus) { case BLL.Responses.ShotStatus.Invalid: Console.WriteLine("THAT SHOT WAS INVALID"); break; case BLL.Responses.ShotStatus.Duplicate: Console.WriteLine("YOU'VE ALREADY SHOT THERE"); break; case BLL.Responses.ShotStatus.Miss: validShot = true; Console.WriteLine("THE SHOT MISSED!"); break; case BLL.Responses.ShotStatus.Hit: validShot = true; Console.WriteLine("THE SHOT HIT!"); break; case BLL.Responses.ShotStatus.HitAndSunk: validShot = true; Console.WriteLine("THE SHOT HIT AND SUNK THEIR " + response.ShipImpacted.ToUpper() + "!"); break; case BLL.Responses.ShotStatus.Victory: validShot = true; player.IsWinner = true; break; } Console.WriteLine("PRESS ENTER TO CONTINUE."); Console.ReadLine(); } player.OnTurn = !player.OnTurn; }