Tablero Grafico
Publicado por Elena (1 intervención) el 29/12/2009 23:43:48
Buenas!!
Tengo una duda que no se como resolver... Necesito hacer dos tableros gráficos, para que jueguen el usuario y la computadora en el juego Hundir la Flota, pero, no se como hacer que los tableros puedan NO ser cuadrados (es decir, que puedan ser de 12x10, 13x15 etcc). Os dejo el código de la clase Tablero Grafico en el que se instancia el tamaño de los otros dos tableros que voy a usar (son clases hijo de la clase principal que expongo a continuacion).
MUCHAS GRACIAS!
import java.awt.*;
import java.util.*;
import java.io.*;
//GRAPHIC CLASS OF THE TABLERO
abstract public class GTablero extends JPanel
{
//Attributes
public Juego juegoElena; //Reference to the game, like this the gtablero know where is it playing
public JButton [][] buttons; //All the buttons
public Tablero panel; //The tablero
public int tamano; //The size of the tableros
//Panels
public JPanel pnlTitle; //The panel where appear the name and the turn of the player
public JPanel pnlButtons;
//Labels
public JLabel lblNombre;
public JLabel lblTurn;
public boolean canHit; //Control if is his turn or not
//Reference to a object and variable that the tablero should know when the user is putting the flota
public JButton btnBarco;
public int iPosition;
static final int HORIZONTAL=0;
static final int VERTICAL=1;
//BEHAVIORS
//CONSTRUCTOR GIVING THE SIZE OF THE BOARD
public GTablero(Juego inputJuego, int inputTam)
{
juegoElena=inputJuego;
tamano=inputTam;
canHit=true;
setTitle();
}
public GTablero(Juego inputJuego, String inputNombre, int inputTam)
{
juegoElena=inputJuego;
tamano=inputTam;
canHit=true;
setTitle();
setNombre(inputNombre);
}
public void setTitle()
{
//Create the space that we need for the objects
pnlTitle=new JPanel();
lblNombre=new JLabel();
lblTurn=new JLabel();
//Prepare all the layout that we are going to use
GridLayout gl=new GridLayout(1,2,15,15);
FlowLayout fl=new FlowLayout(FlowLayout.CENTER,5,5);
JPanel pnlNombre=new JPanel();
JPanel pnlTurn=new JPanel();
pnlNombre.setLayout(fl);
pnlTurn.setLayout(fl);
pnlNombre.add(lblNombre);
pnlTurn.add(lblTurn);
pnlTitle.setLayout(gl);
pnlTitle.add(pnlNombre);
pnlTitle.add(pnlTurn);
}
public boolean putBarco(Barco inputBarco,int x, int y)
{
if(iPosition==HORIZONTAL)
{
if(putBarcoHorizontal(inputBarco,x,y))
{
if(btnBarco!=null)
{
paintBarcoHorizontal(inputBarco,x,y);
btnBarco.setVisible(false);
btnBarco=null;
juegoIngrid.selectNextBarco();
}
return(true);
}
else
return(false);
}
else
{
if(putBarcoVertical(inputBarco,x,y))
{
if(btnBarco!=null)
{
paintBarcoVertical(inputBarco,x,y);
btnBarco.setVisible(false);
btnBarco=null;
juegoIngrid.selectNextBarco();
}
return(true);
}
else
return(false);
}
}
public void putBarcoAutomatically()
{
Random rnd=new Random();
Barco auxBarco;
for(int i=0;i<Tablero.NUMBARCOS;++i)
do
{
auxBarco=panel.getBarco(i);
setPosition(rnd.nextInt(2));
}while(putBarco(auxBarco,rnd.nextInt(tamano),rnd.nextInt(tamano))==false);
}
public boolean putBarcoHorizontal(Barco inputBarco, int x, int y)
{
return(panel.putBarco(inputBarco,x,y,HORIZONTAL));
}
public boolean putBarcoVertical(Barco inputBarco, int x, int y)
{
return(panel.putBarco(inputBarco,x,y,VERTICAL));
}
public void paintBarcoHorizontal(Barco inputBarco, int x, int y)
{
ImageIcon iconLeft = new ImageIcon("../images/Left.gif");
ImageIcon iconCentre = new ImageIcon("../images/Centre.gif");
ImageIcon iconRight = new ImageIcon("../images/Right.gif");
buttons[x][y].setIcon(iconLeft);
for(int i=y+1;i<y+inputBarco.getTam()-1;++i)
buttons[x][i].setIcon(iconCentre);
buttons[x][y+inputBarco.getTam()-1].setIcon(iconRight);
}
public void paintBarcoVertical(Barco inputBarco, int x, int y)
{
ImageIcon iconTop = new ImageIcon("../images/Top.gif");
ImageIcon iconCentre = new ImageIcon("../images/Centre2.gif");
ImageIcon iconBottom = new ImageIcon("../images/Bottom.gif");
buttons[x][y].setIcon(iconTop);
for(int i=x+1;i<x+inputBarco.getTam()-1;++i)
buttons[i][y].setIcon(iconCentre);
buttons[x+inputBarco.getTam()-1][y].setIcon(iconBottom);
}
public void paintWater(int x, int y)
{
ImageIcon iconWater = new ImageIcon("../images/fail.jpg");
buttons[x][y].setIcon(iconWater);
}
public void paintTouch(int x, int y)
{
ImageIcon iconWater = new ImageIcon("../images/touch.jpg");
buttons[x][y].setIcon(iconWater);
}
//Pass the button of the ship that we are going to put on the tablero
public void setBarco(JButton inputBarco){btnBarco=inputBarco;}
//Pass the position of the ship that we are going to put on the tablero
public void setPosition(int inputPosition){iPosition=inputPosition;}
public void setCanHit(boolean inputCanHit){canHit=inputCanHit;}
public void setNombre(String inputNombre){lblNombre.setText(inputNombre);}
public void setTurn(String inputTurn){lblTurn.setText(inputTurn);}
public void doIWin()
{
if(panel.doYouWin())
{
if(lblNombre.getText().equals("Ordenador"))
JOptionPane.showMessageDialog(null,"°°°Has Ganado!!!");
else
JOptionPane.showMessageDialog(null,"Has perdido :(");
juegoIngrid.initialize();
}
}
public Point getBarcoPosition()
{
for(int i=0;i<tamano;++i)
for(int j=0;j<tamano;++j)
if(panel.isBarco(i,j))
return(new Point(i,j));
return(new Point(-1,-1));
}
}
Tengo una duda que no se como resolver... Necesito hacer dos tableros gráficos, para que jueguen el usuario y la computadora en el juego Hundir la Flota, pero, no se como hacer que los tableros puedan NO ser cuadrados (es decir, que puedan ser de 12x10, 13x15 etcc). Os dejo el código de la clase Tablero Grafico en el que se instancia el tamaño de los otros dos tableros que voy a usar (son clases hijo de la clase principal que expongo a continuacion).
MUCHAS GRACIAS!
import java.awt.*;
import java.util.*;
import java.io.*;
//GRAPHIC CLASS OF THE TABLERO
abstract public class GTablero extends JPanel
{
//Attributes
public Juego juegoElena; //Reference to the game, like this the gtablero know where is it playing
public JButton [][] buttons; //All the buttons
public Tablero panel; //The tablero
public int tamano; //The size of the tableros
//Panels
public JPanel pnlTitle; //The panel where appear the name and the turn of the player
public JPanel pnlButtons;
//Labels
public JLabel lblNombre;
public JLabel lblTurn;
public boolean canHit; //Control if is his turn or not
//Reference to a object and variable that the tablero should know when the user is putting the flota
public JButton btnBarco;
public int iPosition;
static final int HORIZONTAL=0;
static final int VERTICAL=1;
//BEHAVIORS
//CONSTRUCTOR GIVING THE SIZE OF THE BOARD
public GTablero(Juego inputJuego, int inputTam)
{
juegoElena=inputJuego;
tamano=inputTam;
canHit=true;
setTitle();
}
public GTablero(Juego inputJuego, String inputNombre, int inputTam)
{
juegoElena=inputJuego;
tamano=inputTam;
canHit=true;
setTitle();
setNombre(inputNombre);
}
public void setTitle()
{
//Create the space that we need for the objects
pnlTitle=new JPanel();
lblNombre=new JLabel();
lblTurn=new JLabel();
//Prepare all the layout that we are going to use
GridLayout gl=new GridLayout(1,2,15,15);
FlowLayout fl=new FlowLayout(FlowLayout.CENTER,5,5);
JPanel pnlNombre=new JPanel();
JPanel pnlTurn=new JPanel();
pnlNombre.setLayout(fl);
pnlTurn.setLayout(fl);
pnlNombre.add(lblNombre);
pnlTurn.add(lblTurn);
pnlTitle.setLayout(gl);
pnlTitle.add(pnlNombre);
pnlTitle.add(pnlTurn);
}
public boolean putBarco(Barco inputBarco,int x, int y)
{
if(iPosition==HORIZONTAL)
{
if(putBarcoHorizontal(inputBarco,x,y))
{
if(btnBarco!=null)
{
paintBarcoHorizontal(inputBarco,x,y);
btnBarco.setVisible(false);
btnBarco=null;
juegoIngrid.selectNextBarco();
}
return(true);
}
else
return(false);
}
else
{
if(putBarcoVertical(inputBarco,x,y))
{
if(btnBarco!=null)
{
paintBarcoVertical(inputBarco,x,y);
btnBarco.setVisible(false);
btnBarco=null;
juegoIngrid.selectNextBarco();
}
return(true);
}
else
return(false);
}
}
public void putBarcoAutomatically()
{
Random rnd=new Random();
Barco auxBarco;
for(int i=0;i<Tablero.NUMBARCOS;++i)
do
{
auxBarco=panel.getBarco(i);
setPosition(rnd.nextInt(2));
}while(putBarco(auxBarco,rnd.nextInt(tamano),rnd.nextInt(tamano))==false);
}
public boolean putBarcoHorizontal(Barco inputBarco, int x, int y)
{
return(panel.putBarco(inputBarco,x,y,HORIZONTAL));
}
public boolean putBarcoVertical(Barco inputBarco, int x, int y)
{
return(panel.putBarco(inputBarco,x,y,VERTICAL));
}
public void paintBarcoHorizontal(Barco inputBarco, int x, int y)
{
ImageIcon iconLeft = new ImageIcon("../images/Left.gif");
ImageIcon iconCentre = new ImageIcon("../images/Centre.gif");
ImageIcon iconRight = new ImageIcon("../images/Right.gif");
buttons[x][y].setIcon(iconLeft);
for(int i=y+1;i<y+inputBarco.getTam()-1;++i)
buttons[x][i].setIcon(iconCentre);
buttons[x][y+inputBarco.getTam()-1].setIcon(iconRight);
}
public void paintBarcoVertical(Barco inputBarco, int x, int y)
{
ImageIcon iconTop = new ImageIcon("../images/Top.gif");
ImageIcon iconCentre = new ImageIcon("../images/Centre2.gif");
ImageIcon iconBottom = new ImageIcon("../images/Bottom.gif");
buttons[x][y].setIcon(iconTop);
for(int i=x+1;i<x+inputBarco.getTam()-1;++i)
buttons[i][y].setIcon(iconCentre);
buttons[x+inputBarco.getTam()-1][y].setIcon(iconBottom);
}
public void paintWater(int x, int y)
{
ImageIcon iconWater = new ImageIcon("../images/fail.jpg");
buttons[x][y].setIcon(iconWater);
}
public void paintTouch(int x, int y)
{
ImageIcon iconWater = new ImageIcon("../images/touch.jpg");
buttons[x][y].setIcon(iconWater);
}
//Pass the button of the ship that we are going to put on the tablero
public void setBarco(JButton inputBarco){btnBarco=inputBarco;}
//Pass the position of the ship that we are going to put on the tablero
public void setPosition(int inputPosition){iPosition=inputPosition;}
public void setCanHit(boolean inputCanHit){canHit=inputCanHit;}
public void setNombre(String inputNombre){lblNombre.setText(inputNombre);}
public void setTurn(String inputTurn){lblTurn.setText(inputTurn);}
public void doIWin()
{
if(panel.doYouWin())
{
if(lblNombre.getText().equals("Ordenador"))
JOptionPane.showMessageDialog(null,"°°°Has Ganado!!!");
else
JOptionPane.showMessageDialog(null,"Has perdido :(");
juegoIngrid.initialize();
}
}
public Point getBarcoPosition()
{
for(int i=0;i<tamano;++i)
for(int j=0;j<tamano;++j)
if(panel.isBarco(i,j))
return(new Point(i,j));
return(new Point(-1,-1));
}
}
Valora esta pregunta
0