Solution - Battleship Field Validator
unknown
java
a year ago
3.3 kB
13
Indexable
import java.util.Arrays;
public class BattleField {
public static boolean fieldValidator(int[][] field) {
int [][]grid = new int[12][12];
for(int i =0;i<field.length;i++){
for(int j=0;j<field[0].length;j++){
grid[i+1][j+1] = field[i][j];
}
}
//System.out.println(Arrays.deepToString(grid).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));
int shipCount = 0;
int xx,yy;
int arr[] = {0,0,0,0,0};
for(int y=1;y<11;y++){ // Traversing 2D Array
for(int x=1;x<11;x++){ // Traversing 2D Array
if(grid[y][x]==1){ // Checking each cell if its equal to 1
if(grid[y][x+1]==1){ // Checking if the ship is horizontal
shipCount++;
if(grid[y+1][x-1]==1||grid[y+1][x]==1||grid[y+1][x+1]==1){ //Checking if the border below horizontal ship
return false; //returns false when border is occupied
}//if(grid[y+1][x-1]==1||grid[y+1][x]==1)
xx = x + 1;
while(grid[y][xx]==1){ //while the horizontal ship continues
if(grid[y+1][xx+1]==1){
return false;
}//if(grid[y+1][xx+1]==1)
xx+=1;
shipCount++;
}//while(grid[y][xx]==1
if(shipCount>4){
return false;
}//if(shipCount>4)
if(shipCount>1){
arr[shipCount]++;
x = xx;
shipCount = 0;
continue;
}//if(shipCount>1)
}//if(grid[y][x+1]==1)
if(grid[y+1][x]==1){ // Checking if the ship is vertical
shipCount++;
if(grid[y+1][x-1]==1||grid[y+1][x+1]==1){ //Checking if the border below vertical ship
return false; //returns false when border is occupied
}//if(grid[y+1][x-1]==1||grid[y+1][x+1]==1)
yy = y + 1;
while(grid[yy][x]==1){ //while the vertical ship continues
if(grid[yy+1][x+1]==1||grid[yy+1][x-1]==1){
return false;
}//if(grid[yy+1][x+1]==1||grid[yy+1][x-1]==1)
grid[yy][x]=2;
yy+=1;
shipCount++;
}//while(grid[y][xx]==1
if(shipCount>4){
return false;
}//if(shipCount>4)
if(shipCount>1){
arr[shipCount]++;
shipCount = 0;
continue;
}//if(shipCount>1)
}//if(grid[y][x+1]==1)
arr[shipCount+1]++;
continue;
}//if(grid[y][x]==1)
}//for(int x=1;x<11;x++)
}//for(int y=1;y<11;y++)
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.deepToString(grid).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));
if(arr[1]==4&&arr[2]==3&&arr[3]==2&&arr[4]==1){
return true;
}
return false;
}//public static boolean fieldValidator(int[][] field)
}//public class BattleFieldEditor is loading...
Leave a Comment