This is the Java code i have for a Battleship project i am w
This is the Java code i have for a Battleship project i am working on, i am now wanting to convert this to a fully graphical Gui interface, but i just cant seem to get anywhere with it, so if i could get some help with this, i would apperciate it....(just a reminder its in JAVA)
public class BattleshipGame {
   private Ocean ocean;
    private boolean[][] availableSpot;
    private Scanner sc;
   public BattleshipGame() {
        // define a new ocean and a new 2D array to store available coordinates
        ocean = new Ocean();
        availableSpot = new boolean[10][10];
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++){
                availableSpot[i][j] = true;
            }
        }
    }
   /**
    * prints the game menu and info
    * //param select
    */
    public void print(int select){
        String info;
        switch (select) {
        case 1: info = \"Welcome to the World of Battleship!\";
        break;
        case 2: info = \"Enter coordinates to fire: \";
        break;
        case 3: info = \"Shots fired: \"+ocean.getShotsFired()+\", Ships sunk: \"+ocean.getShipsSunk();
        break;
        case 4: info = \"Congratulations! You win!\";
        break;
        case 99: info = \"Invalid input. Please re-enter:\";
        break;
        case 100: info = \"--------------------------------------------\";
        break;
        case 101: info = \"\ ============================================\";
        break;
        default: info = \"Error selection\";
        break;
        }
        System.out.println(info);
    }
   /**
    * check if the input is valid
    * //param input
    * //return boolean
    */
    public boolean checkValidInput(String input){
        ArrayList<String> numList = new ArrayList<String>();
        for (int i=0;i<10;i++){
            numList.add(\"\"+i);
        }
        String[] coordinates = input.split(\" \");
        //returns false if there are not 2 strings
        if (coordinates.length!=2){
            return false;
        }
        //returns false if any of the strings is not a single digit number
        for (String str: coordinates){
            if (numList.contains(str)==false){
                return false;
            }
        }
        //returns false if the coordinates have already been shot at
        int row = Integer.parseInt(coordinates[0]);
        int column = Integer.parseInt(coordinates[1]);
        if (this.availableSpot[row][column]==false){
            return false;
        }
       
        return true;
    }
   
    /**
    * get the coordinates to shoot at from the String input
    * //param input
    * //return int[] coordinates
    */
    public int[] getCoordinates(String input){
        int[] coordinates = new int[2];
        String[] strList = input.split(\" \");
        int row = Integer.parseInt(strList[0]);
        int column = Integer.parseInt(strList[1]);
        coordinates[0] = row;
        coordinates[1] = column;
        return coordinates;
    }
   /**
    * play the battleship game
    */
    public void play(){
        print(101);
        print(1);
        ocean.placeAllShipsRandomly();
        boolean isGameOver = ocean.isGameOver();
        sc = new Scanner(System.in);
       
        //print the ocean and start the game
        ocean.print();
        print(3);
        while (!isGameOver){
            print(2);
            String input = sc.nextLine();
           
            //check if input is valid
            while (!checkValidInput(input)){
                print(99);
                input = sc.nextLine();
            }
           
            //get coordinates and fire
            int[] coordinates = getCoordinates(input);
            int row = coordinates[0];
            int column = coordinates[1];
            ocean.shootAt(row, column);
            availableSpot[row][column] = false;
            isGameOver = ocean.isGameOver();
            ocean.print();
            print(3);
            print(100);
        }
        //print info saying you win
        print(4);
    }
   public static void main(String[] args) {
       
        BattleshipGame battleshipGame = new BattleshipGame();
        battleshipGame.play();
        System.out.println(\"Continue? y/n\");
        Scanner sc = new Scanner(System.in);
        String isPlay = sc.next();
        while (isPlay.equals(\"y\")){
            battleshipGame = new BattleshipGame();
            battleshipGame.play();
            System.out.println(\"Continue? y/n\");
            isPlay = sc.next();
        }
        sc.close();
    }
}
Ocean.java
package battleship;
import java.util.*;
public class Ocean {
    private Ship[][] ships;
    private int shotsFired;
    private int hitCount;
    private int shipsSunk;
    Random random = new Random();
    private boolean[][] shadow;
    private Ship battleship;
    private Ship cruiser1, cruiser2;
    private Ship destroyer1, destroyer2, destroyer3;
    private Ship submarine1, submarine2, submarine3, submarine4;
    private ArrayList<Ship> allShips;
    //private boolean[][] shotLocations;
    public Ocean() {
        // TODO Auto-generated constructor stub
        battleship = new Battleship();
        cruiser1 = new Cruiser();
        cruiser2 = new Cruiser();
        destroyer1 = new Destroyer();
        destroyer2 = new Destroyer();
        destroyer3 = new Destroyer();
        submarine1 = new Submarine();
        submarine2 = new Submarine();
        submarine3 = new Submarine();
        submarine4 = new Submarine();
       allShips = new ArrayList<Ship>();
        allShips.add(battleship);
        allShips.add(cruiser1);
        allShips.add(cruiser2);
        allShips.add(destroyer1);
        allShips.add(destroyer2);
        allShips.add(destroyer3);
        allShips.add(submarine1);
        allShips.add(submarine2);
        allShips.add(submarine3);
        allShips.add(submarine4);
        ships = new Ship[10][10];
        shadow = new boolean[10][10];
        //shotLocations = new boolean[10][10];
       for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                this.ships[i][j] = new EmptySea();
                this.ships[i][j].setBowRow(i);
                this.ships[i][j].setBowColumn(j);
                this.ships[i][j].setHorizontal(true);
                this.shadow[i][j] = false;
                //this.shotLocations[i][j] = false;
            }
        }
        this.shotsFired = 0;
        this.hitCount = 0;
        this.shipsSunk = 0;
}
   public void placeAllShipsRandomly() {
        int row;
        int column;
        int trueOrFalse;
        for (Ship ship: allShips){
            row = (int) (Math.random() * 10);
            column = (int) (Math.random() * 10);
            trueOrFalse = (int) (Math.random() * 2);
            boolean horizontal = false;
            if (trueOrFalse == 1) {
                horizontal = true;
            }
            else {
                horizontal = false;
            }
           while (!ship.okToPlaceShipAt(row, column, horizontal, this)) {
                row = (int) (Math.random() * 10);
                column = (int) (Math.random() * 10);
                trueOrFalse = (int) (Math.random() * 2);
                if (trueOrFalse == 1) {
                    horizontal = true;
                }
                else {
                    horizontal = false;
                }
            }
            ship.placeShipAt(row, column, horizontal, this);
       }
    }
   public boolean isOccupied(int row, int column) {
        if (this.ships [row][column].getShipType().equals(\"empty\")) {
            return false;
        }
        return true;
    }
   public boolean shootAt(int row, int column) {
        int hit = 0;
        int sunkNum = 0;
        if (isOccupied(row, column) && !ships[row][column].isSunk()) {
            this.hitCount += 1;
            hit = 1;
        }
        this.shotsFired += 1;
        //this.shotLocations[row][column] = true;
        this.ships[row][column].shootAt(row, column);
        for (Ship ship: this.allShips) {
            if (ship.isSunk()){
                sunkNum += 1;
            }
        }
        this.shipsSunk = sunkNum;
        if (hit == 1) {
            return true;
        }
        return false;
    }
   public int getShotsFired() {
        return this.shotsFired;
    }
   public int getHitCount() {
        return this.hitCount;
    }
   public int getShipsSunk() {
        return this.shipsSunk;
    }
   public boolean isGameOver() {
        if (this.shipsSunk == 10) {
            return true;
        }
        return false;
    }
   public Ship[][] getShipArray() {
        return this.ships;
    }
   public void print() {
        String s = \" \";
        int i;
        int j;
        for (i = -1; i < 10; i++) {
            for (j = -1; j < 10; j++) {
                if (i == -1){              
                    if (j > -1){
                        s += \" \" + j;
                    }
                }
                else if (j == -1) {
                    s += i + \" \";
                }
                else if (!this.isHit(i, j)) {
                    s += \".\" + \" \";
                }
                else {
                    s += ships[i][j].toString() + \" \";
                }
            }
            s += \"\ \";
        }
        System.out.println(s);
    }
    ////////////////////////////////////////////////additional helper functions//////////////////////////
    public boolean[][] getShadow() {
        return this.shadow;
    }
   /**
    * when put in one ship, shadow all its adjacent sea. Then the okToPrint function can make judgment and forbid ships to place on the shadow.
    */
    public void setShadow() {
        for (int i = 0; i < 10 ; i++){
            for (int j = 0; j < 10; j++) {
                if (this.isOccupied(i,j)) {
                    for (int k = -1; k < 2; k++) {
                        for (int l = -1; l <2; l++ ) {
                            if ((i+k>=0) && (i+k<=9) && (j+l>=0) && (j+l <=9)) {
                                shadow[i+k][j+l] = true;
                            }
                        }
                    }
                }
            }
        }
    }
   /**
    * setter for ship class to place ship in the ocean
    * //param row
    * //param column
    * //param ship
    */
    public void placeShip(int row, int column, Ship ship) {
        this.ships[row][column] = ship;
        //update the shadow(places which don\'t allow ship to be placed)
        this.setShadow();
    }
   /**
    * all ships list getter for testing
    * //return
    */
    public ArrayList<Ship> getAllShips() {
        return this.allShips;
    }
   public void printTest() {
        String s = \" \";
        int i;
        int j;
        for (i = -1; i < 10; i++) {
            for (j = -1; j < 10; j++) {
                if (i == -1){              
                    if (j > -1){
                        s += \" \" + j;
                    }
                }
                else if (j == -1) {
                    s += i + \" \";
                }
                else if (!isOccupied(i,j)) {
                    s += \".\" + \" \";
                }
                else {
                    s += ships[i][j].toString() + \" \";
                }
            }
            s += \"\ \";
        }
        System.out.println(s);
    }
   
    public boolean isHit(int row, int column) {
        Ship ship = this.ships[row][column];
        int bowRow = ship.getBowRow();
        int bowColumn = ship.getBowColumn();
        //System.out.println(row + \" \" + column + \" \" + ship + \" \" + bowRow + \" \" + bowColumn + ship.isHorizontal());
       
        if (ship.getShipType().equals(\"empty\")) {
            return (ship.getHitArray()[0]);
        }
        else if (ship.isHorizontal()) {
            if (ship.getHitArray()[column - bowColumn]) {
                return true;
            }
            return false;
        }
        else {
            if (ship.getHitArray()[row - bowRow]) {
                return true;
            }
            return false;
        }
    }
}
Ship.java
package battleship;
public abstract class Ship {
    private int bowRow;
    private int bowColumn;
    protected int length;
    private boolean horizontal;
    protected boolean[] hit = new boolean[4];
   public Ship() {
        // TODO Auto-generated constructor stub
        super();
    }
   /**
    * returns bowRow
    * //return bowRow
    */
    public int getBowRow() {
        return bowRow;
    }
   public void setBowRow(int bowRow) {
        this.bowRow = bowRow;
    }
   /**
    * returns bowColumn
    * //return bowColumn
    */
    public int getBowColumn() {
        return bowColumn;
    }
   /**
    * sets the value of bowColumn
    * //param bowColumn
    */
    public void setBowColumn(int bowColumn) {
        this.bowColumn = bowColumn;
    }
   
    /**
    * returns the length of this particular ship
    * //return length of the ship
    */
    public int getLength() {
        return length;
    }
   /**
    * returns horizontal as boolean
    * //return isHorizontal
    */
    public boolean isHorizontal() {
        return horizontal;
    }
   /**
    * sets the value of instance variable horizontal
    * //param horizontal
    */
    public void setHorizontal(boolean horizontal) {
        this.horizontal = horizontal;
    }
    abstract String getShipType();
   /**
    * returns true if it is okay to put a ship of certain length with its bow in this location, with the given orientation
    * returns false otherwise
    * //param row
    * //param column
    * //param horizontal
    * //param ocean
    * //return okToPlaceShipAt as boolean
    */
    public boolean okToPlaceShipAt(int row, int column, boolean horizontal, Ocean ocean){
        boolean okToPlace = true;
        boolean[][] shadows = ocean.getShadow();
        if (horizontal){
            for (int i=0; i<this.getLength();i++){
                if (column+i>9){okToPlace = false;}
                else if (shadows[row][column+i]){okToPlace = false;}
            }
        }
        else{
            for (int i=0; i<this.getLength();i++){
                if (row+i>9){okToPlace = false;}
                else if (shadows[row+i][column]){okToPlace = false;}
            }
        }
        return okToPlace;
    }
   /**
    * puts the ship on a certain spot in the ocean
    * //param row
    * //param column
    * //param horizontal
    * //param ocean
    */
    public void placeShipAt(int row, int column, boolean horizontal, Ocean ocean){
        this.setHorizontal(horizontal);
        this.setBowRow(row);
        this.setBowColumn(column);
        if (!this.isHorizontal()){
            for (int i=0;i<this.getLength();i++){
                ocean.placeShip(row+i, column, this);
            }
        }
        else{
            for (int i=0;i<this.getLength();i++){
                ocean.placeShip(row, column+i, this);
            }
        }
    }
    /**
    * returns true if the ship is hit and not sunk. marks that part of the ship as \"hit\"
    * returns false otherwise
    * //param row
    * //param column
    * //return shootAt as boolean
    */
    public boolean shootAt(int row, int column){
   
        if (this.isHorizontal()){
            for (int i=0; i<this.getLength();i++){
                if ((this.getBowRow() == row)&&(this.getBowColumn()+i==column)){
                    this.hit[i] = true;
                    return true;
                }
            }
        }
        else{
            for (int i=0; i<this.getLength();i++){
                if ((this.getBowRow()+i == row)&&(this.getBowColumn()==column)){
                    this.hit[i] = true;
                    return true;
                }
            }
        }
        return false;
    }
   /**
    * returns the boolean[] that shows which part of the ship is hit
    * //return this.hit
    */
    public boolean[] getHitArray(){
        return this.hit;
    }
   /**
    * returns true if every part of the ship has been hit
    * //return isSunk
    */
    public boolean isSunk(){
        boolean isSunk = true;
        for (int i=0;i<this.getLength();i++){
            isSunk = isSunk&&this.hit[i];
        }
        return isSunk;
    }
   
    /**
    * returns a single-char String to be used in the class \'Ocean\'
    * \"x\" if sunk, \"S\" if not sunk
    */
    //Override
    public String toString(){
        if (this.isSunk()){
            return \"x\";
        }
        return \"S\";
    }
   
   
 }
Battleship.java
package battleship;
public class Battleship extends Ship{
   public Battleship() {
        // TODO Auto-generated constructor stub
        super();
        this.length = 4;
    }
   
    //Override
    public String getShipType(){
        return \"battleship\";
    }
   
}
Cruiser.java
package battleship;
public class Cruiser extends Ship{
   public Cruiser() {
        // TODO Auto-generated constructor stub
        super();
        this.length = 3;
    }
   
    //Override
    public String getShipType(){
        return \"cruiser\";
    }
   
}
Destroyer.java
package battleship;
public class Destroyer extends Ship{
   public Destroyer() {
        // TODO Auto-generated constructor stub
        this.length = 2;
    }
   
    //Override
    public String getShipType(){
        return \"destroyer\";
    }
}
Submarine.java
package battleship;
public class Submarine extends Ship{
   public Submarine() {
        // TODO Auto-generated constructor stub
        this.length = 1;
    }
   
    //Override
    public String getShipType(){
        return \"submarine\";
    }
}
EmptySea.java
package battleship;
public class EmptySea extends Ship{
   public EmptySea() {
        // TODO Auto-generated constructor stub
        super();
        this.length = 1;
    }
   
    //Override
    public boolean shootAt(int row, int column){
        this.hit[0] = true;
        return false;
    }
   
    //Override
    public boolean isSunk(){
        return false;
    }
   
    //Override
    public String toString(){
        return \"-\";
    }
   
    //Override
    String getShipType(){
        return \"empty\";
    }
 }
Solution
import java.util.Random; import java.util.Scanner; public class battleShip { public static void main(String[] args) { int[][] board = new int[5][5]; int[][] ships = new int[3][2]; int[] shoot = new int[2]; int attempts=0, shotHit=0; initBoard(board); initShips(ships); System.out.println(); do{ showBoard(board); shoot(shoot); attempts++; if(hit(shoot,ships)) { hint(shoot,ships,attempts); shotHit++; } else hint(shoot,ships,attempts); changeboard(shoot,ships,board); } while(shotHit!=3); System.out.println(\"\ \ \ Battleship Java game finished! You hit 3 ships in \"+attempts+\" attempts\"); showBoard(board); } public static void initBoard(int[][] board) { for(int row=0 ; row < 5 ; row++ ) for(int column=0 ; column < 5 ; column++ ) board[row][column]=-1; } public static void showBoard(int[][] board) { System.out.println(\"\\t1 \\t2 \\t3 \\t4 \\t5\"); System.out.println(); for(int row=0 ; row < 5 ; row++ ) { System.out.print((row+1)+\"\"); for(int column=0 ; column < 5 ; column++ ) { if(board[row][column]==-1){ System.out.print(\"\\t\"+\"~\"); } else if(board[row][column]==0) { System.out.print(\"\\t\"+\"*\"); } else if(board[row][column]==1) { System.out.print(\"\\t\"+\"X\"); } } System.out.println(); } } public static void initShips(int[][] ships) { Random random = new Random(); for(int ship=0 ; ship < 3 ; ship++) { ships[ship][0]=random.nextInt(5); ships[ship][1]=random.nextInt(5); //let\'s check if that shot was already tried //if it was, just finish the do...while when a new pair was randomly selected 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(5); ships[ship][1]=random.nextInt(5); } 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











