Exemple #1
0
        public ShipPlacement PlaceCarrier(Board board)
        {
            ShipPlacement response = default(ShipPlacement);

            ConsoleOutput.ShipPlacementMessage(ShipType.Carrier);
            Console.WriteLine();
            do
            {
                var request = new PlaceShipRequest();
                request.ShipType   = ShipType.Carrier;
                request.Coordinate = input.GetCoordinates();

                request.Direction = input.GetShipDirection(ShipType.Carrier);
                response          = board.PlaceShip(request);
                if (response == ShipPlacement.NotEnoughSpace)
                {
                    ConsoleOutput.NotEnoughSpaceMessage();
                }
                else if (response == ShipPlacement.Overlap)
                {
                    ConsoleOutput.OverlappingMessage();
                }
            } while (response == ShipPlacement.NotEnoughSpace || response == ShipPlacement.Overlap);

            return(response);
        }
        public Board GameSetUp()
        {
            //create board instance for current player
            //create placementRequest
            Board            playerBoard      = new Board();
            PlaceShipRequest placementRequest = new PlaceShipRequest();
            int shipsPlaced = 0;

            while (shipsPlaced < 5)
            {
                //populate ships on board for current player based on their input
                //get ship type
                ShipType ship = ConsoleInput.GetShipType();
                placementRequest.ShipType = ship;

                //get coordinates
                Coordinate shipCoordinates = GetShipCoordinates();
                placementRequest.Coordinate = shipCoordinates;

                //get ship direction
                ShipDirection direction = ConsoleInput.GetShipDirection();
                placementRequest.Direction = direction;

                ShipPlacement response = playerBoard.PlaceShip(placementRequest);
                ConsoleOutput.DisplayShipPlacementResult(response);
                if (response == ShipPlacement.Ok)
                {
                    shipsPlaced++;
                }
            }
            Console.Clear();
            return(playerBoard);
        }
Exemple #3
0
        public Board BuildBoard(Board boardname)
        {
            boardname = new Board();
            PlaceShipRequest request = new PlaceShipRequest();

            ConsoleOutput.DrawBlankBoard();

            for (ShipType s = ShipType.Destroyer; s <= ShipType.Carrier; s++)
            {
                request.ShipType = s;
                while (true)
                {
                    Console.WriteLine($"Place your {s}, by indicating the starting coordinate.\n Press 'm' at any time to redraw the board");
                    request.Coordinate = ConsoleInput.GetCoordinateFromUser();
                    request.Direction  = ConsoleInput.GetShipDirection();
                    var result = boardname.PlaceShip(request);

                    if (result == ShipPlacement.Overlap)
                    {
                        ConsoleOutput.OverlappingShip();
                    }
                    if (result == ShipPlacement.NotEnoughSpace)
                    {
                        ConsoleOutput.NotEnoughSpace();
                    }
                    if (result == ShipPlacement.Ok)
                    {
                        ConsoleOutput.ShipSuccessPlaced();
                        break;
                    }
                }
            }
            return(boardname);
        }
Exemple #4
0
 public PlaceShipRequest GetPlaceShipRequest(ShipType vessel)
 {
     return(new PlaceShipRequest()
     {
         Coordinate = ConsoleInput.GetCoordinate(),
         Direction = ConsoleInput.GetShipDirection(),
         ShipType = vessel
     });
 }
Exemple #5
0
        //get user input to place their ship on the board
        private void SetupBoard(Player player)
        {
            PlaceShipRequest placeShip = new PlaceShipRequest();
            ShipPlacement    result    = new ShipPlacement();
            ShipType         shipType  = new ShipType();
            int nextShip = 0;

            //clear screen and show the board layout
            Console.Clear();
            cOutput.DrawUserBoard(null);
            Console.WriteLine();
            Console.Write("Place your ships, ");
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine(player.Name.ToUpper());
            Console.ResetColor();

            for (int i = 0; i < 5; i++)//loop through the five ships needed to be placed
            {
                do
                {
                    //start placing ship
                    Console.WriteLine();
                    placeShip.Coordinate = cInput.GetUserCoord($"{player.Name}, Where do you want to place the {shipType + nextShip}: ");
                    placeShip.Direction  = cInput.GetShipDirection();
                    placeShip.ShipType   = shipType + nextShip;
                    result = player.GetBoard.PlaceShip(placeShip);

                    Console.ForegroundColor = ConsoleColor.Red;
                    if (result == ShipPlacement.NotEnoughSpace)

                    {
                        Console.WriteLine("Invalid placement. Not enough space.");
                    }

                    else if (result == ShipPlacement.Overlap)

                    {
                        Console.WriteLine("Invalid placement. There's already a ship there.");
                    }
                    Console.ResetColor();
                } while (result != ShipPlacement.Ok);

                nextShip++;//used to move to the next ship type to be placed on the board
                Console.Clear();
                cOutput.DrawShipOnBoard(player);
            }

            Console.Clear();
            cOutput.DrawShipOnBoard(player);

            Console.WriteLine("\nPress any key to continue...");
            Console.ReadKey();
        }
