}//end of run //show board and ask user for input on where they want to attack private FireShotResponse Attack(Player playerDefend, Player playerAttack) { Coordinate coord; FireShotResponse result; bool completed = false; cOutput.DisplayUserAndEnemyBoard(playerDefend, playerAttack); do { //validation to make sure user's input are valid coord = cInput.GetUserCoord($"{playerAttack.Name}, Where do you want to attack: "); result = playerDefend.GetBoard.FireShot(coord); if (result.ShotStatus == ShotStatus.Miss) { cOutput.DisplayUserAndEnemyBoard(playerDefend, playerAttack); cOutput.WriteColor("You missed", ConsoleColor.Red); completed = true; } else if (result.ShotStatus == ShotStatus.Hit) { cOutput.DisplayUserAndEnemyBoard(playerDefend, playerAttack); cOutput.WriteColor($"Nice one {playerAttack.Name}, you hit a ship.", ConsoleColor.Green); completed = true; } else if (result.ShotStatus == ShotStatus.Invalid) { cOutput.WriteColor("Invalid Shot. The shot was not inside the board. Try again.", ConsoleColor.Red); cOutput.DisplayUserAndEnemyBoard(playerDefend, playerAttack); } else if (result.ShotStatus == ShotStatus.HitAndSunk) { cOutput.DisplayUserAndEnemyBoard(playerDefend, playerAttack); cOutput.WriteColor($"Congrats, you destroyed {playerDefend.Name}'s {result.ShipImpacted}.", ConsoleColor.Green); Console.ResetColor(); completed = true; } else if (result.ShotStatus == ShotStatus.Duplicate) { cOutput.WriteColor("Already shot there, try again.", ConsoleColor.Cyan); cOutput.DisplayUserAndEnemyBoard(playerDefend, playerAttack); } else if (result.ShotStatus == ShotStatus.Victory) { completed = true; } } while (!completed); if (result.ShotStatus != ShotStatus.Victory)//message about whos turn is next as long as no one has won yet { Console.Clear(); Console.Write($"Your Turn is over, "); Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(playerDefend.Name); Console.ResetColor(); Console.Write("'s turn is next."); Console.WriteLine("\nPress any key to continue..."); Console.ReadKey(); } return(result); }