////To set to cheat mode commit out owner == 1 in gamepiece setShip method to reveal enemy ships during game play.
import java.applet.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.net.URL;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Toolkit;
import javax.swing.border.EtchedBorder;
import java.awt.Color;
public class JFrameExt extends JFrame implements MouseListener, ActionListener {
private JPanel contentPane;
private GameBoard gameBoard;
private GameBoard gameBoard_1;
private BasePanel basePanel;
private AudioClip audioClip[] = new AudioClip[10];
private int boardSize = 100;
private int turn = 0;
private int lastPlay = 0;
private int computerScore = 0;
private int playerScore = 0;
private int gameState = 0;
private int maxShips = 10;
private int shipsSelected = 0;
private ScorePanel scorePanel;
private MessagePanel messagePanel;
private LoadPanel titleScreen;
private int cpuShips;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension d = toolkit.getScreenSize();
JFrameExt frame = new JFrameExt();
frame.setBounds(0, 0, d.width, d.height);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public JFrameExt() {
LoadMusic();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = new JPanel();
contentPane.setBorder(new EtchedBorder(EtchedBorder.LOWERED, new Color(
0, 191, 255), null));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
titleScreen = new LoadPanel();
contentPane.add(titleScreen, BorderLayout.CENTER);
contentPane.repaint();
contentPane.revalidate();
contentPane.validate();
messagePanel = new MessagePanel();
titleScreen.getStart().addActionListener(this);
basePanel = new BasePanel();
scorePanel = new ScorePanel();
scorePanel.getRestart().addActionListener(this);
}
public void LoadMusic() {
try {
URL baseURL = new URL("file:" + System.getProperty("user.dir")
+ "/");
URL completeURL = new URL(baseURL, "battleship.wav");
audioClip[0] = Applet.newAudioClip(completeURL);
audioClip[0].loop();
} catch (Exception e) {
System.out.println("fail");
}
}
public void switchPlayer() {
if (turn == 1) {
turn = 0;
} else {
turn = 1;
cpuPlay();
}
}
public synchronized void cpuPlay() {
Random generator = new Random();
boolean done = false;
while (!done) {
int loc = generator.nextInt(boardSize - 1);
GamePiece gamePiece = gameBoard_1.getLocation(loc);
if (gamePiece.getState() == 0) {
if (gamePiece.getState() == 0) {
if (gamePiece.checkHit()) {
gamePiece.changeState(1);
computerScore++;
messagePanel
.updateMessage("You lost a ship please select a location");
this.repaint();
scorePanel.updateCPUScores(computerScore);
lastPlay = 1;
} else {
gamePiece.changeState(-1);
switchPlayer();
done = true;
this.repaint();
}
}
}
}
}
public void pickShips(GamePiece picked) {
if (picked.getOwner() == 0) {
if (gameBoard_1.pickShips(picked))
shipsSelected++;
if (shipsSelected == maxShips)
gameState++;
}
this.repaint();
}
public void resetGame() {
boardSize = 100;
int dim = 10;
cpuShips = 10;
maxShips = messagePanel.setMaxShips();
if (scorePanel.getLevel() == 0) {
boardSize = 100;
dim = 10;
cpuShips = 10;
} else if (scorePanel.getLevel() == 1) {
boardSize = 144;
dim = 12;
cpuShips = 12;
} else if (scorePanel.getLevel() == 2) {
boardSize = 225;
dim = 15;
cpuShips = 14;
} else {
boardSize = 100;
dim = 10;
}
contentPane.add(messagePanel, BorderLayout.NORTH);
messagePanel.updateMessage("Place Your Ships");
computerScore = 0;
playerScore = 0;
gameState = 0;
shipsSelected = 0;
contentPane.remove(titleScreen);
contentPane.add(basePanel);
contentPane.add(scorePanel, BorderLayout.SOUTH);
revalidate();
repaint();
basePanel.removeAll();
gameBoard = new GameBoard(0, boardSize);
gameBoard_1 = new GameBoard(1, boardSize);
gameBoard.setLayout(new GridLayout(dim, dim, 0, 0));
gameBoard_1.setLayout(new GridLayout(dim, dim, 0, 0));
for (int i = 0; i < boardSize; i++)
gameBoard.getRef(i).addMouseListener(this);
scorePanel.reset();
gameBoard.placeShips(boardSize, cpuShips);
basePanel.add(gameBoard);
basePanel.add(gameBoard_1);
this.revalidate();
updateMessages();
super.repaint();
repaint();
}
public void updateMessages() {
if (gameState == 0) {
messagePanel.updateMessage("Place your ships");
}
if (gameState == 1) {
if (lastPlay == 0) {
if (turn == 0)
messagePanel.updateMessage("players turn pick a location");
if (turn == 1)
messagePanel
.updateMessage("Computer is making a Selection please wait");
}
}
if (gameState == 2) {
if (playerScore == cpuShips) {
messagePanel.updateMessage("You are victorous---GAME OVER");
if (scorePanel.getLevel() == 0)
messagePanel.updateScore(1);
if (scorePanel.getLevel() == 1)
messagePanel.updateScore(2);
if (scorePanel.getLevel() == 3)
messagePanel.updateScore(3);
}
if (computerScore == maxShips)
messagePanel
.updateMessage("You have been defeated---GAME OVER");
}
lastPlay = 0;
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
GamePiece temp;
System.out.println("Frame has a click");
if (playerScore != cpuShips && computerScore != maxShips
&& gameState != 0 && turn == 0)
try {
temp = (GamePiece) e.getSource();
if (temp.getOwner() == turn) {
if (temp.getState() == 0) {
if (temp.checkHit()) {
System.out
.println("it's a bloddy hiot change the freaking message dude");
temp.changeState(1);
messagePanel
.updateMessage("You sunk an enemy ship get an extra turn-- please select a location");
lastPlay = 1;
if (turn == 0) {
playerScore++;
scorePanel.updatePlayerScores(playerScore);
} else
computerScore++;
this.repaint();
super.repaint();
gameBoard.repaint();
gameBoard_1.repaint();
temp.repaint();
} else {
temp.changeState(-1);
switchPlayer();
this.repaint();
super.repaint();
gameBoard.repaint();
gameBoard_1.repaint();
temp.repaint();
}
}
}
} catch (Exception e1) {
}
if (gameState == 0)
pickShips((GamePiece) e.getSource());
if (computerScore == maxShips || playerScore == cpuShips)
gameState = 2;
updateMessages();
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
import javax.swing.JPanel;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class BasePanel extends JPanel implements MouseListener {
public BasePanel() {
setLayout(new GridLayout(2, 5, 0, 0));
}



@Override
public void mouseClicked(MouseEvent e)
{
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}
}
import java.util.Random;
import java.util.Vector;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.ActionListener;
public class GameBoard extends JPanel implements MouseListener {
private Vector <GamePiece> locations = new Vector();
/**
* Create the panel.
*/
public GameBoard(int player,int boardSize)
{
setBorder(null);
setForeground(Color.WHITE);
setLayout(new GridLayout(10, 10, 0, 0));
for(int i =0; i <boardSize; i++)
{
GamePiece gamePieceGenerator0 = new GamePiece(player,i,false);
addLocation(gamePieceGenerator0);
add(gamePieceGenerator0);
}

}
public GamePiece getRef(int i)
{return locations.elementAt(i);}


void addActionListener(ActionListener actionListener) {
// TODO Auto-generated method stub
}


public void addLocation(GamePiece gp)
{
locations.add(gp);
}

public void placeShips(int boardSize,int cpuShips)
{
Random generator = new Random();
for( int i = 0; i < cpuShips;)
{
int loc = generator.nextInt(boardSize);
if(locations.elementAt(loc).getState() == 0 && !locations.elementAt(loc).checkVaild())
{
locations.elementAt(loc).setShip();
i++;
System.out.println("shiped place at location " + loc);
}
}

}


public Boolean pickShips(GamePiece picked)
{


if(picked.getOwner() == 0)
{
if(!locations.elementAt(picked.getIndex()).checkVaild())
{
locations.elementAt(picked.getIndex()).setShip();
this.repaint();
return true;
}
}
return false;
}


public GamePiece getLocation(int index)
{return locations.get(index);}

@Override
public synchronized void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}

}
 
import javax.swing.JPanel;
import java.awt.Color;
import javax.swing.border.LineBorder;
import java.awt.FlowLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class GamePiece extends JPanel implements MouseListener {

private int owner;
private int index;
private int state;
private boolean valid = false;
/**
* Create the panel.
*/

public GamePiece(int player,int indexed,boolean hasShip) {

this.owner = player;
this.index = indexed;
this.state = 0;
this.valid = hasShip;

setForeground(Color.YELLOW);
setBorder(new LineBorder(new Color(64, 64, 64)));
setBackground(Color.CYAN);
if (player == 1)
setBackground(Color.GREEN);
if(valid)
setBackground(Color.WHITE);

setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
}


public void reset()
{

this.state = 0;
this.valid = false;

setBackground(Color.CYAN);
if (owner == 1)
setBackground(Color.GREEN);
}

public int getOwner()
{return owner;}

public boolean checkVaild()
{return valid;}

public int getState()
{return state;}

public void changeState(int newState)
{
if (state == 0)
state = newState;
changeColor();
}

public int getIndex()
{return index;}

public boolean checkHit()
{return valid;}

private void changeColor()
{
if(state == 0)
{setBackground(Color.CYAN);
System.out.println("no color change") ;
}
else
if(state == 1)
{
setBackground(Color.RED);
System.out.println("RED");
}
else
{
setBackground(Color.BLACK);
System.out.println("Black");
}
}

public void setShip()
{
valid = true;
//if(owner == 1)
setBackground(Color.magenta);
this.repaint();
}
@Override
public synchronized void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}
 
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Font;

public class LoadPanel extends JPanel {
private JButton start;
/**
* Create the panel.
*/
public LoadPanel() {
setBackground(new Color(0, 0, 0));
setLayout(new BorderLayout(0, 0));
start = new JButton("start");
start.setFont(new Font("Tahoma", Font.BOLD, 20));
start.setVerticalAlignment(SwingConstants.BOTTOM);
add(start, BorderLayout.SOUTH);

}

public void paintComponent(Graphics g)
{
ImageIcon x;
super.paintComponent(g);
x = new ImageIcon("battleshipfiring.jpg");
x.paintIcon(this, g, 410,110);
}

public JButton getStart(){return start;}

}
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
import java.awt.Color;
import java.awt.FlowLayout;

public class MessagePanel extends JPanel {
private JTextField topMessage;
private JTextField Rank;
private String [] ranks = {"Ensign","Junior Lieutenant","Lieutenant","Commander", "Captain","Rear Admiral","Vice Admiral","Chief Admiral"};
private int score = 0;
private int shipCount = 10;

/**
* Create the panel.
*/
public MessagePanel() {

FlowLayout flowLayout = (FlowLayout) getLayout();
flowLayout.setVgap(0);
flowLayout.setHgap(0);
setBackground(new Color(30, 144, 255));
topMessage = new JTextField();
topMessage.setFont(new Font("Tahoma", Font.BOLD, 18));
topMessage.setText("Place your ships");
topMessage.setEditable(false);
add(topMessage);
topMessage.setColumns(65);
JLabel RankLB = new JLabel("Rank");
RankLB.setHorizontalAlignment(SwingConstants.CENTER);
RankLB.setFont(new Font("Tahoma", Font.BOLD, 20));
add(RankLB);
Rank = new JTextField();
Rank.setFont(new Font("Tahoma", Font.BOLD, 20));
Rank.setHorizontalAlignment(SwingConstants.CENTER);
Rank.setText("Ensign");
add(Rank);
Rank.setColumns(10);
}

public void changeRank()
{
if(score == 0)
{
Rank.setText(ranks[0]);
shipCount = 10;
}
if (score == 1)
{
Rank.setText(ranks[1]);
shipCount = 11;
}
if (score > 2)
{
Rank.setText(ranks[2]);
shipCount =12;
}
if (score > 4)
{
Rank.setText(ranks[3]);
shipCount = 13;
}
if (score > 7)
{
Rank.setText(ranks[4]);
shipCount = 14;
}
if (score > 11)
{
Rank.setText(ranks[5]);
shipCount = 15;
}
}

public int setMaxShips()
{return shipCount;}

public void updateMessage(String messageIn)
{
System.out.println("message in :" + messageIn);
topMessage.setText(messageIn);
}

public void updateScore(int pts)
{
score = score + pts;
changeRank();
}
}
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.DefaultListModel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.JComboBox;
import java.awt.Font;
public class ScorePanel extends JPanel implements MouseListener, ActionListener,ListSelectionListener {
private JTextField displayPlayer;
private JTextField DisplayComputer;
private JButton restart;
private JComboBox<String> comboBox;

/**
* Create the panel.
*/
public ScorePanel() {
setLayout(new GridLayout(2, 1, 0, 0));
setBackground(new Color(30, 144, 255));
JPanel panel_1 = new JPanel();
panel_1.setBackground(new Color(30, 144, 255));
add(panel_1);

JLabel lblNewLabel = new JLabel("Player SCORE");
lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 20));
panel_1.add(lblNewLabel);

displayPlayer = new JTextField();
displayPlayer.setFont(new Font("Tahoma", Font.BOLD, 20));
displayPlayer.setText("0");
panel_1.add(displayPlayer);
displayPlayer.setColumns(10);
DefaultListModel<String> listings = new DefaultListModel<String>();
listings.addElement ("Easy");
listings.addElement("intermedate");
listings.addElement("hard");
JPanel panel = new JPanel();
panel.setBackground(new Color(30, 144, 255));
add(panel);
JLabel lblNewLabel_1 = new JLabel("Computer Score");
lblNewLabel_1.setFont(new Font("Tahoma", Font.BOLD, 20));
panel.add(lblNewLabel_1);
DisplayComputer = new JTextField();
DisplayComputer.setFont(new Font("Tahoma", Font.BOLD, 20));
DisplayComputer.setText("0");
panel.add(DisplayComputer);
DisplayComputer.setColumns(10);
restart = new JButton("restart game");
restart.setFont(new Font("Tahoma", Font.BOLD, 20));
panel.add(restart);
restart.addActionListener(this);
String[] options = {"easy","intermedeate","hard"};
comboBox = new JComboBox<String>(options);
comboBox.setFont(new Font("Tahoma", Font.BOLD, 20));
panel_1.add(comboBox);
}
public int getLevel()
{
return comboBox.getSelectedIndex();
}

public JButton getRestart()
{return restart;}

public void updatePlayerScores(int score)
{
displayPlayer.setText("" + score);
}

public void updateCPUScores(int score)
{
DisplayComputer.setText("" + score);
}


public void reset()
{
displayPlayer.setText("0");
DisplayComputer.setText("0");
}

@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void valueChanged(ListSelectionEvent arg0) {
// TODO Auto-generated method stub
}
}
Battle Ship
Published:

Battle Ship

Game app level

Published: