SlideShare a Scribd company logo
1 of 29
Download to read offline
i have a code that runs, but it only lets the player to guess where the ships are(which is a one
player game with one board). is there a way some one can help turn this game into a player vs
computer game (with two boards one for player and one for computer) Please help me.
BattleShipGame.java
package battleship;
import java.util.ArrayList;
import java.util.Scanner;
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 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 += " ";
}
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 += " ";
}
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; i9){okToPlace = false;}
else if (shadows[row][column+i]){okToPlace = false;}
}
}
else{
for (int i=0; i9){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
Solution
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*;
import java.io.*; import java.lang.Integer; import java.util.Vector; import java.net.*; public class
Battleship extends JFrame { private static JButton ok = new
JButton("OK"),//closes stats menu done =new
JButton("Done");//closes options menu private static JFrame statistics= new
JFrame("Statistics"),//holds stats options=new
JFrame("Options");//holds opts private static JLabel data,//used for stats menu
title;//used for options menu private static JPanel stats=new
JPanel(),//used for stats menu opts,//used for options menu
inputpanel;//for manually inputting ships private static Container
b,c,d;//board and input panel private JPanel input;//input bar private static
JMenuItem m,pvp,pvc,cvc;//menu items private static String[] cletters = {"
","A","B","C","D","E","F","G","H","I","J"}, //array of letters used for combo
boxes cnumbers = {"
","1","2","3","4","5","6","7","8","9","10"}, //array of numbers used for
combo boxes ships =
{"Carrier","Battleship","Submarine","Destroyer", "Patrol
Boat"},//strings used for ship combo box direction =
{"Horizontal","Vertical"},//directions level={"Normal",
"Ridiculously Hard"}, layout={"Manual","Automatic"},
colors={"Cyan", "Green", "Yellow", "Magenta", "Pink", "Red",
"White"}, first={"Player 1", "Player 2",
"Random"};//used for options private JComboBox cshi = new JComboBox(ships),//ships
cdir = new JComboBox(direction);//directions private static
JComboBox aiLevel=new JComboBox(level), shipLayout=new
JComboBox(layout), shipColor=new JComboBox(colors),
playsFirst=new JComboBox(first);//used
//for options menu private JTextField mbar = new JTextField();//message bar
private static int enemy=1, i,j,//counters
length=5, you=0,
prevcolor=0,//index of previous color prevFirst=0,
prevLayout=0, prevLevel=0,//tracks changes in corresponding comboboxes
ready=0, sindex=0,//stores index of array
dindex=0;//direction private static Player players[]=new Player[2]; private static
JButton deploy=new JButton("DEPLOY"); private static int
w=0,a=0,s=0,t=0,e=0;//counters to track the use of all ships private static String[][]
shiphit=new String[10][10]; private static String user,user2; private static Color[]
color={Color.cyan,Color.green,Color.yellow,Color.magenta,
Color.pink, Color.red, Color.white}; private static Object
selectedValue=" ", gametype; private static
BattleshipClient me; private static boolean gameover=false; public Battleship()
{ setTitle("Battleship");
setDefaultCloseOperation(EXIT_ON_CLOSE); setJMenuBar(createMenuBar());
setResizable(false); //gets user to input name
user=JOptionPane.showInputDialog("Enter your name."); int dummy=0;
while (((user==null)||(user.equals("")))&&(dummy<3)) {
user=JOptionPane.showInputDialog("You have to input something."); if
((user!=null)&&(!user.equals(""))) dummy=4; else
dummy++; } if (dummy==3) {
JOptionPane.showMessageDialog(null,"Since you're having trouble inp"
+"utting your name, I'll just call you stupid.","",JOptionPane.INFORMATION_MESSAGE);
user="Stupid"; } players[you]=new Player (user);
players[enemy]=new Player ("Computer");
b=getContentPane(); b.add(setBoard(you),BorderLayout.CENTER);
c=getContentPane(); d = getContentPane();
inputpanel=shipinput(); d.add(inputpanel,BorderLayout.NORTH);
pack(); setVisible(true); } public static boolean
getGameOver() { return gameover; } public static void
setGameOver(boolean b) { gameover=b; } //method to
determine who plays first public void whoGoesFirst() { int x=0; if
(playsFirst.getSelectedIndex()!=2) { if
(playsFirst.getSelectedIndex()!=you) flipYou();
players[playsFirst.getSelectedIndex()].getTimer().start();
x=playsFirst.getSelectedIndex(); } else {
int rand=(int)(Math.random()*2);
JOptionPane.showMessageDialog(null,players[rand].getUser()+" will " +"go
first.","",JOptionPane.PLAIN_MESSAGE); if (rand!=you)
flipYou(); players[rand].getTimer().start(); x=rand; }
if
((!players[x].getUser().equals("Computer"))||(!players[x].getUser().equals("CPU1"))||(!players
[x].getUser().equals("CPU2"))) players[x].setMove(true); }
//returns ship color, as selected by the user public static Color getColor() {
return (color[shipColor.getSelectedIndex()]); } //asks if two players
are playing on the same computer or over the web public static boolean isLocal() {
if ((gametype==pvp)&&(selectedValue.equals("Local"))) return true;
else return false; } public static void flipYou() {
if (you==1) { you=0; enemy=1; }
else { you=1; enemy=0; } }
//determines whether or not is shipLayout is set to automatic public static boolean
isAutoSet() { if (shipLayout.getSelectedIndex()==0) return false;
else return true; } //variable that determines whether
or not a carrier has been placed public static int getW() { return w;
} //variable that determines whether or not a battleship has been placed public
static int getA() { return a; } //variable that determines
whether or not a submarine has been placed public static int getS() { return s;
} //variable that determines whether or not a destroyer has been placed
public static int getT() { return t; } //variable that determines
whether or not a patrol boat has been placed public static int getE() { return
e; } public static int getReady() { return ready;
} public static JFrame getStatistics() { return statistics; }
public static void setData(JLabel x) { data=x; } public static
JLabel getData() { return data; } public static JPanel getStats()
{ return stats; } public static void setDeploy(boolean k) {
deploy.setEnabled(k); } public static Player getPlayers(int x)
{ return players[x]; } public static String getDirection(int i) {
return direction[i]; } public static String getCletters(int i) {
return cletters[i]; } public static String getShips(int i) {
return ships[i]; } public static String getCnumbers(int i) {
return cnumbers[i]; } public static int getSIndex() { return
sindex; } public static int getDIndex() { return dindex; }
public static int getYou() { return you; } public
static int getEnemy() { return enemy; } public static void
setYou(int x) { you=x; } public static void setEnemy(int x)
{ enemy=x; } //creates Game menu and submenus public
JMenuBar createMenuBar() { JMenu menu;//menu // create the
menu bar JMenuBar menuBar = new JMenuBar(); // build the Game menu
menu = new JMenu("Game"); menuBar.add(menu); m = new
JMenu("New Game"); menu.add(m); //submenu of New
Game GameListener stuff = new GameListener(); pvp = new
JMenuItem("Player vs. Player"); pvp.addActionListener(stuff);
m.add(pvp); pvc = new JMenuItem("Player vs. Computer");
pvc.addActionListener(stuff); m.add(pvc); cvc = new
JMenuItem("Computer vs. Computer"); cvc.addActionListener(stuff);
m.add(cvc); m = new JMenuItem("Rules");
m.addActionListener(new RulesListener()); menu.add(m); m = new
JMenuItem("Statistics"); m.addActionListener(new StatsListener());
menu.add(m); m = new JMenuItem("Options"); m.addActionListener(new
OptionsListener()); menu.add(m); m = new JMenuItem("Exit");
m.addActionListener(new ExitListener()); menu.add(m); return
menuBar; } //creates panels that used to place ships public JPanel
shipinput() { input= new JPanel(); mbar.setText("Select a ship, its front
position and direction."); mbar.setFont(new Font("Courier New", Font.BOLD, 14));
mbar.setEditable(false); //input.add(mbar); cshi.setSelectedIndex(0);
cshi.addActionListener(new ShipsListener()); TitledBorder title;//used for
titles around combo boxes title = BorderFactory.createTitledBorder("Ships");
cshi.setBorder(title); input.add(cshi); cdir.setSelectedIndex(0);
cdir.addActionListener(new DirectListener()); input.add(cdir);
title = BorderFactory.createTitledBorder("Direction"); cdir.setBorder(title);
deploy.setEnabled(false); deploy.addActionListener(new DeployListener());
input.add(deploy); return input; } //creates board for manual
ship placement public JPanel setBoard(int n) { players[n].setMyBoard(new
JPanel(new GridLayout(11,11)));//panel to store board JTextField k;
for (i=0;i<11;i++) { for (j=0;j<11;j++)
{ if ((j!=0)&&(i!=0)) {
players[n].getBboard(i-1,j-1).addActionListener(new BoardListener());
players[n].getMyBoard().add(players[n].getBboard(i-1,j-1)); }
if (i==0) {
if (j!=0) { //used to
display row of numbers k= new
JTextField(Battleship.getCnumbers(j)); k.setEditable(false);
k.setHorizontalAlignment((int)JFrame.CENTER_ALIGNMENT);
} else
{ //used to display column of numbers
k= new JTextField(); k.setEditable(false);
}
players[n].getMyBoard().add(k); } else if (j==0)
{ k= new
JTextField(Battleship.getCletters(i)); k.setEditable(false);
k.setHorizontalAlignment((int)JFrame.CENTER_ALIGNMENT);
players[n].getMyBoard().add(k); } }
} return players[n].getMyBoard(); } //creates board and
automatically places ship public JPanel autoBoard(int u,int t) {
players[u].setGBoard(new JPanel(new GridLayout(11,11)));//panel to store board
JTextField k; if (!players[u].getUser().equals("Unknown")) for
(i=0;i<5;i++) {
players[u].setBoats(i,players[u].getBoats(i).compinput(i,u)); }
for (i=0;i<11;i++) { for (j=0;j<11;j++) {
if ((j!=0)&&(i!=0)) {
if ((players[u].getUser().equals("Computer"))||(isLocal()))
{
players[u].getBboard(i-1,j-1).addActionListener(new AttackListener());
}
else if
((players[t].getUser().equals("Computer"))||(players[t].getUser().equals("CPU1"))||(players[t].
getUser().equals("CPU2"))||(players[t].getUser().equals("Unknown")))
{ if (players[u].getHitOrMiss(i-1,j-1))
players[u].setBboard(i-1,j-1,getColor());
} else {
players[u].getBboard(i-1,j-1).addActionListener(new InternetListener());
} players[u].getGBoard().add(players[u].getBboard(i-
1,j-1)); } if (i==0)
{ if (j!=0) {
//used to display row of numbers k= new
JTextField(Battleship.getCnumbers(j)); k.setEditable(false);
k.setHorizontalAlignment((int)JFrame.CENTER_ALIGNMENT);
} else
{ //used to display column of numbers
k= new JTextField(); k.setEditable(false);
}
players[u].getGBoard().add(k); } else if (j==0)
{ k= new
JTextField(Battleship.getCletters(i)); k.setEditable(false);
k.setHorizontalAlignment((int)JFrame.CENTER_ALIGNMENT);
players[u].getGBoard().add(k); } }
} return players[u].getGBoard(); }
//Listener for combo boxes used to layout ships private class ShipsListener implements
ActionListener { public void actionPerformed(ActionEvent v) {
sindex=cshi.getSelectedIndex(); if
(players[you].getBoats(sindex)!=null)
cdir.setSelectedIndex(players[you].getBoats(sindex).getDirect()); switch (sindex)
{ case 0: length=5; break;
case 1: length=4; break; case 2:
length=3; break; case 3: length=3;
break; case 4: length=2; break;
} if (players[you].getBoats(sindex) != null)
{ Ship boat=new
Ship(ships[sindex],players[you].getBoats(sindex).getDirect()
,length,players[you].getBoats(sindex).getX(),players[you].getBoats(sindex).getY());
players[you].getBoats(sindex).clearship();
players[you].setBoats(sindex,boat);
players[you].getBoats(sindex).placeship(); }
} } //Listener for the Direction
combo box private class DirectListener implements ActionListener {
public void actionPerformed(ActionEvent v) {
dindex = cdir.getSelectedIndex(); if
(players[you].getBoats(sindex) != null) { Ship boat=new
Ship(ships[sindex],dindex,players[you].getBoats(sindex).getLength(),
players[you].getBoats(sindex).getX(),players[you].getBoats(sindex).getY());
players[you].getBoats(sindex).clearship();
players[you].setBoats(sindex,boat);
players[you].getBoats(sindex).placeship(); }
} } //Listener for the buttons on the board
private class BoardListener implements ActionListener { public void
actionPerformed(ActionEvent v) { if (ready==0)
{ if (players[you].getBoats(sindex)!=null)
players[you].getBoats(sindex).clearship(); Object source = v.getSource();
outer: for (i=0;i<10;i++)
{ for (j=0;j<10;j++)
{ if (source==players[you].getBboard(i,j))
{ switch (sindex)
{ case 0: {
if (w==0)
w++;
}
break;
case 1: {
if (a==0) a++;
} break;
case 2: {
if (s==0)
s++; }
break; case 3: {
if (t==0)
t++;
}
break; case 4: {
if (e==0)
e++;
} break;
}
players[you].setBoats(sindex,new Ship(ships[sindex],dindex,length,i,j));
break outer;
} } }
players[you].getBoats(sindex).placeship(); }
} } //creates a panel that tells whose board is which private JPanel
whoseBoard() { JPanel panel=new JPanel(new BorderLayout());
panel.add(new JLabel(players[you].getUser()+"'s
Board",SwingConstants.LEFT),BorderLayout.WEST); panel.add(new
JLabel(players[enemy].getUser()+"'s Board",SwingConstants.RIGHT),BorderLayout.EAST);
return panel; } //Listener for exit choice on Game menu private
class ExitListener implements ActionListener { public void
actionPerformed(ActionEvent e) { int r=
JOptionPane.showConfirmDialog(null,"Are you sure you would l" +"ike to exit
Battleship?", "Exit?", JOptionPane.YES_NO_OPTION); if (r==0)
System.exit(0); } } //listener for New Game submenu
private class GameListener implements ActionListener { public void
actionPerformed(ActionEvent e) { int q=
JOptionPane.showConfirmDialog(null,"Are you sure you would l" +"ike to
start a new game?", "New Game?", JOptionPane.YES_NO_OPTION); if
(q==0) { //resets variables
b.removeAll(); c.removeAll(); d.removeAll();
you=0; enemy=1;
ready=0; if (players[you].getTimer()!=null)
if (players[you].getTimer().isRunning())
players[you].getTimer().stop(); if (players[enemy].getTimer()!=null)
if (players[enemy].getTimer().isRunning())
players[enemy].getTimer().stop();
gametype = e.getSource();
if (gametype==pvp) { if (!selectedValue.equals("no
server")) { String[] possibleValues = {
"Local", "Online"}; selectedValue =
JOptionPane.showInputDialog(null, "Choose one", "Input",
JOptionPane.INFORMATION_MESSAGE, null, possibleValues,
possibleValues[0]); } if
(!players[you].getUser().equals("CPU1")) {
if (players[you].getUser().equals("Stupid")) {
int w=JOptionPane.showConfirmDialog(null,"Would you"
+" like to try inputting your name again?","",
JOptionPane.YES_NO_OPTION); if
(w==JOptionPane.YES_OPTION) {
user=JOptionPane.showInputDialog("Enter your name.");
int dummy=0; while
(((user==null)||(user.equals("")))&&(dummy<3)) {
user=JOptionPane.showInputDialog("You have to input something.");
if ((user!=null)&&(!user.equals("")))
dummy=4; else
dummy++; }
if (dummy==3) {
JOptionPane.showMessageDialog(null,"Still a"
+"cting stupid. Oh well, we'll run with it."
,"",JOptionPane.INFORMATION_MESSAGE);
user="Stupid"; }
else
JOptionPane.showMessageDialog(null,"That wasn't"
+" so hard now, was it?","YEAH!",
JOptionPane.INFORMATION_MESSAGE);
} }
players[you]=new Player (players[you].getUser());
} else
players[you]=new Player (user);
if (selectedValue.equals("Online")) {
players[enemy]=new Player ("Unknown"); if (!isAutoSet())
{
b.add(setBoard(you),BorderLayout.CENTER);
deploy.setEnabled(false);
d.add(inputpanel,BorderLayout.NORTH); }
else {
b.add(autoBoard(you,enemy),BorderLayout.WEST);
c.add(autoBoard(enemy,you),BorderLayout.EAST); ready=1;
} } else
{ //gets user to input name
if((players[enemy].getUser().equals("Computer"))||(players[enemy].getUser().equals("CPU2")
)||(players[enemy].getUser().equals("Unknown"))) {
user2=JOptionPane.showInputDialog("Enter your name.");
while ((user2==null)||(user2.equals("")))
{
user2=JOptionPane.showInputDialog("You have to input something.");
}
} else
user2=players[enemy].getUser(); players[enemy]=new Player
(user2); b.add(autoBoard(you,enemy),BorderLayout.WEST);
c.add(autoBoard(enemy,you),BorderLayout.EAST);
d.add(whoseBoard(),BorderLayout.NORTH);
whoGoesFirst(); ready=1;
} //ready=1; } else if
(gametype==pvc)//Player vs Computer {
if (!players[you].getUser().equals("CPU1")) {
if (players[you].getUser().equals("Stupid"))
{ int w=JOptionPane.showConfirmDialog(null,"Would you"
+" like to try inputting your name again?","",
JOptionPane.YES_NO_OPTION); if
(w==JOptionPane.YES_OPTION) {
user=JOptionPane.showInputDialog("Enter your name.");
int dummy=0; while
(((user==null)||(user.equals("")))&&(dummy<3)) {
user=JOptionPane.showInputDialog("You have to input something.");
if ((user!=null)&&(!user.equals("")))
dummy=4; else
dummy++; }
if (dummy==3) {
JOptionPane.showMessageDialog(null,"Still a"
+"cting stupid. Oh well, we'll run with it."
,"",JOptionPane.INFORMATION_MESSAGE);
user="Stupid"; }
else
JOptionPane.showMessageDialog(null,"That wasn't"
+" so hard now, was it?","YEAH!",
JOptionPane.INFORMATION_MESSAGE);
} }
players[you]=new Player (players[you].getUser());
} else
players[you]=new Player (user);
players[enemy]=new Player ("Computer"); if
(!isAutoSet()) {
b.add(setBoard(you),BorderLayout.CENTER);
deploy.setEnabled(false);
d.add(inputpanel,BorderLayout.NORTH); }
else {
b.add(autoBoard(you,enemy),BorderLayout.WEST);
c.add(autoBoard(enemy,you),BorderLayout.EAST); whoGoesFirst
(); } } else if
(gametype==cvc)//Computer vs Computer {
mbar.setText("Battleship Demo");
mbar.setEditable(false);
d.add(mbar,BorderLayout.NORTH); players[you]=new Player
("CPU1"); players[enemy]=new Player ("CPU2");
b.add(autoBoard(you,enemy),BorderLayout.WEST);
c.add(autoBoard(enemy,you),BorderLayout.EAST);
whoGoesFirst(); }
pack(); repaint(); }
} } //Listener for Rules menu private class
RulesListener implements ActionListener { public void
actionPerformed(ActionEvent e) { } }
//Listener for ok button in statistics menu private class OkListener implements
ActionListener { public void actionPerformed(ActionEvent e) {
statistics.dispose(); } } //Listener for Stats menu
private class StatsListener implements ActionListener { // public
void setup() { stats=new JPanel();
ok.addActionListener(new OkListener()); statistics.setSize(300,300);
statistics.setResizable(false);
statistics.getContentPane().add(ok,BorderLayout.SOUTH);
//statistics.setLocation(700,200); } public
void actionPerformed(ActionEvent e) { if
(data==null) setup(); else
stats.removeAll(); stats.setLayout(new GridLayout(6,3));
data=new JLabel(""); stats.add(data); data=new
JLabel("Player 1",SwingConstants.CENTER); stats.add(data);
data=new JLabel("Player 2",SwingConstants.CENTER); stats.add(data);
data=new JLabel("Names"); stats.add(data);
if (you == 0) {
data=new JLabel(players[you].getUser(),SwingConstants.CENTER);
stats.add(data); data=new
JLabel(players[enemy].getUser(),SwingConstants.CENTER);
stats.add(data); data=new JLabel("Shots Taken");
stats.add(data); data=new
JLabel(Integer.toString(players[you].getShots()),SwingConstants.CENTER);
stats.add(data); data=new
JLabel(Integer.toString(players[enemy].getShots()),SwingConstants.CENTER);
stats.add(data); data=new JLabel("Hits");
stats.add(data); data=new
JLabel(Integer.toString(players[you].getHits()),SwingConstants.CENTER);
stats.add(data); data=new
JLabel(Integer.toString(players[enemy].getHits()),SwingConstants.CENTER);
stats.add(data); data=new JLabel("Shot Accuracy");
stats.add(data); data=new
JLabel(players[you].getAcc(),SwingConstants.CENTER); stats.add(data);
data=new JLabel(players[enemy].getAcc(),SwingConstants.CENTER);
stats.add(data); data=new JLabel("Ships Left");
stats.add(data); data=new
JLabel(Integer.toString(players[you].getShipsLeft()),SwingConstants.CENTER);
stats.add(data); data=new
JLabel(Integer.toString(players[enemy].getShipsLeft()),SwingConstants.CENTER);
stats.add(data); } else {
data=new
JLabel(players[enemy].getUser(),SwingConstants.CENTER);
stats.add(data); data=new
JLabel(players[you].getUser(),SwingConstants.CENTER); stats.add(data);
data=new JLabel("Shots Taken"); stats.add(data);
data=new
JLabel(Integer.toString(players[enemy].getShots()),SwingConstants.CENTER);
stats.add(data); data=new
JLabel(Integer.toString(players[you].getShots()),SwingConstants.CENTER);
stats.add(data); data=new JLabel("Hits");
stats.add(data); data=new
JLabel(Integer.toString(players[enemy].getHits()),SwingConstants.CENTER);
stats.add(data); data=new
JLabel(Integer.toString(players[you].getHits()),SwingConstants.CENTER);
stats.add(data); data=new JLabel("Shot Accuracy");
stats.add(data); data=new
JLabel(players[enemy].getAcc(),SwingConstants.CENTER); stats.add(data);
data=new JLabel(players[you].getAcc(),SwingConstants.CENTER);
stats.add(data); data=new JLabel("Ships Left");
stats.add(data); data=new
JLabel(Integer.toString(players[enemy].getShipsLeft()),SwingConstants.CENTER);
stats.add(data); data=new
JLabel(Integer.toString(players[you].getShipsLeft()),SwingConstants.CENTER);
stats.add(data); } statistics.getContentPane().add(stats);
statistics.pack(); statistics.setVisible(true);
} } //Listener for Deploy Button private class DeployListener
implements ActionListener { public void actionPerformed(ActionEvent v)
{ int r= JOptionPane.showConfirmDialog(null,"Are you sure you
would l" +"ike to deploy your ships?", "Deploy Ships?",
JOptionPane.YES_NO_OPTION); if (r==0) {
w=0; a=0; s=0; t=0;
e=0; d.remove(input);
b.add(players[you].getMyBoard(),BorderLayout.WEST); ready=1;
c.add(autoBoard(enemy,you),BorderLayout.EAST);
d.add(new JPanel(),BorderLayout.CENTER);
if (!selectedValue.equals("Online"))
whoGoesFirst(); pack();
repaint(); } }
} //Listener for Options menu public class OptionsListener implements ActionListener
{ public void actionPerformed(ActionEvent e) {
if (opts==null) setup(); else
options.setVisible(true); } public
void setup() { opts=new JPanel(new GridLayout(4,2));
title=new JLabel("Computer AI"); opts.add(title);
aiLevel.setSelectedIndex(0); opts.add(aiLevel);
title=new JLabel("Ship Layout"); opts.add(title);
shipLayout.setSelectedIndex(0); opts.add(shipLayout);
title=new JLabel("Ship Color"); opts.add(title);
shipColor.addActionListener(new SColorListener());
shipColor.setSelectedIndex(0); opts.add(shipColor); title=new
JLabel("Who Plays First?"); opts.add(title);
playsFirst.setSelectedIndex(0); opts.add(playsFirst);
options.getContentPane().add(opts,BorderLayout.CENTER);
//options.setSize(600,800); options.setResizable(false);
done.addActionListener(new DoneListener());
options.getContentPane().add(done,BorderLayout.SOUTH);
options.setLocation(200,200); options.pack();
options.setVisible(true); } //Listener for the Colors
combo box private class SColorListener implements ActionListener
{ public void actionPerformed(ActionEvent v) {
for (i=0;i<10;i++) for (j=0;j<10;j++)
{ if
(players[you].getBboard(i,j).getBackground()==color[prevcolor])
players[you].setBboard(i,j,color[shipColor.getSelectedIndex()]);
if (players[enemy].getBboard(i,j).getBackground()
==color[prevcolor])
players[enemy].setBboard(i,j,color[shipColor.getSelectedIndex()]);
} prevcolor=shipColor.getSelectedIndex(); } }
//Listener for ok button in statistics menu private class
DoneListener implements ActionListener { public void
actionPerformed(ActionEvent e) { if
((shipLayout.getSelectedIndex()!=prevLayout)||
(aiLevel.getSelectedIndex()!=prevLevel)||
(playsFirst.getSelectedIndex()!=prevFirst)) {
JOptionPane.showMessageDialog(null,"Changes will take"+ " place
at the start of a new game.","" ,JOptionPane.PLAIN_MESSAGE);
if (shipLayout.getSelectedIndex()!=prevLayout)
prevLayout=shipLayout.getSelectedIndex(); if
(playsFirst.getSelectedIndex()!=prevFirst)
prevFirst=playsFirst.getSelectedIndex(); if
(aiLevel.getSelectedIndex()!=prevLevel)
prevLevel=aiLevel.getSelectedIndex(); }
options.dispose(); } } } public static
BattleshipClient getClient() { return me; } public static
void main(String[] args){ Battleship gui= new Battleship();
while (gui.isActive()) { while (selectedValue.equals(" "))
{ } System.out.println("xenophobia");
System.out.println("Object = "+selectedValue); if
(selectedValue.equals("Online")) { selectedValue=" ";
while (ready!=1) { }
try { me=new BattleshipClient();
if (!me.getServerName().equals("invalid")) {
me.sendShips(); while (!gameover)
{ if (!players[you].getMove())
{ try
{ me.listen();
} catch
(IOException e){ System.out.println("Aw naw."); }
} while (players[you].getMove())
{ } me.results();
} }
else { b.removeAll();
c.removeAll(); d.removeAll();
players[you]=new Player (user); players[enemy]=new Player
("Computer");
b.add(gui.setBoard(you),BorderLayout.CENTER);
inputpanel=gui.shipinput();
d.add(inputpanel,BorderLayout.NORTH); gui.pack();
gui.repaint(); }
} catch (IOException e)
{ System.out.println("You Suck"); } } }
//System.out.println("okay"); } }
/*http://java.sun.com/docs/books/tutorial/uiswing/learn/example1.html
http://java.sun.com/docs/books/tutorial/uiswing/events/actionlistener.html
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JMenuItem.html
http://java.sun.com/j2se/1.4.2/docs/api/ http://www.cs.princeton.edu/introcs/home/
http://java.sun.com/docs/books/tutorial/networking/overview/index.html JLabels?
http://www.hasbro.com/common/instruct/BattleshipAdvancedMission.pdf
http://java.sun.com/docs/books/tutorial/uiswing/misc/dnd.html
http://java.sun.com/docs/books/tutorial/essential/threads/lifecycle.html synchronization and
threads.*/

More Related Content

Similar to i have a code that runs, but it only lets the player to guess where .pdf

#include -stdio-h- #include -stdlib-h- #include -stdbool-h- #include - (1).docx
#include -stdio-h- #include -stdlib-h- #include -stdbool-h- #include - (1).docx#include -stdio-h- #include -stdlib-h- #include -stdbool-h- #include - (1).docx
#include -stdio-h- #include -stdlib-h- #include -stdbool-h- #include - (1).docxPiersRCoThomsonw
Β 
Sokoban Game Development Using Java ( Updated using Screenshots & Class Diagr...
Sokoban Game Development Using Java ( Updated using Screenshots & Class Diagr...Sokoban Game Development Using Java ( Updated using Screenshots & Class Diagr...
Sokoban Game Development Using Java ( Updated using Screenshots & Class Diagr...British Council
Β 
Groovy
GroovyGroovy
GroovyZen Urban
Β 
Write a program in java in which you will build theβ€œSink theShipsGam.pdf
Write a program in java in which you will build theβ€œSink theShipsGam.pdfWrite a program in java in which you will build theβ€œSink theShipsGam.pdf
Write a program in java in which you will build theβ€œSink theShipsGam.pdfarchanenterprises
Β 
Need to make a ReversiOthello Board game in JAVAThe board size ca.pdf
Need to make a ReversiOthello Board game in JAVAThe board size ca.pdfNeed to make a ReversiOthello Board game in JAVAThe board size ca.pdf
Need to make a ReversiOthello Board game in JAVAThe board size ca.pdfflashfashioncasualwe
Β 
The Future of JavaScript (SXSW '07)
The Future of JavaScript (SXSW '07)The Future of JavaScript (SXSW '07)
The Future of JavaScript (SXSW '07)Aaron Gustafson
Β 
TilePUzzle class Anderson, Franceschi public class TilePu.docx
 TilePUzzle class Anderson, Franceschi public class TilePu.docx TilePUzzle class Anderson, Franceschi public class TilePu.docx
TilePUzzle class Anderson, Franceschi public class TilePu.docxKomlin1
Β 
C# using Visual studio - Windows Form. If possible step-by-step inst.pdf
C# using Visual studio - Windows Form. If possible step-by-step inst.pdfC# using Visual studio - Windows Form. If possible step-by-step inst.pdf
C# using Visual studio - Windows Form. If possible step-by-step inst.pdffazalenterprises
Β 
include ltiostreamgt include ltstringgt include .pdf
include ltiostreamgt include ltstringgt include .pdfinclude ltiostreamgt include ltstringgt include .pdf
include ltiostreamgt include ltstringgt include .pdfcontact32
Β 
Javascript
JavascriptJavascript
JavascriptVlad Ifrim
Β 
Introduction You implemented a Deck class in Activity 2. This cla.pdf
Introduction You implemented a Deck class in Activity 2. This cla.pdfIntroduction You implemented a Deck class in Activity 2. This cla.pdf
Introduction You implemented a Deck class in Activity 2. This cla.pdffeelinggifts
Β 
Capability Driven Design - Andrzej JΓ³ΕΊwiak - TomTom Dev Day 2021
Capability Driven Design - Andrzej JΓ³ΕΊwiak  - TomTom Dev Day 2021Capability Driven Design - Andrzej JΓ³ΕΊwiak  - TomTom Dev Day 2021
Capability Driven Design - Andrzej JΓ³ΕΊwiak - TomTom Dev Day 2021Andrzej JΓ³ΕΊwiak
Β 
Workshop 10: ECMAScript 6
Workshop 10: ECMAScript 6Workshop 10: ECMAScript 6
Workshop 10: ECMAScript 6Visual Engineering
Β 
implemement the game.cpp by the header file given. And create main.c.pdf
implemement the game.cpp by the header file given. And create main.c.pdfimplemement the game.cpp by the header file given. And create main.c.pdf
implemement the game.cpp by the header file given. And create main.c.pdffazilfootsteps
Β 
TypeScript - All you ever wanted to know - Tech Talk by Epic Labs
TypeScript - All you ever wanted to know - Tech Talk by Epic LabsTypeScript - All you ever wanted to know - Tech Talk by Epic Labs
TypeScript - All you ever wanted to know - Tech Talk by Epic LabsAlfonso Peletier
Β 
The main class of the tictoe game looks like.public class Main {.pdf
The main class of the tictoe game looks like.public class Main {.pdfThe main class of the tictoe game looks like.public class Main {.pdf
The main class of the tictoe game looks like.public class Main {.pdfasif1401
Β 

Similar to i have a code that runs, but it only lets the player to guess where .pdf (17)

Include
IncludeInclude
Include
Β 
#include -stdio-h- #include -stdlib-h- #include -stdbool-h- #include - (1).docx
#include -stdio-h- #include -stdlib-h- #include -stdbool-h- #include - (1).docx#include -stdio-h- #include -stdlib-h- #include -stdbool-h- #include - (1).docx
#include -stdio-h- #include -stdlib-h- #include -stdbool-h- #include - (1).docx
Β 
Sokoban Game Development Using Java ( Updated using Screenshots & Class Diagr...
Sokoban Game Development Using Java ( Updated using Screenshots & Class Diagr...Sokoban Game Development Using Java ( Updated using Screenshots & Class Diagr...
Sokoban Game Development Using Java ( Updated using Screenshots & Class Diagr...
Β 
Groovy
GroovyGroovy
Groovy
Β 
Write a program in java in which you will build theβ€œSink theShipsGam.pdf
Write a program in java in which you will build theβ€œSink theShipsGam.pdfWrite a program in java in which you will build theβ€œSink theShipsGam.pdf
Write a program in java in which you will build theβ€œSink theShipsGam.pdf
Β 
Need to make a ReversiOthello Board game in JAVAThe board size ca.pdf
Need to make a ReversiOthello Board game in JAVAThe board size ca.pdfNeed to make a ReversiOthello Board game in JAVAThe board size ca.pdf
Need to make a ReversiOthello Board game in JAVAThe board size ca.pdf
Β 
The Future of JavaScript (SXSW '07)
The Future of JavaScript (SXSW '07)The Future of JavaScript (SXSW '07)
The Future of JavaScript (SXSW '07)
Β 
TilePUzzle class Anderson, Franceschi public class TilePu.docx
 TilePUzzle class Anderson, Franceschi public class TilePu.docx TilePUzzle class Anderson, Franceschi public class TilePu.docx
TilePUzzle class Anderson, Franceschi public class TilePu.docx
Β 
C# using Visual studio - Windows Form. If possible step-by-step inst.pdf
C# using Visual studio - Windows Form. If possible step-by-step inst.pdfC# using Visual studio - Windows Form. If possible step-by-step inst.pdf
C# using Visual studio - Windows Form. If possible step-by-step inst.pdf
Β 
include ltiostreamgt include ltstringgt include .pdf
include ltiostreamgt include ltstringgt include .pdfinclude ltiostreamgt include ltstringgt include .pdf
include ltiostreamgt include ltstringgt include .pdf
Β 
Javascript
JavascriptJavascript
Javascript
Β 
Introduction You implemented a Deck class in Activity 2. This cla.pdf
Introduction You implemented a Deck class in Activity 2. This cla.pdfIntroduction You implemented a Deck class in Activity 2. This cla.pdf
Introduction You implemented a Deck class in Activity 2. This cla.pdf
Β 
Capability Driven Design - Andrzej JΓ³ΕΊwiak - TomTom Dev Day 2021
Capability Driven Design - Andrzej JΓ³ΕΊwiak  - TomTom Dev Day 2021Capability Driven Design - Andrzej JΓ³ΕΊwiak  - TomTom Dev Day 2021
Capability Driven Design - Andrzej JΓ³ΕΊwiak - TomTom Dev Day 2021
Β 
Workshop 10: ECMAScript 6
Workshop 10: ECMAScript 6Workshop 10: ECMAScript 6
Workshop 10: ECMAScript 6
Β 
implemement the game.cpp by the header file given. And create main.c.pdf
implemement the game.cpp by the header file given. And create main.c.pdfimplemement the game.cpp by the header file given. And create main.c.pdf
implemement the game.cpp by the header file given. And create main.c.pdf
Β 
TypeScript - All you ever wanted to know - Tech Talk by Epic Labs
TypeScript - All you ever wanted to know - Tech Talk by Epic LabsTypeScript - All you ever wanted to know - Tech Talk by Epic Labs
TypeScript - All you ever wanted to know - Tech Talk by Epic Labs
Β 
The main class of the tictoe game looks like.public class Main {.pdf
The main class of the tictoe game looks like.public class Main {.pdfThe main class of the tictoe game looks like.public class Main {.pdf
The main class of the tictoe game looks like.public class Main {.pdf
Β 

More from poblettesedanoree498

Give examples of two zoonotic diseases. Explain how these zoonotic d.pdf
Give examples of two zoonotic diseases. Explain how these zoonotic d.pdfGive examples of two zoonotic diseases. Explain how these zoonotic d.pdf
Give examples of two zoonotic diseases. Explain how these zoonotic d.pdfpoblettesedanoree498
Β 
Create the variables, and methods needed for this classA DicePlay.pdf
Create the variables, and methods needed for this classA DicePlay.pdfCreate the variables, and methods needed for this classA DicePlay.pdf
Create the variables, and methods needed for this classA DicePlay.pdfpoblettesedanoree498
Β 
Describe different flow control valves with figures. Include referenc.pdf
Describe different flow control valves with figures. Include referenc.pdfDescribe different flow control valves with figures. Include referenc.pdf
Describe different flow control valves with figures. Include referenc.pdfpoblettesedanoree498
Β 
Consider a sample with data values of 10, 20, 12, 17, and 16.Compute.pdf
Consider a sample with data values of 10, 20, 12, 17, and 16.Compute.pdfConsider a sample with data values of 10, 20, 12, 17, and 16.Compute.pdf
Consider a sample with data values of 10, 20, 12, 17, and 16.Compute.pdfpoblettesedanoree498
Β 
Compare and contrast transmit and receive diversity. Describe how ea.pdf
Compare and contrast transmit and receive diversity. Describe how ea.pdfCompare and contrast transmit and receive diversity. Describe how ea.pdf
Compare and contrast transmit and receive diversity. Describe how ea.pdfpoblettesedanoree498
Β 
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdf
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdfC++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdf
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdfpoblettesedanoree498
Β 
Blood in the femoral artery will flow into what artery next Bl.pdf
Blood in the femoral artery will flow into what artery next Bl.pdfBlood in the femoral artery will flow into what artery next Bl.pdf
Blood in the femoral artery will flow into what artery next Bl.pdfpoblettesedanoree498
Β 
Assume that 96 of ticket holders show up for an airline flight. If .pdf
Assume that 96 of ticket holders show up for an airline flight. If .pdfAssume that 96 of ticket holders show up for an airline flight. If .pdf
Assume that 96 of ticket holders show up for an airline flight. If .pdfpoblettesedanoree498
Β 
Although some male crab spiders find and mate with adult female spide.pdf
Although some male crab spiders find and mate with adult female spide.pdfAlthough some male crab spiders find and mate with adult female spide.pdf
Although some male crab spiders find and mate with adult female spide.pdfpoblettesedanoree498
Β 
7. At October 1, Smithson Enterprises reported owners equity of $.pdf
7. At October 1, Smithson Enterprises reported owners equity of $.pdf7. At October 1, Smithson Enterprises reported owners equity of $.pdf
7. At October 1, Smithson Enterprises reported owners equity of $.pdfpoblettesedanoree498
Β 
5. A repeated measures analysis of variane shows, F(4,20)=14.56. How.pdf
5. A repeated measures analysis of variane shows, F(4,20)=14.56. How.pdf5. A repeated measures analysis of variane shows, F(4,20)=14.56. How.pdf
5. A repeated measures analysis of variane shows, F(4,20)=14.56. How.pdfpoblettesedanoree498
Β 
–PLS write program in c++ thanxLinked List Sorting and Reversing.pdf
–PLS write program in c++ thanxLinked List Sorting and Reversing.pdf–PLS write program in c++ thanxLinked List Sorting and Reversing.pdf
–PLS write program in c++ thanxLinked List Sorting and Reversing.pdfpoblettesedanoree498
Β 
Write a Java program that calculates the distance between two points.pdf
Write a Java program that calculates the distance between two points.pdfWrite a Java program that calculates the distance between two points.pdf
Write a Java program that calculates the distance between two points.pdfpoblettesedanoree498
Β 
Which of the following light waves has the most amount of energyH.pdf
Which of the following light waves has the most amount of energyH.pdfWhich of the following light waves has the most amount of energyH.pdf
Which of the following light waves has the most amount of energyH.pdfpoblettesedanoree498
Β 
What is the wobble position What is the consequence of its pres.pdf
What is the wobble position What is the consequence of its pres.pdfWhat is the wobble position What is the consequence of its pres.pdf
What is the wobble position What is the consequence of its pres.pdfpoblettesedanoree498
Β 
What is an advantage of having homologous chromosomes (compared to h.pdf
What is an advantage of having homologous chromosomes (compared to h.pdfWhat is an advantage of having homologous chromosomes (compared to h.pdf
What is an advantage of having homologous chromosomes (compared to h.pdfpoblettesedanoree498
Β 
What are oncogenic viruses Which of the following groups of viruses.pdf
What are oncogenic viruses  Which of the following groups of viruses.pdfWhat are oncogenic viruses  Which of the following groups of viruses.pdf
What are oncogenic viruses Which of the following groups of viruses.pdfpoblettesedanoree498
Β 
Unlike the biological species concept, the morphospecies concept rel.pdf
Unlike the biological species concept, the morphospecies concept rel.pdfUnlike the biological species concept, the morphospecies concept rel.pdf
Unlike the biological species concept, the morphospecies concept rel.pdfpoblettesedanoree498
Β 
1.) Which macronutrient do we consume in large amounts, but which we.pdf
1.) Which macronutrient do we consume in large amounts, but which we.pdf1.) Which macronutrient do we consume in large amounts, but which we.pdf
1.) Which macronutrient do we consume in large amounts, but which we.pdfpoblettesedanoree498
Β 
11.1.2 Entered Answer Preview 28 28 128 128 At least one of the an.pdf
11.1.2 Entered Answer Preview 28 28 128 128 At least one of the an.pdf11.1.2 Entered Answer Preview 28 28 128 128 At least one of the an.pdf
11.1.2 Entered Answer Preview 28 28 128 128 At least one of the an.pdfpoblettesedanoree498
Β 

More from poblettesedanoree498 (20)

Give examples of two zoonotic diseases. Explain how these zoonotic d.pdf
Give examples of two zoonotic diseases. Explain how these zoonotic d.pdfGive examples of two zoonotic diseases. Explain how these zoonotic d.pdf
Give examples of two zoonotic diseases. Explain how these zoonotic d.pdf
Β 
Create the variables, and methods needed for this classA DicePlay.pdf
Create the variables, and methods needed for this classA DicePlay.pdfCreate the variables, and methods needed for this classA DicePlay.pdf
Create the variables, and methods needed for this classA DicePlay.pdf
Β 
Describe different flow control valves with figures. Include referenc.pdf
Describe different flow control valves with figures. Include referenc.pdfDescribe different flow control valves with figures. Include referenc.pdf
Describe different flow control valves with figures. Include referenc.pdf
Β 
Consider a sample with data values of 10, 20, 12, 17, and 16.Compute.pdf
Consider a sample with data values of 10, 20, 12, 17, and 16.Compute.pdfConsider a sample with data values of 10, 20, 12, 17, and 16.Compute.pdf
Consider a sample with data values of 10, 20, 12, 17, and 16.Compute.pdf
Β 
Compare and contrast transmit and receive diversity. Describe how ea.pdf
Compare and contrast transmit and receive diversity. Describe how ea.pdfCompare and contrast transmit and receive diversity. Describe how ea.pdf
Compare and contrast transmit and receive diversity. Describe how ea.pdf
Β 
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdf
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdfC++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdf
C++ Doubly-Linked ListsThe goal of the exercise is to implement a.pdf
Β 
Blood in the femoral artery will flow into what artery next Bl.pdf
Blood in the femoral artery will flow into what artery next Bl.pdfBlood in the femoral artery will flow into what artery next Bl.pdf
Blood in the femoral artery will flow into what artery next Bl.pdf
Β 
Assume that 96 of ticket holders show up for an airline flight. If .pdf
Assume that 96 of ticket holders show up for an airline flight. If .pdfAssume that 96 of ticket holders show up for an airline flight. If .pdf
Assume that 96 of ticket holders show up for an airline flight. If .pdf
Β 
Although some male crab spiders find and mate with adult female spide.pdf
Although some male crab spiders find and mate with adult female spide.pdfAlthough some male crab spiders find and mate with adult female spide.pdf
Although some male crab spiders find and mate with adult female spide.pdf
Β 
7. At October 1, Smithson Enterprises reported owners equity of $.pdf
7. At October 1, Smithson Enterprises reported owners equity of $.pdf7. At October 1, Smithson Enterprises reported owners equity of $.pdf
7. At October 1, Smithson Enterprises reported owners equity of $.pdf
Β 
5. A repeated measures analysis of variane shows, F(4,20)=14.56. How.pdf
5. A repeated measures analysis of variane shows, F(4,20)=14.56. How.pdf5. A repeated measures analysis of variane shows, F(4,20)=14.56. How.pdf
5. A repeated measures analysis of variane shows, F(4,20)=14.56. How.pdf
Β 
–PLS write program in c++ thanxLinked List Sorting and Reversing.pdf
–PLS write program in c++ thanxLinked List Sorting and Reversing.pdf–PLS write program in c++ thanxLinked List Sorting and Reversing.pdf
–PLS write program in c++ thanxLinked List Sorting and Reversing.pdf
Β 
Write a Java program that calculates the distance between two points.pdf
Write a Java program that calculates the distance between two points.pdfWrite a Java program that calculates the distance between two points.pdf
Write a Java program that calculates the distance between two points.pdf
Β 
Which of the following light waves has the most amount of energyH.pdf
Which of the following light waves has the most amount of energyH.pdfWhich of the following light waves has the most amount of energyH.pdf
Which of the following light waves has the most amount of energyH.pdf
Β 
What is the wobble position What is the consequence of its pres.pdf
What is the wobble position What is the consequence of its pres.pdfWhat is the wobble position What is the consequence of its pres.pdf
What is the wobble position What is the consequence of its pres.pdf
Β 
What is an advantage of having homologous chromosomes (compared to h.pdf
What is an advantage of having homologous chromosomes (compared to h.pdfWhat is an advantage of having homologous chromosomes (compared to h.pdf
What is an advantage of having homologous chromosomes (compared to h.pdf
Β 
What are oncogenic viruses Which of the following groups of viruses.pdf
What are oncogenic viruses  Which of the following groups of viruses.pdfWhat are oncogenic viruses  Which of the following groups of viruses.pdf
What are oncogenic viruses Which of the following groups of viruses.pdf
Β 
Unlike the biological species concept, the morphospecies concept rel.pdf
Unlike the biological species concept, the morphospecies concept rel.pdfUnlike the biological species concept, the morphospecies concept rel.pdf
Unlike the biological species concept, the morphospecies concept rel.pdf
Β 
1.) Which macronutrient do we consume in large amounts, but which we.pdf
1.) Which macronutrient do we consume in large amounts, but which we.pdf1.) Which macronutrient do we consume in large amounts, but which we.pdf
1.) Which macronutrient do we consume in large amounts, but which we.pdf
Β 
11.1.2 Entered Answer Preview 28 28 128 128 At least one of the an.pdf
11.1.2 Entered Answer Preview 28 28 128 128 At least one of the an.pdf11.1.2 Entered Answer Preview 28 28 128 128 At least one of the an.pdf
11.1.2 Entered Answer Preview 28 28 128 128 At least one of the an.pdf
Β 

Recently uploaded

Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxNirmalaLoungPoorunde1
Β 
ENGLISH5 QUARTER4 MODULE1 WEEK1-3 How Visual and Multimedia Elements.pptx
ENGLISH5 QUARTER4 MODULE1 WEEK1-3 How Visual and Multimedia Elements.pptxENGLISH5 QUARTER4 MODULE1 WEEK1-3 How Visual and Multimedia Elements.pptx
ENGLISH5 QUARTER4 MODULE1 WEEK1-3 How Visual and Multimedia Elements.pptxAnaBeatriceAblay2
Β 
_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting Data_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting DataJhengPantaleon
Β 
How to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxHow to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxmanuelaromero2013
Β 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxiammrhaywood
Β 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
Β 
Blooming Together_ Growing a Community Garden Worksheet.docx
Blooming Together_ Growing a Community Garden Worksheet.docxBlooming Together_ Growing a Community Garden Worksheet.docx
Blooming Together_ Growing a Community Garden Worksheet.docxUnboundStockton
Β 
Crayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon ACrayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon AUnboundStockton
Β 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
Β 
Science 7 - LAND and SEA BREEZE and its Characteristics
Science 7 - LAND and SEA BREEZE and its CharacteristicsScience 7 - LAND and SEA BREEZE and its Characteristics
Science 7 - LAND and SEA BREEZE and its CharacteristicsKarinaGenton
Β 
Final demo Grade 9 for demo Plan dessert.pptx
Final demo Grade 9 for demo Plan dessert.pptxFinal demo Grade 9 for demo Plan dessert.pptx
Final demo Grade 9 for demo Plan dessert.pptxAvyJaneVismanos
Β 
Pharmacognosy Flower 3. Compositae 2023.pdf
Pharmacognosy Flower 3. Compositae 2023.pdfPharmacognosy Flower 3. Compositae 2023.pdf
Pharmacognosy Flower 3. Compositae 2023.pdfMahmoud M. Sallam
Β 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
Β 
call girls in Kamla Market (DELHI) πŸ” >ΰΌ’9953330565πŸ” genuine Escort Service πŸ”βœ”οΈβœ”οΈ
call girls in Kamla Market (DELHI) πŸ” >ΰΌ’9953330565πŸ” genuine Escort Service πŸ”βœ”οΈβœ”οΈcall girls in Kamla Market (DELHI) πŸ” >ΰΌ’9953330565πŸ” genuine Escort Service πŸ”βœ”οΈβœ”οΈ
call girls in Kamla Market (DELHI) πŸ” >ΰΌ’9953330565πŸ” genuine Escort Service πŸ”βœ”οΈβœ”οΈ9953056974 Low Rate Call Girls In Saket, Delhi NCR
Β 
Science lesson Moon for 4th quarter lesson
Science lesson Moon for 4th quarter lessonScience lesson Moon for 4th quarter lesson
Science lesson Moon for 4th quarter lessonJericReyAuditor
Β 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxGaneshChakor2
Β 

Recently uploaded (20)

9953330565 Low Rate Call Girls In Rohini Delhi NCR
9953330565 Low Rate Call Girls In Rohini  Delhi NCR9953330565 Low Rate Call Girls In Rohini  Delhi NCR
9953330565 Low Rate Call Girls In Rohini Delhi NCR
Β 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptx
Β 
ENGLISH5 QUARTER4 MODULE1 WEEK1-3 How Visual and Multimedia Elements.pptx
ENGLISH5 QUARTER4 MODULE1 WEEK1-3 How Visual and Multimedia Elements.pptxENGLISH5 QUARTER4 MODULE1 WEEK1-3 How Visual and Multimedia Elements.pptx
ENGLISH5 QUARTER4 MODULE1 WEEK1-3 How Visual and Multimedia Elements.pptx
Β 
_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting Data_Math 4-Q4 Week 5.pptx Steps in Collecting Data
_Math 4-Q4 Week 5.pptx Steps in Collecting Data
Β 
How to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxHow to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptx
Β 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
Β 
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdfTataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
Β 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
Β 
Model Call Girl in Bikash Puri Delhi reach out to us at πŸ”9953056974πŸ”
Model Call Girl in Bikash Puri  Delhi reach out to us at πŸ”9953056974πŸ”Model Call Girl in Bikash Puri  Delhi reach out to us at πŸ”9953056974πŸ”
Model Call Girl in Bikash Puri Delhi reach out to us at πŸ”9953056974πŸ”
Β 
Blooming Together_ Growing a Community Garden Worksheet.docx
Blooming Together_ Growing a Community Garden Worksheet.docxBlooming Together_ Growing a Community Garden Worksheet.docx
Blooming Together_ Growing a Community Garden Worksheet.docx
Β 
Crayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon ACrayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon A
Β 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
Β 
Science 7 - LAND and SEA BREEZE and its Characteristics
Science 7 - LAND and SEA BREEZE and its CharacteristicsScience 7 - LAND and SEA BREEZE and its Characteristics
Science 7 - LAND and SEA BREEZE and its Characteristics
Β 
Final demo Grade 9 for demo Plan dessert.pptx
Final demo Grade 9 for demo Plan dessert.pptxFinal demo Grade 9 for demo Plan dessert.pptx
Final demo Grade 9 for demo Plan dessert.pptx
Β 
Pharmacognosy Flower 3. Compositae 2023.pdf
Pharmacognosy Flower 3. Compositae 2023.pdfPharmacognosy Flower 3. Compositae 2023.pdf
Pharmacognosy Flower 3. Compositae 2023.pdf
Β 
Model Call Girl in Tilak Nagar Delhi reach out to us at πŸ”9953056974πŸ”
Model Call Girl in Tilak Nagar Delhi reach out to us at πŸ”9953056974πŸ”Model Call Girl in Tilak Nagar Delhi reach out to us at πŸ”9953056974πŸ”
Model Call Girl in Tilak Nagar Delhi reach out to us at πŸ”9953056974πŸ”
Β 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
Β 
call girls in Kamla Market (DELHI) πŸ” >ΰΌ’9953330565πŸ” genuine Escort Service πŸ”βœ”οΈβœ”οΈ
call girls in Kamla Market (DELHI) πŸ” >ΰΌ’9953330565πŸ” genuine Escort Service πŸ”βœ”οΈβœ”οΈcall girls in Kamla Market (DELHI) πŸ” >ΰΌ’9953330565πŸ” genuine Escort Service πŸ”βœ”οΈβœ”οΈ
call girls in Kamla Market (DELHI) πŸ” >ΰΌ’9953330565πŸ” genuine Escort Service πŸ”βœ”οΈβœ”οΈ
Β 
Science lesson Moon for 4th quarter lesson
Science lesson Moon for 4th quarter lessonScience lesson Moon for 4th quarter lesson
Science lesson Moon for 4th quarter lesson
Β 
CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptx
Β 

i have a code that runs, but it only lets the player to guess where .pdf

  • 1. i have a code that runs, but it only lets the player to guess where the ships are(which is a one player game with one board). is there a way some one can help turn this game into a player vs computer game (with two boards one for player and one for computer) Please help me. BattleShipGame.java package battleship; import java.util.ArrayList; import java.util.Scanner; 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;
  • 2. 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 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]);
  • 3. 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){
  • 4. 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(); }
  • 5. 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);
  • 6. 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;
  • 7. } 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()){
  • 8. 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;
  • 9. } } 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; } } }
  • 10. } } } } /** * 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 + " "; }
  • 11. 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; } } }
  • 12. 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; }
  • 13. /** * 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;
  • 14. boolean[][] shadows = ocean.getShadow(); if (horizontal){ for (int i=0; i9){okToPlace = false;} else if (shadows[row][column+i]){okToPlace = false;} } } else{ for (int i=0; i9){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 Solution import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.io.*; import java.lang.Integer; import java.util.Vector; import java.net.*; public class Battleship extends JFrame { private static JButton ok = new JButton("OK"),//closes stats menu done =new JButton("Done");//closes options menu private static JFrame statistics= new JFrame("Statistics"),//holds stats options=new JFrame("Options");//holds opts private static JLabel data,//used for stats menu title;//used for options menu private static JPanel stats=new JPanel(),//used for stats menu opts,//used for options menu
  • 15. inputpanel;//for manually inputting ships private static Container b,c,d;//board and input panel private JPanel input;//input bar private static JMenuItem m,pvp,pvc,cvc;//menu items private static String[] cletters = {" ","A","B","C","D","E","F","G","H","I","J"}, //array of letters used for combo boxes cnumbers = {" ","1","2","3","4","5","6","7","8","9","10"}, //array of numbers used for combo boxes ships = {"Carrier","Battleship","Submarine","Destroyer", "Patrol Boat"},//strings used for ship combo box direction = {"Horizontal","Vertical"},//directions level={"Normal", "Ridiculously Hard"}, layout={"Manual","Automatic"}, colors={"Cyan", "Green", "Yellow", "Magenta", "Pink", "Red", "White"}, first={"Player 1", "Player 2", "Random"};//used for options private JComboBox cshi = new JComboBox(ships),//ships cdir = new JComboBox(direction);//directions private static JComboBox aiLevel=new JComboBox(level), shipLayout=new JComboBox(layout), shipColor=new JComboBox(colors), playsFirst=new JComboBox(first);//used //for options menu private JTextField mbar = new JTextField();//message bar private static int enemy=1, i,j,//counters length=5, you=0, prevcolor=0,//index of previous color prevFirst=0, prevLayout=0, prevLevel=0,//tracks changes in corresponding comboboxes ready=0, sindex=0,//stores index of array dindex=0;//direction private static Player players[]=new Player[2]; private static JButton deploy=new JButton("DEPLOY"); private static int w=0,a=0,s=0,t=0,e=0;//counters to track the use of all ships private static String[][] shiphit=new String[10][10]; private static String user,user2; private static Color[] color={Color.cyan,Color.green,Color.yellow,Color.magenta, Color.pink, Color.red, Color.white}; private static Object selectedValue=" ", gametype; private static BattleshipClient me; private static boolean gameover=false; public Battleship() { setTitle("Battleship"); setDefaultCloseOperation(EXIT_ON_CLOSE); setJMenuBar(createMenuBar()); setResizable(false); //gets user to input name user=JOptionPane.showInputDialog("Enter your name."); int dummy=0;
  • 16. while (((user==null)||(user.equals("")))&&(dummy<3)) { user=JOptionPane.showInputDialog("You have to input something."); if ((user!=null)&&(!user.equals(""))) dummy=4; else dummy++; } if (dummy==3) { JOptionPane.showMessageDialog(null,"Since you're having trouble inp" +"utting your name, I'll just call you stupid.","",JOptionPane.INFORMATION_MESSAGE); user="Stupid"; } players[you]=new Player (user); players[enemy]=new Player ("Computer"); b=getContentPane(); b.add(setBoard(you),BorderLayout.CENTER); c=getContentPane(); d = getContentPane(); inputpanel=shipinput(); d.add(inputpanel,BorderLayout.NORTH); pack(); setVisible(true); } public static boolean getGameOver() { return gameover; } public static void setGameOver(boolean b) { gameover=b; } //method to determine who plays first public void whoGoesFirst() { int x=0; if (playsFirst.getSelectedIndex()!=2) { if (playsFirst.getSelectedIndex()!=you) flipYou(); players[playsFirst.getSelectedIndex()].getTimer().start(); x=playsFirst.getSelectedIndex(); } else { int rand=(int)(Math.random()*2); JOptionPane.showMessageDialog(null,players[rand].getUser()+" will " +"go first.","",JOptionPane.PLAIN_MESSAGE); if (rand!=you) flipYou(); players[rand].getTimer().start(); x=rand; } if ((!players[x].getUser().equals("Computer"))||(!players[x].getUser().equals("CPU1"))||(!players [x].getUser().equals("CPU2"))) players[x].setMove(true); } //returns ship color, as selected by the user public static Color getColor() { return (color[shipColor.getSelectedIndex()]); } //asks if two players are playing on the same computer or over the web public static boolean isLocal() { if ((gametype==pvp)&&(selectedValue.equals("Local"))) return true; else return false; } public static void flipYou() { if (you==1) { you=0; enemy=1; } else { you=1; enemy=0; } } //determines whether or not is shipLayout is set to automatic public static boolean isAutoSet() { if (shipLayout.getSelectedIndex()==0) return false; else return true; } //variable that determines whether
  • 17. or not a carrier has been placed public static int getW() { return w; } //variable that determines whether or not a battleship has been placed public static int getA() { return a; } //variable that determines whether or not a submarine has been placed public static int getS() { return s; } //variable that determines whether or not a destroyer has been placed public static int getT() { return t; } //variable that determines whether or not a patrol boat has been placed public static int getE() { return e; } public static int getReady() { return ready; } public static JFrame getStatistics() { return statistics; } public static void setData(JLabel x) { data=x; } public static JLabel getData() { return data; } public static JPanel getStats() { return stats; } public static void setDeploy(boolean k) { deploy.setEnabled(k); } public static Player getPlayers(int x) { return players[x]; } public static String getDirection(int i) { return direction[i]; } public static String getCletters(int i) { return cletters[i]; } public static String getShips(int i) { return ships[i]; } public static String getCnumbers(int i) { return cnumbers[i]; } public static int getSIndex() { return sindex; } public static int getDIndex() { return dindex; } public static int getYou() { return you; } public static int getEnemy() { return enemy; } public static void setYou(int x) { you=x; } public static void setEnemy(int x) { enemy=x; } //creates Game menu and submenus public JMenuBar createMenuBar() { JMenu menu;//menu // create the menu bar JMenuBar menuBar = new JMenuBar(); // build the Game menu menu = new JMenu("Game"); menuBar.add(menu); m = new JMenu("New Game"); menu.add(m); //submenu of New Game GameListener stuff = new GameListener(); pvp = new JMenuItem("Player vs. Player"); pvp.addActionListener(stuff); m.add(pvp); pvc = new JMenuItem("Player vs. Computer"); pvc.addActionListener(stuff); m.add(pvc); cvc = new JMenuItem("Computer vs. Computer"); cvc.addActionListener(stuff); m.add(cvc); m = new JMenuItem("Rules"); m.addActionListener(new RulesListener()); menu.add(m); m = new JMenuItem("Statistics"); m.addActionListener(new StatsListener()); menu.add(m); m = new JMenuItem("Options"); m.addActionListener(new
  • 18. OptionsListener()); menu.add(m); m = new JMenuItem("Exit"); m.addActionListener(new ExitListener()); menu.add(m); return menuBar; } //creates panels that used to place ships public JPanel shipinput() { input= new JPanel(); mbar.setText("Select a ship, its front position and direction."); mbar.setFont(new Font("Courier New", Font.BOLD, 14)); mbar.setEditable(false); //input.add(mbar); cshi.setSelectedIndex(0); cshi.addActionListener(new ShipsListener()); TitledBorder title;//used for titles around combo boxes title = BorderFactory.createTitledBorder("Ships"); cshi.setBorder(title); input.add(cshi); cdir.setSelectedIndex(0); cdir.addActionListener(new DirectListener()); input.add(cdir); title = BorderFactory.createTitledBorder("Direction"); cdir.setBorder(title); deploy.setEnabled(false); deploy.addActionListener(new DeployListener()); input.add(deploy); return input; } //creates board for manual ship placement public JPanel setBoard(int n) { players[n].setMyBoard(new JPanel(new GridLayout(11,11)));//panel to store board JTextField k; for (i=0;i<11;i++) { for (j=0;j<11;j++) { if ((j!=0)&&(i!=0)) { players[n].getBboard(i-1,j-1).addActionListener(new BoardListener()); players[n].getMyBoard().add(players[n].getBboard(i-1,j-1)); } if (i==0) { if (j!=0) { //used to display row of numbers k= new JTextField(Battleship.getCnumbers(j)); k.setEditable(false); k.setHorizontalAlignment((int)JFrame.CENTER_ALIGNMENT); } else { //used to display column of numbers k= new JTextField(); k.setEditable(false); } players[n].getMyBoard().add(k); } else if (j==0) { k= new JTextField(Battleship.getCletters(i)); k.setEditable(false); k.setHorizontalAlignment((int)JFrame.CENTER_ALIGNMENT); players[n].getMyBoard().add(k); } } } return players[n].getMyBoard(); } //creates board and automatically places ship public JPanel autoBoard(int u,int t) { players[u].setGBoard(new JPanel(new GridLayout(11,11)));//panel to store board
  • 19. JTextField k; if (!players[u].getUser().equals("Unknown")) for (i=0;i<5;i++) { players[u].setBoats(i,players[u].getBoats(i).compinput(i,u)); } for (i=0;i<11;i++) { for (j=0;j<11;j++) { if ((j!=0)&&(i!=0)) { if ((players[u].getUser().equals("Computer"))||(isLocal())) { players[u].getBboard(i-1,j-1).addActionListener(new AttackListener()); } else if ((players[t].getUser().equals("Computer"))||(players[t].getUser().equals("CPU1"))||(players[t]. getUser().equals("CPU2"))||(players[t].getUser().equals("Unknown"))) { if (players[u].getHitOrMiss(i-1,j-1)) players[u].setBboard(i-1,j-1,getColor()); } else { players[u].getBboard(i-1,j-1).addActionListener(new InternetListener()); } players[u].getGBoard().add(players[u].getBboard(i- 1,j-1)); } if (i==0) { if (j!=0) { //used to display row of numbers k= new JTextField(Battleship.getCnumbers(j)); k.setEditable(false); k.setHorizontalAlignment((int)JFrame.CENTER_ALIGNMENT); } else { //used to display column of numbers k= new JTextField(); k.setEditable(false); } players[u].getGBoard().add(k); } else if (j==0) { k= new JTextField(Battleship.getCletters(i)); k.setEditable(false); k.setHorizontalAlignment((int)JFrame.CENTER_ALIGNMENT); players[u].getGBoard().add(k); } } } return players[u].getGBoard(); } //Listener for combo boxes used to layout ships private class ShipsListener implements ActionListener { public void actionPerformed(ActionEvent v) { sindex=cshi.getSelectedIndex(); if (players[you].getBoats(sindex)!=null)
  • 20. cdir.setSelectedIndex(players[you].getBoats(sindex).getDirect()); switch (sindex) { case 0: length=5; break; case 1: length=4; break; case 2: length=3; break; case 3: length=3; break; case 4: length=2; break; } if (players[you].getBoats(sindex) != null) { Ship boat=new Ship(ships[sindex],players[you].getBoats(sindex).getDirect() ,length,players[you].getBoats(sindex).getX(),players[you].getBoats(sindex).getY()); players[you].getBoats(sindex).clearship(); players[you].setBoats(sindex,boat); players[you].getBoats(sindex).placeship(); } } } //Listener for the Direction combo box private class DirectListener implements ActionListener { public void actionPerformed(ActionEvent v) { dindex = cdir.getSelectedIndex(); if (players[you].getBoats(sindex) != null) { Ship boat=new Ship(ships[sindex],dindex,players[you].getBoats(sindex).getLength(), players[you].getBoats(sindex).getX(),players[you].getBoats(sindex).getY()); players[you].getBoats(sindex).clearship(); players[you].setBoats(sindex,boat); players[you].getBoats(sindex).placeship(); } } } //Listener for the buttons on the board private class BoardListener implements ActionListener { public void actionPerformed(ActionEvent v) { if (ready==0) { if (players[you].getBoats(sindex)!=null) players[you].getBoats(sindex).clearship(); Object source = v.getSource(); outer: for (i=0;i<10;i++) { for (j=0;j<10;j++) { if (source==players[you].getBboard(i,j)) { switch (sindex) { case 0: { if (w==0) w++; } break;
  • 21. case 1: { if (a==0) a++; } break; case 2: { if (s==0) s++; } break; case 3: { if (t==0) t++; } break; case 4: { if (e==0) e++; } break; } players[you].setBoats(sindex,new Ship(ships[sindex],dindex,length,i,j)); break outer; } } } players[you].getBoats(sindex).placeship(); } } } //creates a panel that tells whose board is which private JPanel whoseBoard() { JPanel panel=new JPanel(new BorderLayout()); panel.add(new JLabel(players[you].getUser()+"'s Board",SwingConstants.LEFT),BorderLayout.WEST); panel.add(new JLabel(players[enemy].getUser()+"'s Board",SwingConstants.RIGHT),BorderLayout.EAST); return panel; } //Listener for exit choice on Game menu private class ExitListener implements ActionListener { public void actionPerformed(ActionEvent e) { int r= JOptionPane.showConfirmDialog(null,"Are you sure you would l" +"ike to exit Battleship?", "Exit?", JOptionPane.YES_NO_OPTION); if (r==0) System.exit(0); } } //listener for New Game submenu private class GameListener implements ActionListener { public void actionPerformed(ActionEvent e) { int q= JOptionPane.showConfirmDialog(null,"Are you sure you would l" +"ike to start a new game?", "New Game?", JOptionPane.YES_NO_OPTION); if (q==0) { //resets variables b.removeAll(); c.removeAll(); d.removeAll();
  • 22. you=0; enemy=1; ready=0; if (players[you].getTimer()!=null) if (players[you].getTimer().isRunning()) players[you].getTimer().stop(); if (players[enemy].getTimer()!=null) if (players[enemy].getTimer().isRunning()) players[enemy].getTimer().stop(); gametype = e.getSource(); if (gametype==pvp) { if (!selectedValue.equals("no server")) { String[] possibleValues = { "Local", "Online"}; selectedValue = JOptionPane.showInputDialog(null, "Choose one", "Input", JOptionPane.INFORMATION_MESSAGE, null, possibleValues, possibleValues[0]); } if (!players[you].getUser().equals("CPU1")) { if (players[you].getUser().equals("Stupid")) { int w=JOptionPane.showConfirmDialog(null,"Would you" +" like to try inputting your name again?","", JOptionPane.YES_NO_OPTION); if (w==JOptionPane.YES_OPTION) { user=JOptionPane.showInputDialog("Enter your name."); int dummy=0; while (((user==null)||(user.equals("")))&&(dummy<3)) { user=JOptionPane.showInputDialog("You have to input something."); if ((user!=null)&&(!user.equals(""))) dummy=4; else dummy++; } if (dummy==3) { JOptionPane.showMessageDialog(null,"Still a" +"cting stupid. Oh well, we'll run with it." ,"",JOptionPane.INFORMATION_MESSAGE); user="Stupid"; } else JOptionPane.showMessageDialog(null,"That wasn't" +" so hard now, was it?","YEAH!", JOptionPane.INFORMATION_MESSAGE); } }
  • 23. players[you]=new Player (players[you].getUser()); } else players[you]=new Player (user); if (selectedValue.equals("Online")) { players[enemy]=new Player ("Unknown"); if (!isAutoSet()) { b.add(setBoard(you),BorderLayout.CENTER); deploy.setEnabled(false); d.add(inputpanel,BorderLayout.NORTH); } else { b.add(autoBoard(you,enemy),BorderLayout.WEST); c.add(autoBoard(enemy,you),BorderLayout.EAST); ready=1; } } else { //gets user to input name if((players[enemy].getUser().equals("Computer"))||(players[enemy].getUser().equals("CPU2") )||(players[enemy].getUser().equals("Unknown"))) { user2=JOptionPane.showInputDialog("Enter your name."); while ((user2==null)||(user2.equals(""))) { user2=JOptionPane.showInputDialog("You have to input something."); } } else user2=players[enemy].getUser(); players[enemy]=new Player (user2); b.add(autoBoard(you,enemy),BorderLayout.WEST); c.add(autoBoard(enemy,you),BorderLayout.EAST); d.add(whoseBoard(),BorderLayout.NORTH); whoGoesFirst(); ready=1; } //ready=1; } else if (gametype==pvc)//Player vs Computer { if (!players[you].getUser().equals("CPU1")) { if (players[you].getUser().equals("Stupid")) { int w=JOptionPane.showConfirmDialog(null,"Would you" +" like to try inputting your name again?","", JOptionPane.YES_NO_OPTION); if (w==JOptionPane.YES_OPTION) { user=JOptionPane.showInputDialog("Enter your name.");
  • 24. int dummy=0; while (((user==null)||(user.equals("")))&&(dummy<3)) { user=JOptionPane.showInputDialog("You have to input something."); if ((user!=null)&&(!user.equals(""))) dummy=4; else dummy++; } if (dummy==3) { JOptionPane.showMessageDialog(null,"Still a" +"cting stupid. Oh well, we'll run with it." ,"",JOptionPane.INFORMATION_MESSAGE); user="Stupid"; } else JOptionPane.showMessageDialog(null,"That wasn't" +" so hard now, was it?","YEAH!", JOptionPane.INFORMATION_MESSAGE); } } players[you]=new Player (players[you].getUser()); } else players[you]=new Player (user); players[enemy]=new Player ("Computer"); if (!isAutoSet()) { b.add(setBoard(you),BorderLayout.CENTER); deploy.setEnabled(false); d.add(inputpanel,BorderLayout.NORTH); } else { b.add(autoBoard(you,enemy),BorderLayout.WEST); c.add(autoBoard(enemy,you),BorderLayout.EAST); whoGoesFirst (); } } else if (gametype==cvc)//Computer vs Computer { mbar.setText("Battleship Demo"); mbar.setEditable(false); d.add(mbar,BorderLayout.NORTH); players[you]=new Player ("CPU1"); players[enemy]=new Player ("CPU2"); b.add(autoBoard(you,enemy),BorderLayout.WEST); c.add(autoBoard(enemy,you),BorderLayout.EAST); whoGoesFirst(); }
  • 25. pack(); repaint(); } } } //Listener for Rules menu private class RulesListener implements ActionListener { public void actionPerformed(ActionEvent e) { } } //Listener for ok button in statistics menu private class OkListener implements ActionListener { public void actionPerformed(ActionEvent e) { statistics.dispose(); } } //Listener for Stats menu private class StatsListener implements ActionListener { // public void setup() { stats=new JPanel(); ok.addActionListener(new OkListener()); statistics.setSize(300,300); statistics.setResizable(false); statistics.getContentPane().add(ok,BorderLayout.SOUTH); //statistics.setLocation(700,200); } public void actionPerformed(ActionEvent e) { if (data==null) setup(); else stats.removeAll(); stats.setLayout(new GridLayout(6,3)); data=new JLabel(""); stats.add(data); data=new JLabel("Player 1",SwingConstants.CENTER); stats.add(data); data=new JLabel("Player 2",SwingConstants.CENTER); stats.add(data); data=new JLabel("Names"); stats.add(data); if (you == 0) { data=new JLabel(players[you].getUser(),SwingConstants.CENTER); stats.add(data); data=new JLabel(players[enemy].getUser(),SwingConstants.CENTER); stats.add(data); data=new JLabel("Shots Taken"); stats.add(data); data=new JLabel(Integer.toString(players[you].getShots()),SwingConstants.CENTER); stats.add(data); data=new JLabel(Integer.toString(players[enemy].getShots()),SwingConstants.CENTER); stats.add(data); data=new JLabel("Hits"); stats.add(data); data=new JLabel(Integer.toString(players[you].getHits()),SwingConstants.CENTER); stats.add(data); data=new JLabel(Integer.toString(players[enemy].getHits()),SwingConstants.CENTER); stats.add(data); data=new JLabel("Shot Accuracy"); stats.add(data); data=new
  • 26. JLabel(players[you].getAcc(),SwingConstants.CENTER); stats.add(data); data=new JLabel(players[enemy].getAcc(),SwingConstants.CENTER); stats.add(data); data=new JLabel("Ships Left"); stats.add(data); data=new JLabel(Integer.toString(players[you].getShipsLeft()),SwingConstants.CENTER); stats.add(data); data=new JLabel(Integer.toString(players[enemy].getShipsLeft()),SwingConstants.CENTER); stats.add(data); } else { data=new JLabel(players[enemy].getUser(),SwingConstants.CENTER); stats.add(data); data=new JLabel(players[you].getUser(),SwingConstants.CENTER); stats.add(data); data=new JLabel("Shots Taken"); stats.add(data); data=new JLabel(Integer.toString(players[enemy].getShots()),SwingConstants.CENTER); stats.add(data); data=new JLabel(Integer.toString(players[you].getShots()),SwingConstants.CENTER); stats.add(data); data=new JLabel("Hits"); stats.add(data); data=new JLabel(Integer.toString(players[enemy].getHits()),SwingConstants.CENTER); stats.add(data); data=new JLabel(Integer.toString(players[you].getHits()),SwingConstants.CENTER); stats.add(data); data=new JLabel("Shot Accuracy"); stats.add(data); data=new JLabel(players[enemy].getAcc(),SwingConstants.CENTER); stats.add(data); data=new JLabel(players[you].getAcc(),SwingConstants.CENTER); stats.add(data); data=new JLabel("Ships Left"); stats.add(data); data=new JLabel(Integer.toString(players[enemy].getShipsLeft()),SwingConstants.CENTER); stats.add(data); data=new JLabel(Integer.toString(players[you].getShipsLeft()),SwingConstants.CENTER); stats.add(data); } statistics.getContentPane().add(stats); statistics.pack(); statistics.setVisible(true); } } //Listener for Deploy Button private class DeployListener implements ActionListener { public void actionPerformed(ActionEvent v) { int r= JOptionPane.showConfirmDialog(null,"Are you sure you
  • 27. would l" +"ike to deploy your ships?", "Deploy Ships?", JOptionPane.YES_NO_OPTION); if (r==0) { w=0; a=0; s=0; t=0; e=0; d.remove(input); b.add(players[you].getMyBoard(),BorderLayout.WEST); ready=1; c.add(autoBoard(enemy,you),BorderLayout.EAST); d.add(new JPanel(),BorderLayout.CENTER); if (!selectedValue.equals("Online")) whoGoesFirst(); pack(); repaint(); } } } //Listener for Options menu public class OptionsListener implements ActionListener { public void actionPerformed(ActionEvent e) { if (opts==null) setup(); else options.setVisible(true); } public void setup() { opts=new JPanel(new GridLayout(4,2)); title=new JLabel("Computer AI"); opts.add(title); aiLevel.setSelectedIndex(0); opts.add(aiLevel); title=new JLabel("Ship Layout"); opts.add(title); shipLayout.setSelectedIndex(0); opts.add(shipLayout); title=new JLabel("Ship Color"); opts.add(title); shipColor.addActionListener(new SColorListener()); shipColor.setSelectedIndex(0); opts.add(shipColor); title=new JLabel("Who Plays First?"); opts.add(title); playsFirst.setSelectedIndex(0); opts.add(playsFirst); options.getContentPane().add(opts,BorderLayout.CENTER); //options.setSize(600,800); options.setResizable(false); done.addActionListener(new DoneListener()); options.getContentPane().add(done,BorderLayout.SOUTH); options.setLocation(200,200); options.pack(); options.setVisible(true); } //Listener for the Colors combo box private class SColorListener implements ActionListener { public void actionPerformed(ActionEvent v) { for (i=0;i<10;i++) for (j=0;j<10;j++) { if (players[you].getBboard(i,j).getBackground()==color[prevcolor]) players[you].setBboard(i,j,color[shipColor.getSelectedIndex()]);
  • 28. if (players[enemy].getBboard(i,j).getBackground() ==color[prevcolor]) players[enemy].setBboard(i,j,color[shipColor.getSelectedIndex()]); } prevcolor=shipColor.getSelectedIndex(); } } //Listener for ok button in statistics menu private class DoneListener implements ActionListener { public void actionPerformed(ActionEvent e) { if ((shipLayout.getSelectedIndex()!=prevLayout)|| (aiLevel.getSelectedIndex()!=prevLevel)|| (playsFirst.getSelectedIndex()!=prevFirst)) { JOptionPane.showMessageDialog(null,"Changes will take"+ " place at the start of a new game.","" ,JOptionPane.PLAIN_MESSAGE); if (shipLayout.getSelectedIndex()!=prevLayout) prevLayout=shipLayout.getSelectedIndex(); if (playsFirst.getSelectedIndex()!=prevFirst) prevFirst=playsFirst.getSelectedIndex(); if (aiLevel.getSelectedIndex()!=prevLevel) prevLevel=aiLevel.getSelectedIndex(); } options.dispose(); } } } public static BattleshipClient getClient() { return me; } public static void main(String[] args){ Battleship gui= new Battleship(); while (gui.isActive()) { while (selectedValue.equals(" ")) { } System.out.println("xenophobia"); System.out.println("Object = "+selectedValue); if (selectedValue.equals("Online")) { selectedValue=" "; while (ready!=1) { } try { me=new BattleshipClient(); if (!me.getServerName().equals("invalid")) { me.sendShips(); while (!gameover) { if (!players[you].getMove()) { try { me.listen(); } catch (IOException e){ System.out.println("Aw naw."); } } while (players[you].getMove()) { } me.results();
  • 29. } } else { b.removeAll(); c.removeAll(); d.removeAll(); players[you]=new Player (user); players[enemy]=new Player ("Computer"); b.add(gui.setBoard(you),BorderLayout.CENTER); inputpanel=gui.shipinput(); d.add(inputpanel,BorderLayout.NORTH); gui.pack(); gui.repaint(); } } catch (IOException e) { System.out.println("You Suck"); } } } //System.out.println("okay"); } } /*http://java.sun.com/docs/books/tutorial/uiswing/learn/example1.html http://java.sun.com/docs/books/tutorial/uiswing/events/actionlistener.html http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JMenuItem.html http://java.sun.com/j2se/1.4.2/docs/api/ http://www.cs.princeton.edu/introcs/home/ http://java.sun.com/docs/books/tutorial/networking/overview/index.html JLabels? http://www.hasbro.com/common/instruct/BattleshipAdvancedMission.pdf http://java.sun.com/docs/books/tutorial/uiswing/misc/dnd.html http://java.sun.com/docs/books/tutorial/essential/threads/lifecycle.html synchronization and threads.*/