24小时全年无休客服
本公司旗下写手皆为公司直聘 网络写手勿扰
案例中心
starter code
starter code
Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: THEend8_
• A CMakeLists.txt that can compile your program into an executable named BattleShip
• The files including any subfolders if you have them, that make up your project.
Problem Description
You will be implementing the game of BattleShip. The game starts with each player secretly
placing their ships on their board. A ship can be placed either horizontally or vertically on their
board. Once the players have finished placing their ships, they take turns guessing locations on
their opponent's board to fire. Their opponent announces whether the shot hits or misses their
ship and if it is the final hit on their ship, the fact that that shot destroyed their ship. You can play
a version of BattleShip here and I recommend that you do so if you haven’t played the game
before.
Requirements
1. All of your code must be in a namespace named BattleShip
2. You must have at least 3 user defined classes and used them in your solution
3. You must appropriately use public and private. You should NOT make everything public
because it “makes things easier”
Failure to follow these restrictions will result in serious point deductions from your
submission.
Input
Input will come from 3 locations: the command line, files, and standard input
Command Line
• Argument 1
o Required
o The path to the configuration file for this game
▪ This value will always be valid
Configuration File
The configuration file specifies
• The size of the board
• The number of ships to be placed on the board
• The character used to represent each ship
• The size of each ship
The format of the file looks like
• Number of rows on the board
• Number of columns on the board
• Number of ships to be placed
• Ship1_Character Ship1_Size
• Ship2_Character Ship2_Size
• …
For example, the configuration file of a traditional game of Battleship that is played on 10 X 10
board with a Carrier that is 5 long, a Battleship that is 4 long, a Destroyer that is 3 long, a
Submarine that is 3 long, and a Patrol Boat that is 2 long looks like
10
10
5
C 5
B 4
D 3
S 3
P 2
The contents of this file will always be valid.
You can find a few example configuration files in the starter code.
Standard Input (Keyboard)
This is how the user will specify where to place their ships and what location on the board to fire
at. Input will NOT always be valid. If invalid input is entered the user should be prompted for
input
Output
The output is a bit too complicated to specify here what it should look like. Please look at the
examples at the end to see what output should look like
Setting Up The Game
The player will first be asked for their name and then will be asked to place their ships. Ships
are placed in ASCII order based on the character used to represent the ship.
For each ship
1. The player’s board should be displayed
2. The player should be asked if they want to place the ship horizontally or vertically
a. H or h represents horizontal and V or v represents vertical
b. Repeatedly prompt for valid input if invalid input is entered
3. They will then be asked for the starting coordinate they want to place the ship at
. This will be the leftmost point if the ship is placed horizontally
a. This will be the topmost point if the ship is placed vertically
b. If invalid input is entered go back to step 2
4. If the ship can be legally placed at the location it should be placed there but if it can’t go
back to step 2
. A placement is legal if
▪ The ship can fit there without going off the board
▪ The ship does not overlap with any of the ships that have already been
placed
.
Getting A Users Move
The user should enter where they want to shoot out in the form row column. If an invalid move
is entered, you should keep asking the user for a valid move until they enter one. A move is
considered valid if
1. The user entered two integers separated by space
2. The coordinate they choose is on the board
3. They have not shot there already
Test Cases
Most of the test cases are hidden from you. You’ll be told whether you pass or fail and that is
about it. This is so that you do your own testing. You can GoogleTest functions in classes the
same way you test functions that are outside of functions. The only extra step you have to take
is to create an instance of your class first.
There will be one test you can see the output of so that you can find any typos or whitespace
issues.
Future Extensions
You will be building upon this project in the next assignment. In that assignment you will be
adding some very simple “AIs” to the game. Because of this it is important that your solution be
1. Well organized. If it works but is terribly put together the next assignment will be much
harder for you
2. Plan for the extension around Players. This means that you
a. Don’t directly declare instances of Players. Instead make your Players using smart
pointers (probably unique_ptrs).
b. Don’t directly pass instances of players around. Instead use references and pointers.
If you don’t end up completing the assignment you or you just want to, you can build off of my
solution, which will be released after this assignment is due. This can be a challenge as you’ll
have to figure out how my code works and how I think, which I admit was kind of convoluted as I
wanted to try some new things out.
Hints and Musings
• Start early. This is going to take some time so give yourself the time to do it.
• Come up with a plan before coding! If you don’t have a plan before you start writing you
will end up in a world of hurt
o Think about the the things a game of Battleship is composed of and what they
should do and how they should interact
• The most time-consuming part of the project is getting the game setup. Once all the
boards and players are in place it is quite straightforward to implement the gameplay
logic
• What you store and what you display do NOT have to be the same thing
o You don’t have to have a vector of strings to represent the board
o You don’t have to store the spaces in between cells