package de.buw;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Ships {
public static void main(String[] args) {
int gameBoardLength = 10;
char water ='-';
char ship='s';
char hit='x';
char miss='0';
int shipNumber =10;
char[][] gameBoard = createGameBoard(gameBoardLength, water,ship, shipNumber);
printGameBoard(gameBoard,water,ship);
int undetectedShipNumber=shipNumber;
while(undetectedShipNumber>0) {
int[] guessCoordinates= getUserCoordinates(gameBoardLength);
char locationViewUpdate = evaluateGuessAndGetTheTarget(guessCoordinates,gameBoard,ship,water,hit,miss);
if(locationViewUpdate==hit) {
undetectedShipNumber--;
}
gameBoard=updateGameBoard(gameBoard,guessCoordinates,locationViewUpdate);
printGameBoard(gameBoard,water,ship);
}
}
private static char[][] updateGameBoard(char[][] gameBoard, int[] guessCoordinates, char locationViewUpdate) {
int row=guessCoordinates[0];
int col=guessCoordinates[1];
gameBoard[row][col]=locationViewUpdate;
return gameBoard;
}
private static char evaluateGuessAndGetTheTarget(int[] guessCoordinates, char[][] gameBoard, char ship, char water,
char hit, char miss) {
String message;
int col=guessCoordinates[0];
int row=guessCoordinates[1];
char target= gameBoard[row][col];
if(target==ship) {
message="Hit!";
target=hit;
}else if(target==water) {
message="Miss!";
target=miss;
} else {
message="Already hit!";
}
System.out.println(message);
return target;
}
private static int[] getUserCoordinates(int gameBoardLength) {
int row;
int col;
do {
System.out.print("Row: ");
row = new Scanner(System.in).nextInt();
}while(row<1|| row>gameBoardLength + 1);
do{
System.out.print("Column: ");
col = new Scanner(System.in).nextInt();
}while(col<1||col>gameBoardLength +1);
return new int[] {row-1, col -1};
}
private static void printGameBoard(char[][] gameBoard, char water, char ship) {
int gameBoardLength= gameBoard.length;
for(int i=0; i<gameBoardLength; i++) {
System.out.print(i + 1 + " ");
}
for(int row=0; row<gameBoardLength; row++) {
System.out.print(row + 1 + " ");
for(int col=0;col<gameBoardLength;col++) {
char position=gameBoard[row][col];
if(position==ship) {
System.out.print(water+" ");
} else {
System.out.print(position + " ");
}
}
System.out.println();
}
System.out.println();
}
private static char[][] createGameBoard(int gameBoardLength, char water, char ship, int shipNumber) {
char[][] gameBoard = new char[gameBoardLength][gameBoardLength];
for(char[] row: gameBoard) {
Arrays.fill(row, water);
}
return placedShips(gameBoard,shipNumber,water,ship);
}
private static char[][] placedShips(char[][] gameBoard, int shipNumber, char water, char ship) {
int placedShips =0;
int gameBoardLength = gameBoard.length;
while(placedShips<shipNumber) {
int[] location = generateShipCoordinates(gameBoardLength);
int possiblePlacement=gameBoard.length;
if (possiblePlacement==water) {
gameBoard[location[0]][location[1]]=ship;
placedShips++;
}
}
return gameBoard;
}
private static int[] generateShipCoordinates(int gameBoardLength) {
int[] coordinates= new int[2];
for (int i = 0; 1< coordinates.length;i++) {
coordinates[i]= new Random().nextInt(gameBoardLength);
}
return coordinates;
}
}