send EDITED code please Battleship.java package part3; public class Battleship {
ID: 3935614 • Letter: S
Question
send EDITED code please
Battleship.java
package part3;
public class Battleship {
public static void main(String[] args) {
// Generate a grid of 15 columns by 10 rows.
BattleshipGrid aGrid = new BattleshipGrid(10,10);
// Print the grid.
aGrid.print();
}
}
Battleship Grid.java
package part3;
import java.util.Random;
import java.util.Scanner;
public class BattleshipGrid {
private char[][] grid;
private int gridRows, gridColumns;
static final int CARRIER_SIZE = 5;
static final int BATTLESHIP_SIZE = 4;
static final int SUB_SIZE = 3;
static final int DESTROYER_SIZE = 3;
static final int PATROL_SIZE = 2;
static final char CARRIER_CHAR = 'C';
static final char BATTLESHIP_CHAR = 'B';
static final char SUB_CHAR = 'S';
static final char DESTROYER_CHAR = 'D';
static final char PATROL_CHAR = 'P';
static final char WATER_CHAR = '.';
public BattleshipGrid(int columns, int rows){
gridColumns = columns;
gridRows = rows;
// Make a two dimensional array of characters as the grid
grid = new char[gridColumns][gridRows];
// Clear the grid
clear();
// Assign the following ships
assignShip(CARRIER_CHAR, CARRIER_SIZE);
assignShip(BATTLESHIP_CHAR, BATTLESHIP_SIZE);
assignShip(SUB_CHAR, SUB_SIZE);
assignShip(DESTROYER_CHAR, DESTROYER_SIZE);
assignShip(PATROL_CHAR, PATROL_SIZE);
}
// Clear the grid
public void clear(){
for (int row=0; row < gridRows; row++){
for (int column=0; column < gridColumns; column++) grid[column][row] = WATER_CHAR;
}
}
// Print the grid
public void print(){
for (int row=0; row < gridRows; row++){
for (int column=0; column < gridColumns; column++) System.out.print(grid[column][row]);
System.out.println("");
}
}
// Assign a ship horizontally on the grid
private boolean assignShipHorizontally(char shipType, int size){
/*
1.2 If horizontal, select a random row to place the ship.
o Select a random column position to start “growing� your ship. The column position must be less than 10-size of the ship to ensure the ship will fit.
o Look at the next adjacent squares on the grid row to see if they are blank.
o If any of the squares are not blank then the ship will not fit so go back to 1.1.
o If the ship does fit then mark it with its designation.
*/
// Select a row and a starting column to place a ship horizontally
Random randomGenerator = new Random();
int chosenRow = randomGenerator.nextInt(gridRows);
int startingColumn = randomGenerator.nextInt(gridColumns-size);
// Count consecutive grid locations horizontally and see if we can accommodate ship
int countSegments = 0;
for (int c = startingColumn; c < startingColumn+size; c++){
if (grid[c][chosenRow] == WATER_CHAR) countSegments++;
}
// If ship will fit then allocate the ship horizontally
if (countSegments == size){
for (int c = startingColumn; c < startingColumn+size; c++){
grid[c][chosenRow] = shipType;
}
return true;
}
return false;
}
// Assign the ship vertically on the grid
private boolean assignShipVertically(char shipType, int size){
/*
1.3 If vertical, select a random column to place the ship.
o Select a random row position to start “growing� your ship. The row position must be less than 10-size of the ship to ensure the ship will fit.
o Look at the next adjacent squares on the grid column to see if they are blank.
o If any of the squares are not blank then the ship will not fit so go back to 1.1.
o If the ship does fit then mark it with its designation.
*/
// Select a column and a starting row to place a ship vertically
Random randomGenerator = new Random();
int chosenColumn = randomGenerator.nextInt(gridColumns);
int startingRow = randomGenerator.nextInt(gridRows-size);
// Count consecutive grid locations vertically and see if we can accommodate ship
int countSegments = 0;
for (int r = startingRow; r < startingRow+size; r++){
if (grid[chosenColumn][r] == WATER_CHAR) countSegments++;
}
// If ship will fit then allocate the ship vertically
if (countSegments == size){
for (int r = startingRow; r < startingRow+size; r++){
grid[chosenColumn][r] = shipType;
}
return true;
}
return false;
}
// Assign a ship to the grid
private void assignShip(char shipType, int size){
Random randomGenerator = new Random();
boolean status = false;
do{
// Randomly choose between horizontal and vertical allocation.
// Sometimes an allocation isnʻt possible so roll the dice and try again.
if (randomGenerator.nextInt(2) == 0)
status = assignShipHorizontally(shipType, size);
else
status = assignShipVertically(shipType, size);
} while(status != true);
}
public boolean playGame(){
// Print the board
// 1) write a for loop to iterate through the rows
for (){
// 2) write a for loop to iterate through the columns
for (){
// 3) if grid[column][row] is 'X'
if(){
// 4) print " "+grid[column][row] (use System.out.print)
} else{
// 5) else print " "+WATER_CHAR (use System.out.print)
}
}
System.out.println("");
}
// Ask user for coordinate
// 6) Create a Scanner called sc instantiate it using new Scanner(System.in)
// Ask user to enter a coordinate
System.out.print("Enter a coordinate (col,row): ");
// 7) read in the first integer to an integer called userCol
// 8) read in the second integer to an integer called userRow
// Check if column and row are with in the range of the board
// 9) Check if (userRow is less than 0) or (userRow is greater than or equal to gridRows),
if(){
// 10) use print() method to reveal location of ships
// 11) return false to end game
}
// 12) Check if (userCol is less than 0) or (userCol is greater than or equal to gridColumns),
if(){
// 13) use print() method to reveal location of ships
// 14) return false to end game
}
// 15) Check if grid[userCol][userRow] intersects with a ship,
if(){
// 16) set value at userCol, userRow to 'X'
}
// return true to continue playing the game
return true;
}
}
Part 3: Modify Battleship Map Creator For this part, you will write a playGame() method that will print the board, ask a user for a coordinate, check if a ship is at this coordinate and mark an X for hit. If a coordinate entered is outside the range of the board, show the ships and end the game. In BattelshipGrid.java: » Locate the playGame() method in the BattelshipGrid.java file · write the code for steps 1-16 In Battelship.java: At line 11, comment out aGrid.print(); At line 12, add the following while loop. o while(aGrid.playGame()); » » Please note You can only have spaces between coordinates when you input them. Otherwise an exception will be thrown » » If you sink all the ships, the game will not end o For extra practice, add code that will end the game when all ships are sunkExplanation / Answer
package part3;
public class Battleship {
public static void main(String[] args) {
// Generate a grid of 15 columns by 10 rows.
BattleshipGrid aGrid = new BattleshipGrid(10,10);
// Print the grid.
// aGrid.print();
while(aGird.playGame());
}
}
package part3;
import java.util.Random;
import java.util.Scanner;
public class BattleshipGrid {
private char[][] grid;
private int gridRows, gridColumns;
static final int CARRIER_SIZE = 5;
static final int BATTLESHIP_SIZE = 4;
static final int SUB_SIZE = 3;
static final int DESTROYER_SIZE = 3;
static final int PATROL_SIZE = 2;
static final char CARRIER_CHAR = 'C';
static final char BATTLESHIP_CHAR = 'B';
static final char SUB_CHAR = 'S';
static final char DESTROYER_CHAR = 'D';
static final char PATROL_CHAR = 'P';
static final char WATER_CHAR = '.';
public BattleshipGrid(int columns, int rows){
gridColumns = columns;
gridRows = rows;
// Make a two dimensional array of characters as the grid
grid = new char[gridColumns][gridRows];
// Clear the grid
clear();
// Assign the following ships
assignShip(CARRIER_CHAR, CARRIER_SIZE);
assignShip(BATTLESHIP_CHAR, BATTLESHIP_SIZE);
assignShip(SUB_CHAR, SUB_SIZE);
assignShip(DESTROYER_CHAR, DESTROYER_SIZE);
assignShip(PATROL_CHAR, PATROL_SIZE);
}
// Clear the grid
public void clear(){
for (int row=0; row < gridRows; row++){
for (int column=0; column < gridColumns; column++) grid[column][row] = WATER_CHAR;
}
}
// Print the grid
public void print(){
for (int row=0; row < gridRows; row++){
for (int column=0; column < gridColumns; column++) System.out.print(grid[column][row]);
System.out.println("");
}
}
// Assign a ship horizontally on the grid
private boolean assignShipHorizontally(char shipType, int size){
/*
1.2 If horizontal, select a random row to place the ship.
o Select a random column position to start “growing� your ship. The column position must be less than 10-size of the ship to ensure the ship will fit.
o Look at the next adjacent squares on the grid row to see if they are blank.
o If any of the squares are not blank then the ship will not fit so go back to 1.1.
o If the ship does fit then mark it with its designation.
*/
// Select a row and a starting column to place a ship horizontally
Random randomGenerator = new Random();
int chosenRow = randomGenerator.nextInt(gridRows);
int startingColumn = randomGenerator.nextInt(gridColumns-size);
// Count consecutive grid locations horizontally and see if we can accommodate ship
int countSegments = 0;
for (int c = startingColumn; c < startingColumn+size; c++){
if (grid[c][chosenRow] == WATER_CHAR) countSegments++;
}
// If ship will fit then allocate the ship horizontally
if (countSegments == size){
for (int c = startingColumn; c < startingColumn+size; c++){
grid[c][chosenRow] = shipType;
}
return true;
}
return false;
}
// Assign the ship vertically on the grid
private boolean assignShipVertically(char shipType, int size){
/*
1.3 If vertical, select a random column to place the ship.
o Select a random row position to start “growing� your ship. The row position must be less than 10-size of the ship to ensure the ship will fit.
o Look at the next adjacent squares on the grid column to see if they are blank.
o If any of the squares are not blank then the ship will not fit so go back to 1.1.
o If the ship does fit then mark it with its designation.
*/
// Select a column and a starting row to place a ship vertically
Random randomGenerator = new Random();
int chosenColumn = randomGenerator.nextInt(gridColumns);
int startingRow = randomGenerator.nextInt(gridRows-size);
// Count consecutive grid locations vertically and see if we can accommodate ship
int countSegments = 0;
for (int r = startingRow; r < startingRow+size; r++){
if (grid[chosenColumn][r] == WATER_CHAR) countSegments++;
}
// If ship will fit then allocate the ship vertically
if (countSegments == size){
for (int r = startingRow; r < startingRow+size; r++){
grid[chosenColumn][r] = shipType;
}
return true;
}
return false;
}
// Assign a ship to the grid
private void assignShip(char shipType, int size){
Random randomGenerator = new Random();
boolean status = false;
do{
// Randomly choose between horizontal and vertical allocation.
// Sometimes an allocation isnʻt possible so roll the dice and try again.
if (randomGenerator.nextInt(2) == 0)
status = assignShipHorizontally(shipType, size);
else
status = assignShipVertically(shipType, size);
} while(status != true);
}
public boolean playGame(){
// Print the board
// 1) write a for loop to iterate through the rows
for (int row=0;row<gridRows;row++){
// 2) write a for loop to iterate through the columns
for (int column=0;column<gridColumns;column++){
// 3) if grid[column][row] is 'X'
if(grid[column][row]='X'){
// 4) print " "+grid[column][row] (use System.out.print)
System.out.print(" "+grid[column][row]);
} else{
// 5) else print " "+WATER_CHAR (use System.out.print)
System.out.print(" "+WATER_CHAR);
}
}
System.out.println("");
}
// Ask user for coordinate
// 6) Create a Scanner called sc instantiate it using new Scanner(System.in)
Scanner sc = new Scanner(system.in);
// Ask user to enter a coordinate
System.out.print("Enter a coordinate (col,row): ");
// 7) read in the first integer to an integer called userCol
int userCol = sc.nextInt();
// 8) read in the second integer to an integer called userRow
int userRow = sc.nextInt();
// Check if column and row are with in the range of the board
// 9) Check if (userRow is less than 0) or (userRow is greater than or equal to gridRows),
if(userRow<0 || userRow>=gridRows){
// 10) use print() method to reveal location of ships
print();
// 11) return false to end game
return false;
}
// 12) Check if (userCol is less than 0) or (userCol is greater than or equal to gridColumns),
if(userCol<0 || userCol>=gridColumns){
// 13) use print() method to reveal location of ships
print();
// 14) return false to end game
return false;
}
// 15) Check if grid[userCol][userRow] intersects with a ship,
if(grd[userCol][userRow]='C' || grid[userCol][userRow]='B' || grid[userCol][userRow]='S' || grid[userCol][userRow]='D' || grid[userCol][userRow]='P'){
// 16) set value at userCol, userRow to 'X'
grid[userCol][userRow]='X';
}
// return true to continue playing the game
return true;
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.