Exemple #6
0
        public static void SetUpBoard(User player)
        {
            ShipPlacement response;

            var ships = new Dictionary <ShipType, int>()
            {
                { ShipType.Destroyer, 2 },
                { ShipType.Cruiser, 3 },
                { ShipType.Submarine, 3 },
                { ShipType.Battleship, 4 },
                { ShipType.Carrier, 5 }
            };

            foreach (KeyValuePair <ShipType, int> vessel in ships)
            {
                do
                {
                    Console.Clear();
                    ConsoleOutput.DisplayBoard(player, false);
                    ConsoleOutput.DisplayPlacementMessage(player, vessel.Key, vessel.Value);
                    var request = new PlaceShipRequest()
                    {
                        Coordinate = ConsoleInput.GetCoordinate(),
                        Direction  = ConsoleInput.GetShipDirection(),
                        ShipType   = vessel.Key
                    };

                    response = player.Board.PlaceShip(request);
                    Console.Clear();
                    ConsoleOutput.DisplayBoard(player, false);
                    ConsoleOutput.DisplayShipResponse(request, response);
                    ConsoleInput.Continue();
                } while (response != ShipPlacement.Ok);
            }
            Console.Clear();
            ConsoleOutput.DisplayBoard(player, false);
            ClearScreenPrompt();
        }
