Question
Code required in C++ Battleship Lab Overview & Requirements: Write a program that simulates the game of Battleship. The game will be completely text-based (see
Code required in C++
Battleship Lab
Overview & Requirements:
Write a program that simulates the game of Battleship. The game will be completely text-based (see Sample Execution). Battleship is a two player Navy game. The objective of the game is to sink all ships in your enemy's fleet. The Player to sink his/her enemy's fleet first wins. Both players' fleets consist of 5 ships that are hidden from the enemy. Each ship may be differentiated by its "size" (besides the Cruiser and Submarine) or number of cells it expands on the game board. The Carrier has 5 cells, Battleship has 4 cells, Cruiser has 3 cells, Submarine has 3 cells, and the Destroyer has 2 cells. This program is meant to give you practice in implementing classes, using 2-D arrays, file I/O (e.g., log files), and if you do the extra credit writing TCP/IP code to send data over the network.
The program should simulate a two-player game (optional if you want to make the computer the other player and add some logic for the computer to make moves). Two boards exist within the game. Hint: each board should be implemented as a 2-dimensional array. Each 2-dimensional array should be 10 X 10. One represents Player1's board and one represents Player2's board. At the beginning of the game each Players' game board should be initialized to all '-' indicating that no ships have been placed on either board. Before the game starts, Player1 should have the option to either manually place each of the 5 ships in his/her fleet or to have them randomly placed on the board. If Player1 decides to place the ships manually, then he/she should be prompted to place the Carrier first, Battleship second, Cruiser third, Submarine fourth, and the Destroyer last. Note that ships cannot be placed diagonally on the board, they can only be placed vertically or horizontally. You program must check to see if the user tries to place a ship outside the boundaries of the board or on top of a ship that has already been placed. Each cell on the board that contains part of the ship must be indicated by 'c' for Carrier, 'b' for Battleship, 'r' for Cruiser, 's' for Submarine, or 'd' for Destroyer. For example, if the Carrier was placed then the board should contain 5 'c' s for each cell on the board that has a piece of the Carrier, etc. Once Player1's ships have been placed, Player2's ships must be randomly placed. Note that the placement of Player2's ships must be unknown. Thus, Player2's board will only display '-' in each cell after the placement of each ship.
Input the configuration of the ships using a file. The format of the input should be name of the ship followed by a list of its coordinates:
cruiser
1 1
1 2
1 3
1 4
submarine
3 4
4 4
5 4
Etc
Assume Player 1 goes first. Whenever it's Player1's turn, a prompt should be displayed asking for a position to target (specifying where to "shoot") on the enemy's (Player2's) board (2-dimensional array). The position should be specified in terms of a row and a column on the board. The row and column should always be displayed along with the board. If the position specified happens to hit a ship, then a '*' should replace the '-' on Player2's board. If the positioned specified misses any one of the ships in the fleet, then a 'm' should replace the '-' on Player2's board. Note that from turn-to-turn each player should NOT be allowed to enter the same position. Also, between turns clear the screen (system("cls")). In one turn, a player can only take one shot at the enemy's (other player's) fleet. When Player2 takes a shot at Player1's board, each hit should be specified with a '*' and each miss with a 'm' on Player1's board. The game is over win Player1 or Player2 has sunk all of the ships in the fleet of the enemy.
For each move made by Player1 and Player2, the results should be echoed to a file called "battleship.log". In this file, you should log the targeted position by each player on each move and whether it was a hit on one of the ships in the fleet. Also, if one of the ships happens to sink, then note this in the log file.
At the end of the game, Player1's and Player2's statistics should be written to "battleship.log". The stats include total number of hits, total number of misses, total number of shots, hits to misses ratio (as a percentage), and won or lost the game. Note that the statistics should be placed into a structure called Stats. You need two variables of type Stats, one for Player1 and one for Player2. Once the game has ended you should write the contents of each struct variable to the "battleship.log" file.
Member Functions Decomposition
First step is to draw a class chart to help you understand the decomposition of objects and their functionality for this program. Remember to start with the overall problem and break it down into inputs, computations, and outputs. One possible functional decomposition includes the following (Note: you are NOT required to apply these functions in your program!):
Create a member function welcome_screen() that displays an initial program welcome message along with the rules of Battleship.
Create a member function init_board() that sets each cell in a game board to '0'.
Create a member function init_board_manual() that reads the placement of the ships from an input file and places the ships on the game board. Use the digit 5 to represent the carrier, digit 4 for the cruiser, 3 for the destroyer, 2 for the submarine, and 1 for the patrol boat.
Create a member function update() that determines if the shot taken was a hit or a miss. Use the digit 1 to indicate a hit, and -1 to indicate a miss in your guess board.
Create a member function is_winner() that determines if a winner exists.
Create a member function display_board() that displays a board to the screen.
- Create a member function check_if_sunk_ship() that determines if a ship was sunk.
Create a member function output_current_move() that writes the position of the shot taken by the current player to the log file. It also writes whether or not it was a hit, miss, and if the ship was sunk.
Create a member function output_stats() that writes the statistics collected on each player to the log file.
Other member functions/classes that you think are necessary!
A main that does the following:
o Simulates the game of Battleship
o Opens an output file battleship.log for writing;
o Outputs data to logfile
o Outputs stats to logfile
o Closes logfile
Sample Execution
The following sample session demonstrates how your program should work (user input is shown in bold).
***** Welcome to Battleship! *****
Rules of the Game:
1. This is a two player game.
2. Player1 is John and Player2 is Becky
3. Etc. (You need to list the rest of the rules here.)
Hit enter to start the game!
Enter
(clear the screen)
Please select from the following menu:
1. Enter positions of ships manually.
2. Allow the program to randomly select positions of ships.
1
Please enter the five cells to place the Carrier across:
Enter row: 2
Enter col: 3
Etc
Player2 (Computer's) board has been automatically generated.
Player1 goes first.
Player1's Board:
0 1 2 3 4 5 6 7 8 9
0 - - c c c c c - - -
1 d d - - - - - - - -
2 - - - - - - - - - s
3 - - - - b - - - - s
4 - - - - b - - - - s
5 - - - - b - - - - -
6 - - - - b - - - - -
7 - - - r r r - - - -
8 - - - - - - - - - -
9 - - - - - - - - - -
Player2's Board:
0 1 2 3 4 5 6 7 8 9
0 - - - - - - - - - -
1 - - - - - - - - - -
2 - - - - - - - - - -
3 - - - - - - - - - -
4 - - - - - - - - - -
5 - - - - - - - - - -
6 - - - - - - - - - -
7 - - - - - - - - - -
8 - - - - - - - - - -
9 - - - - - - - - - -
Enter a target row: 2
Enter a target col: 3
(clear screen)
2,3 is a hit!
Player1's Board:
0 1 2 3 4 5 6 7 8 9
0 - - c c c c c - - -
1 d d - - - - - - - -
2 - - - - - - - - - s
3 - - - - b - - - - s
4 - - - - b - - - - s
5 - - - - b - - - - -
6 - - - - b - - - - -
7 - - - r r r - - - -
8 - - - - - - - - - -
9 - - - - - - - - - -
Player2's Board:
0 1 2 3 4 5 6 7 8 9
0 - - - - - - - - - -
1 - - - - - - - - - -
2 - - - * - - - - - -
3 - - - - - - - - - -
4 - - - - - - - - - -
5 - - - - - - - - - -
6 - - - - - - - - - -
7 - - - - - - - - - -
8 - - - - - - - - - -
9 - - - - - - - - - -
Player selects: 9 9
9,9 is a miss!
Hit enter to continue!
Enter
(clear screen)
Player1's Board:
0 1 2 3 4 5 6 7 8 9
0 - - c c c c c - - -
1 d d - - - - - - - -
2 - - - - - - - - - s
3 - - - - b - - - - s
4 - - - - b - - - - s
5 - - - - b - - - - -
6 - - - - b - - - - -
7 - - - r r r - - - -
8 - - - - - - - - - -
9 - - - - - - - - - m
Player2's Board:
0 1 2 3 4 5 6 7 8 9
0 - - - - - - - - - -
1 - - - - - - - - - -
2 - - - * - - - - - -
3 - - - - - - - - - -
4 - - - - - - - - - -
5 - - - - - - - - - -
6 - - - - - - - - - -
7 - - - - - - - - - -
8 - - - - - - - - - -
9 - - - - - - - - - -
Etc...
Player1 Wins!
Statistics outputted to logfile successfully!
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started