I asked this question 6 times already and each time it was incorrect. It is not
ID: 3743183 • Letter: I
Question
I asked this question 6 times already and each time it was incorrect. It is not giving me what i need. Which is for the game to print out the adjacent edges and corners and the none adjacent after the user inputs the column and the row. Each time the code that was given was one that is just the battleship game and all it does was give you hints. That is NOT what i need. I need a battleship game that will print out the adjacent edges and corners. I tried adding more to what was answered in previous questions and the result of what i have is in this question. Please help me finish the code i have to make the game print out the adjacent corners and edges and the not adjacent
Write a Java program from scratch.
Simple geometrical reasoning is at the core of Battleships. One important notion is adjacency, with two sub-types: edge adjacency and corner adjacency. For example, the square (4,3) is edge-adjacent to the square (3,3), it is corner-adjacent to the square (3,2), and it is not adjacent to the square (6,7).
Write a program that reads a square from the user, and prints out three lists(each with a seperate method):
1) a list of all edge-adjacent squares,
2) a list of all corner-adjacent squares, and
3) a list of all squares which are not adjacent at all.
Our version of battleships is played on a 9 by 9 board. The lower-left square is (0,0). As noted, the program will read from the console a shot specification. You can decide which formats to handle. They may include, for example, specifications like
(5, 5)
3 0
4,1
a7
b 2
An A-level program will handle all the input formats illustrated, output correct answers, be clearly written, and be well designed.
I need help printing the adjacent corners and edges and the not adjacent
This is my code so far. I need help making it better:
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class battleShip{
private static String[][] game;
public static void main(String[] args){
int[][] bord = new int[9][9];
int[][] ships = new int[5][4];
int[] shoot = new int[4];
int attempt = 0,
shoothit = 0;
initBoard(bord);
initShips(ships);
System.out.println();
do{
showBoard(bord);
shoot(shoot);
attempt++;
if (hit(shoot, ships)){
hint(shoot, ships, attempt);
shoothit++;
}
else
hint(shoot, ships, attempt);
changeboard(shoot, ships, bord);
}
while (shoothit != 5);
System.out.println(" Battleship Java game finished! You hit 5 ships in " + attempt + " attempt");
showBoard(bord);
}
public static void initBoard(int[][] bord){
for (int row = 0; row < 9; row++)
for (int column = 0; column < 9; column++)
bord[row][column] = -1;
}
public static void showBoard(int[][] bord){
System.out.println(" 1 2 3 4 5 6 7 8 9");
System.out.println();
for (int row = 0; row < 9; row++){
System.out.print((row + 1) + "");
for (int column = 0; column < 9; column++){
if (bord[row][column] == -1){
System.out.print(" " + "~");
}
else if (bord[row][column] == 0){
System.out.print(" " + "*");
}
else if (bord[row][column] == 1){
System.out.print(" " + "X");
}
}
System.out.println();
}
}
public static void initShips(int[][] ships){
Random random = new Random();
for (int ship = 0; ship < 5; ship++){
ships[ship][0] = random.nextInt(9);
ships[ship][1] = random.nextInt(9);
for (int last = 0; last < ship; last++){
if ((ships[ship][0] == ships[last][0]) && (ships[ship][1] == ships[last][1]))
do{
ships[ship][0] = random.nextInt(9);
ships[ship][1] = random.nextInt(9);
}
while ((ships[ship][0] == ships[last][0]) && (ships[ship][1] == ships[last][1]));
}
}
}
public static void shoot(int[] shoot){
Scanner input = new Scanner(System.in);
System.out.print("Row: ");
shoot[0] = input.nextInt();
shoot[0]--;
System.out.print("Column: ");
shoot[1] = input.nextInt();
shoot[1]--;
}
public static boolean hit(int[] shoot, int[][] ships){
for (int ship = 0; ship < ships.length; ship++){
if (shoot[0] == ships[ship][0] && shoot[1] == ships[ship][1]){
System.out.printf("You hit a ship located in (%d,%d) ", shoot[0] + 1, shoot[1] + 1);
return true;
}
}
return false;
}
public static void hint(int[] shoot, int[][] ships, int attempt){
int row = 0,
column = 0;
for (int line = 0; line < ships.length; line++){
if (ships[line][0] == shoot[0])
row++;
if (ships[line][1] == shoot[1])
column++;
}
System.out.printf(" Hint %d: Row %d -> %d ships " +
"Column %d -> %d ships ", attempt, shoot[0] + 1, row, shoot[1] + 1, column);
}
public static void changeboard(int[] shoot, int[][] ships, int[][] bord){
if (hit(shoot, ships))
bord[shoot[0]][shoot[1]] = 1;
else
bord[shoot[0]][shoot[1]] = 0;
}
public static boolean isCornerAdj(int columnI, int rowI, int testC, int testR){
boolean isCornerAdj = false;
if(rowI == 0){
if((testR == rowI + 1 && testC == columnI - 1) || (testR == rowI + 1 && testC == columnI + 1)){
isCornerAdj = true;
}
}
else if(rowI == game.length - 1){
if((testR == rowI -1 && testC == columnI -1) || (testR == rowI -1 && testC == columnI+ 1)){
isCornerAdj = true;
}
}
else{
// In all other cases
if((testR == rowI + 1 && testC == columnI -1) || (testR == rowI + 1 && testC == columnI + 1) ||
(testR == rowI -1 && testC == columnI - 1) || (testR == rowI -1 && testC == columnI + 1)){
isCornerAdj = true;
}
}
return isCornerAdj;
}
public static boolean isEdgeAdj(int columnI, int rowI, int testC, int testR){
boolean isEdgeAdj = false;
if(rowI == 0){
if((testR==rowI&&testC==columnI -1)||(testR == rowI && testC == columnI + 1)
||(testR == rowI + 1 && testC == columnI)){
isEdgeAdj = true;
}
}
else if(rowI == game.length -1){
if((testR == rowI && testC == columnI -1) ||(testR == rowI && testC == columnI + 1)
|| (testR == rowI - 1 && testC == columnI)){
isEdgeAdj = true;
}
}
else{
// In all other cases, we check left right, above and below the selected index
if((testR == rowI && testC == columnI -1) || (testR == rowI && testC == columnI + 1) ||
(testR == rowI -1 && testC == columnI) || (testR == rowI +1 && testC == columnI)){
isEdgeAdj= true;
}
}
return isEdgeAdj;
}
public static void adjacenyOutput(int rowI,int columnI){
if(rowI == 0 || rowI == game.length-1){
rowI = Math.abs(rowI - (game.length-1));
}
if(columnI == 0 || columnI == game.length-1){
columnI = Math.abs(rowI - (game.length-1));
}
ArrayList edgeAdj = new ArrayList();
ArrayList cornerAdj = new ArrayList();
ArrayList nonAdj = new ArrayList();
for(int i = 0; i < game.length; i++){
for(int j = 0; j < game.length; j++){
if(isCornerAdj(rowI,columnI,i,j)){
cornerAdj.add("(" + String.valueOf(i) + "," + String.valueOf(j) + ")");
}
if (isEdgeAdj(rowI,columnI,i,j)) {
edgeAdj.add("(" + String.valueOf(i) + "," + String.valueOf(j) + ")");
}
else{
nonAdj.add("(" + String.valueOf(i) + "," + String.valueOf(j) + ")");
}
}
}
if(nonAdj.size() == game.length * game.length){
System.out.println("Value non existent on BattleShip board");
return;
}
System.out.println("Edge adjacency: ");
for(String edge: edgeAdj){
System.out.print(edge + " ");
}
System.out.println();
System.out.println("Corner adjacency: ");
for(String corner: cornerAdj){
System.out.print(corner + " ");
}
System.out.println();
System.out.println("None adjacency:");
for(String noneAdj: nonAdj){
System.out.print(noneAdj + " ");
}
}
}
Explanation / Answer
// Hey..Here is your solution. Please do upvote if you find it useful.
// Given below is modified extract of code given along with question.
// I assumed row & column numbering as 0 - 9
// I did modification in two functions. which are actually checking every cell for adjancy.
// Functions before modifications were actually doing unnecessary checking by referring to specific position in a playboard. which is not really required.
// This fix was really very easy.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.