Untitled
unknown
plain_text
3 years ago
4.5 kB
2
Indexable
import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class BattleshipGame { public static void main(String[] args) { int gameBoardLength = 8; char water = '-'; char ship = 's'; char hit = 'X'; char miss = '0'; int shipNumber = 3; 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); } System.out.print("You won!"); } 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 row = guessCoordinates[0]; int col = 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; System.out.print(" "); for (int i = 0; i < gameBoardLength; i++) { System.out.print(i + 1 + " "); } System.out.println(); 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 placeShips(gameBoard, shipNumber, water, ship); } private static char[][] placeShips(char[][] gameBoard, int shipNumber, char water, char ship) { int placedShips = 0; int gameBoardLength = gameBoard.length; while (placedShips < shipNumber) { int [] location = generateShipCoordinates(gameBoardLength); char possiblePlacement = gameBoard[location[0]][location[1]]; 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; i < coordinates.length; i++) { coordinates[i] = new Random().nextInt(gameBoardLength); } return coordinates; } }
Editor is loading...