x
Info
x
Warning
x
Danger
 / 
 / 
 / 
the Java code i have for a Battleship project i

Question : the Java code i have for a Battleship project i : 80497

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 = "\n============================================";

       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 numList = new ArrayList();

       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 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();

       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 += "\n";

       }

       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 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 += "\n";

       }

       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;

   }</this.getlength();i++){

</this.getlength();i++){

   /**

   * 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);

           }

       }

   }</this.getlength();i++){

</this.getlength();i++){

   /**

   * 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;

   }</this.getlength();i++){

</this.getlength();i++){

   /**

   * 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";

   }

 

 

}</this.getlength();i++){

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
5 (1 Ratings )

Solved
Computer Science 4 Years Ago 225 Views
This Question has Been Answered!
Unlimited Access Free
Explore More than 2 Million+
  • Textbook Solutions
  • Flashcards
  • Homework Answers
  • Documents
Signup for Instant Access!
Ask an Expert
Our Experts can answer your tough homework and study questions
154368 Computer Science Questions Answered!
Post a Question