...

View Full Version : Battleship Help Please



coderhelp
01-27-2013, 07:41 PM
Can anyone help me out?
this code is not placing the ship on the JFrame correctly and the Gameover is not working. it is due Monday morning.thanks



import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;
import javax.swing.JOptionPane;

/*
*
*/
public class GRID extends javax.swing.JFrame {

int MISS = 1;
int ii;
int i;
int SHIP = 6;
private static Image ACpicture;
private static Image Bpicture;
private static Image Dpicture;
private static Image Spicture;
private static Image PBpicture;
int r;
int c;
int row;
int column;
// Initializes Board
private int[][] Player = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
private int[][] Computer = {
{0, 6, 0, 0, 3, 3, 3, 0, 0, 0},
{0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 6, 0, 0, 0, 4, 4, 4, 4, 0},
{0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 2},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 2},
{0, 0, 0, 5, 5, 5, 5, 5, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);

pack();
}// </editor-fold>

public static void main(String args[]) {
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(GRID.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(GRID.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(GRID.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(GRID.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {
new GRID().setVisible(true);
}
});
}

public GRID() {

super("BATTLESHIP");
initComponents();
setBounds(0, 0, 1200, 750);

// Aircraft Carrier JPG
ClassLoader cloader = GRID.class.getClassLoader();
ACpicture = Toolkit.getDefaultToolkit().getImage(cloader.getResource("Aircraft Carrier.jpg"));
prepareImage(ACpicture, this);

// Battleship JPG
Bpicture = Toolkit.getDefaultToolkit().getImage(cloader.getResource("Battleship.jpg"));
prepareImage(Bpicture, this);

// Destroyer JPG
Dpicture = Toolkit.getDefaultToolkit().getImage(cloader.getResource("Destroyer.jpg"));
prepareImage(Dpicture, this);

// Submarine JPG
Spicture = Toolkit.getDefaultToolkit().getImage(cloader.getResource("Submarine.jpg"));
prepareImage(Spicture, this);

// PatrolBoat JPG
PBpicture = Toolkit.getDefaultToolkit().getImage(cloader.getResource("PatrolBoat.jpg"));
prepareImage(PBpicture, this);

int instructions = JOptionPane.showConfirmDialog(null, "Welcome to the "
+ " game of Battleship! \n Would you like to read the "
+ "instructions first?");
if (instructions == JOptionPane.YES_OPTION) {
JOptionPane.showMessageDialog(null, "First, you will input the "
+ "coordinate of one side of an indicated ship and then the"
+ " other end point of the ship. "
+ "\n (A-L) from left to right, and (1-10) from top to bottom"
+ "\n You will do this with all five of your ships. "
+ "\n Second, you will input the"
+ " coordinate in which you would like to fire at. \n You will"
+ " be told whether you have hit or missed the computer's"
+ " ship. \n Third, it is the computer's turn so it will fire"
+ " at you. \n You will be told whether it has hit or missed"
+ " you. \n You will repeat this until you or the comouter"
+ " has sunk all of each other's ships.");
}

// Coordinates and Orientation of ALL 6 SHIPS
do {
int DIR;
do {
// Ask user for coordinates of SHIP
column = (Integer.parseInt(JOptionPane.showInputDialog("Insert the 'x' coordinate in which you \n"
+ " would like to place your ship #" + SHIP))) - 1;
row = (Integer.parseInt(JOptionPane.showInputDialog("Insert the 'y' coordinate in which you \n"
+ " would like to place your ship" + SHIP))) - 1;

// Orientation: Horizontal or Vertical?
Object[] options = {"Horizontal",
"Vertical"};
DIR = JOptionPane.showOptionDialog(null,
"Which way would you \n like to place your ship?",
"Orientation",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, //do not use a custom Icon
options, //the titles of buttons
options[0]); //default button title
} while (!isValid(row, column, DIR, SHIP));
// PLACES SHIP

// SHIP == 6
if (SHIP == 6) {
if (DIR == (JOptionPane.YES_OPTION)) { // YES_OPTION means Horizontal
for (c = column; c < column + 6; c++) {
Player[r][c] = 6;
}
} else {
for (r = row; r <= row + 6; r++) {
Player[r][c] = 6;
}
}
// SHIP == 5
} else if (SHIP == 5) {
if (DIR == (JOptionPane.YES_OPTION)) { // YES_OPTION means Horizontal
for (c = column; c < column + 5; c++) {
Player[r][c] = 5;
}
} else {
for (r = row; r <= row + 5; r++) {
Player[r][c] = 5;
}
}
// SHIP == 4
} else if (SHIP == 4) {
if (DIR == (JOptionPane.YES_OPTION)) { // YES_OPTION means Horizontal
for (c = column; c < column + 4; c++) {
Player[r][c] = 4;
}
} else {
for (r = row; r <= row + 4; r++) {
Player[r][c] = 4;
}
}
// SHIP == 3
} else if (SHIP == 3) {
if (DIR == (JOptionPane.YES_OPTION)) { // YES_OPTION means Horizontal
for (c = column; c < column + 3; c++) {
Player[r][c] = 3;
}
} else {
for (r = row; r <= row + 3; r++) {
Player[r][c] = 3;
}
}
// SHIP == 2
} else {
if (DIR == (JOptionPane.YES_OPTION)) { // YES_OPTION means Horizontal
for (c = column; c < column + 2; c++) {
Player[r][c] = 2;
}
} else {
for (r = row; r <= row + 2; r++) {
Player[r][c] = 2;
}
}
}
SHIP--;

} while (SHIP != 1);
repaint();

// DO WHILE NOT GAMEOVER
do {

// Aks User For Coordinate to Fire At
int fireC = Integer.parseInt(JOptionPane.showInputDialog("Input the 'X'"
+ "Coordinate in which you choose"
+ "to fire at. \n "
+ "(1-0) from Left to Right")) - 1;
int fireR = Integer.parseInt(JOptionPane.showInputDialog("Input the 'Y'"
+ "Coordinate in which you choose"
+ "to fire at. \n "
+ "(1-10) from top to bottom")) - 1;

c = fireR;
r = fireC;
if (Computer[r][c] >= 2) {
JOptionPane.showMessageDialog(null, "YOU HIT THE COMPUTER'S SHIP");
Computer[r][c] *= -1;
} else if (Computer[r][c] == 0) {
JOptionPane.showMessageDialog(null, "YOU MISSED THE COMPUTER'S SHIP");
Computer[r][c] = MISS;
} else {
JOptionPane.showMessageDialog(null, "YOU ALREADY FIRED THERE");
}
repaint();

if (GAMEOVER(Player)) {
JOptionPane.showMessageDialog(null, "YOU WON");
} else {

// COMPUTER ENTERS COORDINATES AND FIRES
Random generator = new Random();
int cfirec = generator.nextInt(10);
int cfirer = generator.nextInt(10);
if (Player[r][c] >= 2) {
Player[r][c] *= -1;
} else if (Player[r][c] == 0) {
} else {
}


}
} while (!GAMEOVER(Computer));
}

// CHECKING SHIPs
private boolean isValid(int r, int c, int DIR, int SHIP) {
if (DIR == JOptionPane.YES_NO_OPTION) {
if (r < 0 || (r + SHIP >= 9)) {
return false;
} else {
return true;
}
} else { // (Vert)
if (c < 0 || (c + SHIP >= 9)) {
return false;
} else {
return true;
}
}
}
// CHECKS FOR GAMEOVER
private boolean GAMEOVER(int[][] G) {
for (int rows = 0; rows < 10; rows++) {
for (int columns = 0; columns < 10; columns++) {
if (G[r][c] > 1) {
return false;
}
}
}
return true;
}

public void paint(Graphics g) {
super.paint(g); // call the jframe paint
PaintBoard(g); // call the tictactoe paintboard
}
// Variables declaration - do not modify
// End of variables declaration

private void PaintBoard(Graphics g) {

// Left Box
g.drawLine(40, 100, 550, 100);
g.drawLine(40, 100, 40, 610);
g.drawLine(550, 100, 550, 610);
g.drawLine(40, 610, 550, 610);

// Right Box
g.drawLine(650, 100, 1160, 100);
g.drawLine(650, 100, 650, 610);
g.drawLine(650, 610, 1160, 610);
g.drawLine(1160, 100, 1160, 610);

// Left Box Grid Up/Down
g.drawLine(91, 100, 91, 610);
g.drawLine(142, 100, 142, 610);
g.drawLine(193, 100, 193, 610);
g.drawLine(244, 100, 244, 610);
g.drawLine(295, 100, 295, 610);
g.drawLine(346, 100, 346, 610);
g.drawLine(397, 100, 397, 610);
g.drawLine(448, 100, 448, 610);
g.drawLine(499, 100, 499, 610);

// Right Box Grid Up/Down
g.drawLine(701, 100, 701, 610);
g.drawLine(752, 100, 752, 610);
g.drawLine(803, 100, 803, 610);
g.drawLine(854, 100, 854, 610);
g.drawLine(905, 100, 905, 610);
g.drawLine(956, 100, 956, 610);
g.drawLine(1007, 100, 1007, 610);
g.drawLine(1058, 100, 1058, 610);
g.drawLine(1109, 100, 1109, 610);

// Left Box Left/Right
g.drawLine(40, 151, 550, 151);
g.drawLine(40, 202, 550, 202);
g.drawLine(40, 253, 550, 253);
g.drawLine(40, 304, 550, 304);
g.drawLine(40, 355, 550, 355);
g.drawLine(40, 406, 550, 406);
g.drawLine(40, 457, 550, 457);
g.drawLine(40, 508, 550, 508);
g.drawLine(40, 559, 550, 559);

// Right Box Left/Right
g.drawLine(650, 151, 1160, 151);
g.drawLine(650, 202, 1160, 202);
g.drawLine(650, 253, 1160, 253);
g.drawLine(650, 304, 1160, 304);
g.drawLine(650, 355, 1160, 355);
g.drawLine(650, 406, 1160, 406);
g.drawLine(650, 457, 1160, 457);
g.drawLine(650, 508, 1160, 508);
g.drawLine(650, 559, 1160, 559);

// Rectangle @ Bottom
g.drawRect(141, 630, 919, 100);

// Letters For Coordinates Left
g.drawString("A", 62, 95);
g.drawString("B", 113, 95);
g.drawString("C", 164, 95);
g.drawString("D", 215, 95);
g.drawString("E", 266, 95);
g.drawString("F", 317, 95);
g.drawString("G", 368, 95);
g.drawString("H", 419, 95);
g.drawString("I", 470, 95);
g.drawString("J", 521, 95);

// Letter For Coordinates Right
g.drawString("A", 672, 95);
g.drawString("B", 733, 95);
g.drawString("C", 774, 95);
g.drawString("D", 825, 95);
g.drawString("E", 876, 95);
g.drawString("F", 927, 95);
g.drawString("G", 978, 95);
g.drawString("H", 1029, 95);
g.drawString("I", 1080, 95);
g.drawString("J", 1131, 95);

// Number For Coordinate Lefy
g.drawString("1", 30, 130);
g.drawString("2", 30, 181);
g.drawString("3", 30, 232);
g.drawString("4", 30, 283);
g.drawString("5", 30, 334);
g.drawString("6", 30, 385);
g.drawString("7", 30, 436);
g.drawString("8", 30, 487);
g.drawString("9", 30, 538);
g.drawString("10", 23, 589);

//Number For Coordinate Right
g.drawString("1", 640, 130);
g.drawString("2", 640, 181);
g.drawString("3", 640, 232);
g.drawString("4", 640, 283);
g.drawString("5", 640, 334);
g.drawString("6", 640, 385);
g.drawString("7", 640, 436);
g.drawString("8", 640, 487);
g.drawString("9", 640, 538);
g.drawString("10", 633, 589);

// "BATTLESHIP
g.drawString("BATTLESHIP", 563, 50);
g.drawString("YOUR SHIPS", 259, 75);
g.drawString("YOUR SHOTS", 867, 75);

// Insert Image

// Inset # Hits to Sink
// Aircraft Carrier
g.drawImage(ACpicture, 185, 637, 100, 40, null);
g.drawString("AIRCRAFT CARRIER", 185, 645);
g.setColor(Color.red);
g.fillOval(350, 650, 10, 10);
g.fillOval(370, 650, 10, 10);
g.fillOval(390, 650, 10, 10);
g.fillOval(410, 650, 10, 10);
g.fillOval(430, 650, 10, 10);
g.fillOval(450, 650, 10, 10);

// Battleship
g.setColor(Color.black);
g.drawImage(Bpicture, 725, 632, 150, 47, null);
g.drawString("BATTLESHIP", 700, 645);
g.setColor(Color.red);
g.fillOval(900, 650, 10, 10);
g.fillOval(920, 650, 10, 10);
g.fillOval(940, 650, 10, 10);
g.fillOval(960, 650, 10, 10);
g.fillOval(980, 650, 10, 10);


// Destroyer
g.setColor(Color.black);
g.drawImage(Dpicture, 185, 680, 100, 50, null);
g.drawString("DESTROYER", 185, 685);
g.setColor(Color.red);
g.fillOval(350, 705, 10, 10);
g.fillOval(370, 705, 10, 10);
g.fillOval(390, 705, 10, 10);
g.fillOval(410, 705, 10, 10);


// Submarine
g.setColor(Color.black);
g.drawString("SUBMARINE", 500, 680);
g.setColor(Color.red);
g.fillOval(625, 705, 10, 10);
g.fillOval(645, 705, 10, 10);
g.fillOval(665, 705, 10, 10);
g.drawImage(Spicture, 485, 680, 100, 50, null);

// Patrol Boat
g.setColor(Color.black);
g.drawImage(PBpicture, 725, 685, 100, 45, null);
g.drawString("PATROL BOAT", 700, 685);
g.setColor(Color.red);
g.fillOval(900, 705, 10, 10);
g.fillOval(920, 705, 10, 10);



// Places A BLACK DOT Where There Is A SHIP

// COLORS LEFT GRID FOR SHIPS
for (r = 0; r < 10; r++) {
for (c = 0; c < 10; c++) {
if (Player[r][c] > 0) {
g.setColor(Color.black);
g.fillOval(r * 51 + 49, c * 51 - 11 + 120, 36, 36);
} else if (Player[r][c] > 0) {
g.setColor(Color.red);
g.fillOval(r * 51 + 49, c * 51 - 11 + 120, 36, 36);
}
}

// COLORS GRID ON RIGHT FOR HIT OR MISS
for (r = 0; r < 10; r++) {
for (c = 0; c < 10; c++) {
if (Computer[r][c] < 0) {
g.setColor(Color.red);
g.fillOval(r * 51 + 655, c * 51 - 11 + 120, 36, 36);
} else if (Computer[r][c] == 1) {
g.setColor(Color.white);
g.fillOval(r * 51 + 655, c * 51 - 11 + 120, 36, 36);
}

}
}
}
}
}

vinyl-junkie
01-27-2013, 09:34 PM
Do NOT post the same request in a new thread. I understand that you would like help. However, this isn't the way to go about it.

CF members - Please respond to this member's request for help in this thread (http://www.codingforums.com/showthread.php?t=286498) instead.

This thread is closed.



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum