Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Using a two-dimensional array as the basis for creating the game battleship. In

ID: 655402 • Letter: U

Question

Using a two-dimensional array as the basis for creating the game battleship. In the game of battleship, a "-" character entry in the array represents ocean(i.e. not a ship), a "#" character represents a place in the ocean where part of ship is present and a "H" character represents a place in the ocean where part of a ship is present and has been hit by a torpedo. Thus, all "H" characets means the ship has been suck. Declare a two dimensional array that is 25x25 that represent the entire ocean and if a statement that prints "HIT" if a torpedo hits a ship given the coordinate X and Y. Write a C++ program that will read in a file representing a game board with 25 lines where each line has 25 characters corresponding to the description above.

You should write a function called Fire that will take an X and Y coordinate and print "HIT" if a ship is hit and "MISS" if a ship is missed. If a ship is HIT you should update the array with an "H" chacacter to indicate the ship was hit. If a ship is hit that has already been hit at that location you should print " HIT AGAIN". You should write a second function called FleetSunk that will determine if all the ships have been sunk. Your C++ program must then call these functions until all the ships have been suck at which point the program should display "The fleet was destoryed".

Explanation / Answer

#include <iostream>

#include <string>

using namespace std;

const int BOARD_WIDTH = 15;

const int BOARD_HEIGHT = 10;

const int SHIP_TYPES = 5;

const char isWATER = 247; //ASCII Character Code

const char isHIT = 'X';

const char isSHIP = 'S';

struct POINT {

            int X;

            int Y;

};

struct SHIP {

            string name;

            int length;

            //Coordinates of those points

            POINT onGrid[5]; //0-4 max length of biggest ship

            //Whether or not those points are a "hit"

            bool hitFlag[5];

        }ship[SHIP_TYPES];

struct PLAYER {

            char grid[BOARD_WIDTH][BOARD_HEIGHT];

}player[3]; //Ignore player 0, just using player's 1 & 2

enum DIRECTION {HORIZONTAL,VERTICAL};

struct PLACESHIPS {

            DIRECTION direction;

            SHIP shipType;

}placeShip;

//Functions

void LoadShips();

void ResetBoard();

void DrawBoard(int);

PLACESHIPS UserInputShipPlacement();

int main()

{

            LoadShips();

            ResetBoard();

            for (int aplyr=1; aplyr<3; ++aplyr)

            {

                        //Loop through each ship type to place

                        for (int thisShip=0; thisShip<SHIP_TYPES; ++thisShip)

                        {

                                    //Display gameboard for player

                                    system("cls");

                                    DrawBoard(aplyr);

                                    //Give instructions

                                    cout << " ";

                                    cout << "INSTRUCTIONS (Player " << aplyr << ") ";

                                    cout << "You are about to place your ships. Format should be: ";

                                    cout << "Facing (0:Horizontal,1:Vertical), X (top-row) coords, Y (left-side) coords ";

                                    cout << "Example: 0 7 2    This would place a ship beginning at X:7 Y:2 going horizontal ";

                                    cout << "Ship to place: " << ship[thisShip].name << " which has a length of " << ship[thisShip].length << " ";

                                    cout << "Where do you want it placed? ";

                                   

                                    //Get input from user and loop until good data is returned

                                    PLACESHIPS aShip;

                                    aShip.shipType.onGrid[0].X = -1;

                                    while (aShip.shipType.onGrid[0].X == -1)

                                    {

                                                aShip = UserInputShipPlacement();

                                    }

                                    //Combine user data with "this ship" data

                                    aShip.shipType.length = ship[thisShip].length;

                                    aShip.shipType.name = ship[thisShip].name;

                                    player[aplyr].grid[aShip.shipType.onGrid[0].X][aShip.shipType.onGrid[0].Y] = isSHIP;

                                    //Determine ALL grid points based on length and direction

                                    for (int i=1; i<aShip.shipType.length; ++i)

                                    {

                                                if (aShip.direction == HORIZONTAL){

                                                aShip.shipType.onGrid[i].X = aShip.shipType.onGrid[i-1].X+1;

                                                aShip.shipType.onGrid[i].Y = aShip.shipType.onGrid[i-1].Y; }

                                                if (aShip.direction == VERTICAL){

                                                aShip.shipType.onGrid[i].Y = aShip.shipType.onGrid[i-1].Y+1;

                                                aShip.shipType.onGrid[i].X = aShip.shipType.onGrid[i-1].X; }

                                                player[aplyr].grid[aShip.shipType.onGrid[i].X][aShip.shipType.onGrid[i].Y] = isSHIP;

                                    }

                                    //Loop back through each ship type

                        }

                        //Loop back through each player

            }

            //player[1].grid[2][5] = isSHIP;

            //DrawBoard(1);

            system("pause");

            return 0;

}

PLACESHIPS UserInputShipPlacement()

{

            int d, x, y;

            PLACESHIPS tmp;

            //Using this as a bad return

            tmp.shipType.onGrid[0].X = -1;

            //Get 3 integers from user

            cin >> d >> x >> y;

            if (d!=0 && d!=1) return tmp;

            if (x<0 || x>=BOARD_WIDTH) return tmp;

            if (y<0 || y>=BOARD_HEIGHT) return tmp;

            //Good data

            tmp.direction = (DIRECTION)d;

            tmp.shipType.onGrid[0].X = x;

            tmp.shipType.onGrid[0].Y = y;

            return tmp;

}

void LoadShips()

{

            ship[0].name = "Cruiser"; ship[0].length = 2;

            ship[1].name = "Frigate"; ship[1].length = 3;

            ship[2].name = "Submarine"; ship[2].length = 3;

            ship[3].name = "Escort"; ship[3].length = 4;

            ship[4].name = "Battleship"; ship[4].length = 5;

}

void ResetBoard()

{

            //Loop through each player

            for (int plyr=1; plyr<3; ++plyr)

            {

                        //For each grid point, set contents to 'water'

                        for (int w=0; w<BOARD_WIDTH; ++w){

                                    for (int h=0; h<BOARD_HEIGHT; ++h){

                                                player[plyr].grid[w][h] = isWATER;

                        }}

                        //Loop back to next player

            }

}

void DrawBoard(int thisPlayer)

{

            //Draws the board for a player (thisPlayer)

            cout << "PLAYER " << thisPlayer << "'s GAME BOARD ";

            cout << "---------------------- ";

            //Loop through top row (board_width) and number columns

            cout << "   ";

            for (int w=0; w<BOARD_WIDTH; ++w) {

                        if (w < 10)

                                    //Numbers only 1 character long, add two spaces after

                                    cout << w << " ";

                        else if (w >= 10)

                                    //Numbers 2 characters long, add only 1 space after

                                    cout << w << " ";

            }

            cout << " ";

            //Loop through each grid point and display to console

            for (int h=0; h<BOARD_HEIGHT; ++h){

                        for (int w=0; w<BOARD_WIDTH; ++w){

                                    if (w==0) cout << h << " ";

                                    //If h was 1 character long, add an extra space to keep numbers lined up

                                    if (w<10 && w==0) cout << " ";

                                    //Display contents of this grid

                                    cout << player[thisPlayer].grid[w][h] << " ";

                                    //If we have reached the border.. line feed

                                    if (w == BOARD_WIDTH-1) cout << " ";

                        }

            }

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote