Esempio n. 1
0
        }//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);
        }