//Topics: 2D arrays: static and dynamic #include #include using namespace std; class battleBoat { private: //2D static array char grid[6][4]; int xsize =6; int ysize =4; //boat location int y; int x; public: battleBoat() { //fill all 2d array cells with default char for (int i = 0; i < xsize; i++) for (int j = 0; j < ysize; j++) grid[i][j] = '~'; x = 2; y = 1; grid[x][y] = 'b'; } //move boat 1 unit based on given input void moveBoat(char d) { int newX=x; int newY=y; if (d == 'u') newY = y - 1; else if (d == 'd') newY = y + 1; else if (d == 'l') newX = x - 1; else if (d == 'r') newX = x + 1; grid[x][y] = '~'; x = newX; y = newY; grid[newX][newY] = 'b'; } void drawBoard() { for (int j = 0; j < ysize; j++) { for (int i = 0; i < xsize; i++) cout << grid[i][j]; cout << endl; } } }; class battleBoatDynamic { private: //2D dynamic array //A pointer to a pointer //Or, an array of arrays char ** grid; int xsize; int ysize; //boat location int y; int x; public: battleBoatDynamic(int _xsize, int _ysize) { xsize = _xsize; ysize = _ysize; //create backbone array (an array of arrays) grid = new char* [xsize]; //Dynamically allocate an array for each cell of backbone for (int i = 0; i < xsize; i++) grid[i] = new char[ysize]; //fill all 2d array cells with default char for (int i = 0; i < xsize; i++) for (int j = 0; j < ysize; j++) grid[i][j] = '~'; x = 0; y = 0; grid[x][y] = 'b'; } //move boat 1 unit based on given input void moveBoat(char d) { int newX = x; int newY = y; if (d == 'u') newY = y - 1; else if (d == 'd') newY = y + 1; else if (d == 'l') newX = x - 1; else if (d == 'r') newX = x + 1; grid[x][y] = '~'; x = newX; y = newY; grid[newX][newY] = 'b'; } void drawBoard() { for (int j = 0; j < ysize; j++) { for (int i = 0; i < xsize; i++) cout << grid[i][j]; cout << endl; } } }; int main() { battleBoatDynamic game(30, 10); while (true) { game.drawBoard(); cout << "Enter boat direction: " << endl; char dir; cin >> dir; game.moveBoat(dir); } return 0; }