Exemple #7
0
        public static void Startup()
        {
            bool playAgain = true;

            while (playAgain)
            {
                ConsoleOutput.MainMenu();
                Console.Clear();

                Player player1       = new Player();
                Player player2       = new Player();
                Player currentPlayer = new Player();

                player1.Name = ConsoleInput.GetPlayerNames("Player 1 - Please enter your name:");
                Console.Clear();
                player2.Name = ConsoleInput.GetPlayerNames("Player 2 - Please enter your name:");
                Console.Clear();

                Random random          = new Random();
                int[]  playerList      = { 0, 1 };
                int    playerSelection = random.Next(0, playerList.Length);

                if (playerSelection == 0)
                {
                    currentPlayer.Name  = player1.Name;
                    currentPlayer.Board = player1.Board;
                }
                currentPlayer.Name  = player2.Name;
                currentPlayer.Board = player2.Board;

                Console.Clear();

                Console.WriteLine(currentPlayer.Name + " - You will be first to shoot!");
                Console.WriteLine();
                Console.WriteLine(player1.Name + " - Get ready to place your board");
                Console.WriteLine("Press any key to continue...");
                Console.WriteLine();
                Console.ReadKey();
                Console.Clear();

                foreach (ShipType ship in Enum.GetValues(typeof(ShipType)))
                {
                    bool shipPlaced = false;
                    do
                    {
                        Coordinate       coordinate       = ConsoleInput.GetShipCoordinate(player1.Name + " - Please Enter Your " + ship + " Coordinates. Example B2");
                        ShipDirection    direction        = ConsoleInput.GetShipDirection(player1.Name + " - Please Enter Your " + ship + "'s Direction - U - Up, D - Down, L - Left, R - Right");
                        PlaceShipRequest placeShipRequest = new PlaceShipRequest()
                        {
                            Coordinate = coordinate,
                            Direction  = direction,
                            ShipType   = ship
                        };
                        var response = player1.Board.PlaceShip(placeShipRequest);
                        switch (response)
                        {
                        case BLL.Responses.ShipPlacement.NotEnoughSpace:
                            Console.WriteLine("Not enough space");
                            break;

                        case BLL.Responses.ShipPlacement.Overlap:
                            Console.WriteLine("Ship Overlaps");
                            break;

                        default:
                            shipPlaced = true;
                            break;
                        }
                    }while (!shipPlaced);
                }
                Console.Clear();

                foreach (ShipType ship in Enum.GetValues(typeof(ShipType)))
                {
                    bool shipPlaced = false;
                    do
                    {
                        Coordinate       coordinate       = ConsoleInput.GetShipCoordinate(player2.Name + " - Please Enter Your " + ship + " Coordinates. Example B2");
                        ShipDirection    direction        = ConsoleInput.GetShipDirection(player2.Name + " - Please Enter Your " + ship + "'s Direction - U - Up, D - Down, L - Left, R - Right");
                        PlaceShipRequest placeShipRequest = new PlaceShipRequest()
                        {
                            Coordinate = coordinate,
                            Direction  = direction,
                            ShipType   = ship
                        };
                        var response = player2.Board.PlaceShip(placeShipRequest);
                        switch (response)
                        {
                        case BLL.Responses.ShipPlacement.NotEnoughSpace:
                            Console.WriteLine("Not Enough Space");
                            break;

                        case BLL.Responses.ShipPlacement.Overlap:
                            Console.WriteLine("Ship Overlaps");
                            break;

                        default:
                            shipPlaced = true;
                            break;
                        }
                    }while (!shipPlaced);
                }
                Console.Clear();

                Console.WriteLine();
                Console.WriteLine(currentPlayer.Name + " - Get ready to shoot!");

                bool GameOver = false;

                while (!GameOver)
                {
                    if (currentPlayer.Name == player1.Name)
                    {
                        Coordinate       fireShotCoordinate = ConsoleInput.FireShotCoordinates(player1.Name + " - Please select coordinates to fire your shot:");
                        FireShotResponse fireShotResponse   = new FireShotResponse();
                        fireShotResponse = player2.Board.FireShot(fireShotCoordinate);
                        switch (fireShotResponse.ShotStatus)
                        {
                        case ShotStatus.Duplicate:
                            break;

                        case ShotStatus.Invalid:
                            break;

                        case ShotStatus.Hit:
                            Console.WriteLine("Nice hit!");
                            break;

                        case ShotStatus.Miss:
                            Console.WriteLine("You missed!");
                            break;

                        case ShotStatus.HitAndSunk:
                            Console.WriteLine("Hit and Sink");
                            break;

                        case ShotStatus.Victory:
                        default:
                            Console.WriteLine("Congrats! You Win!");
                            GameOver = true;
                            break;
                        }
                        DisplayBoard.DisplayScoreBoard(player2.Board);
                        Console.WriteLine();
                    }


                    while (!GameOver)
                    {
                        Coordinate       fireShotCoordinate2 = ConsoleInput.FireShotCoordinates(player2.Name + " - Please select coordinates to fire your shot:");
                        FireShotResponse fireShotResponse2   = new FireShotResponse();
                        fireShotResponse2 = player1.Board.FireShot(fireShotCoordinate2);
                        switch (fireShotResponse2.ShotStatus)
                        {
                        case ShotStatus.Duplicate:
                            break;

                        case ShotStatus.Invalid:
                            break;

                        case ShotStatus.Hit:
                            Console.WriteLine("Nice hit!");
                            break;

                        case ShotStatus.Miss:
                            Console.WriteLine("You missed!");
                            break;

                        case ShotStatus.HitAndSunk:
                            Console.WriteLine("Hit and Sink");
                            break;

                        case ShotStatus.Victory:
                        default:
                            Console.WriteLine("Congrats! You Win!");
                            GameOver = true;
                            break;
                        }
                        DisplayBoard.DisplayScoreBoard(player1.Board);
                        Console.WriteLine();
                    }
                }

                while (!GameOver)
                {
                    if (currentPlayer.Name == player2.Name)
                    {
                        Coordinate       fireShotCoordinate3 = ConsoleInput.FireShotCoordinates(player2.Name + " - Please select coordinates to fire your shot:");
                        FireShotResponse fireShotResponse3   = new FireShotResponse();
                        fireShotResponse3 = player1.Board.FireShot(fireShotCoordinate3);
                        switch (fireShotResponse3.ShotStatus)
                        {
                        case ShotStatus.Duplicate:
                            Console.WriteLine("Duplicate Shot!");
                            break;

                        case ShotStatus.Invalid:
                            Console.WriteLine("Invalid Shot!");
                            break;

                        case ShotStatus.Hit:
                            Console.WriteLine("Nice hit!");
                            break;

                        case ShotStatus.Miss:
                            Console.WriteLine("You missed!");
                            break;

                        case ShotStatus.HitAndSunk:
                            Console.WriteLine("Hit and Sink");
                            break;

                        case ShotStatus.Victory:
                        default:
                            Console.WriteLine("Congrats! You Win!");
                            GameOver = true;
                            break;
                        }
                        DisplayBoard.DisplayScoreBoard(player1.Board);
                        Console.WriteLine();
                    }
                    while (!GameOver)
                    {
                        Coordinate       fireShotCoordinate4 = ConsoleInput.FireShotCoordinates(player1.Name + " - Please select coordinates to fire your shot:");
                        FireShotResponse fireShotResponse4   = new FireShotResponse();
                        fireShotResponse4 = player2.Board.FireShot(fireShotCoordinate4);
                        switch (fireShotResponse4.ShotStatus)
                        {
                        case ShotStatus.Duplicate:
                            Console.WriteLine("Duplicate Shot!");
                            break;

                        case ShotStatus.Invalid:
                            Console.WriteLine("Invalid Shot!");
                            break;

                        case ShotStatus.Hit:
                            Console.WriteLine("Nice hit!");
                            break;

                        case ShotStatus.Miss:
                            Console.WriteLine("You missed!");
                            break;

                        case ShotStatus.HitAndSunk:
                            Console.WriteLine("Hit and Sink");
                            break;

                        case ShotStatus.Victory:
                        default:
                            Console.WriteLine("Congrats! You Win!");
                            GameOver = true;
                            break;
                        }
                        DisplayBoard.DisplayScoreBoard(player2.Board);
                        Console.WriteLine();
                    }
                }

                Console.WriteLine("Do you want to play again? Y or N");
                string startOver = Console.ReadLine().ToUpper();
                if (startOver == "Y" || startOver == "YES")
                {
                    playAgain = true;
                }
                if (startOver == "N" || startOver == "NO")
                {
                    Console.WriteLine("Thanks for playing!");
                    playAgain = false;
                }
            }
        }