package tablero;
import java.awt.Color;
import tablero.CasillaTablero.ColorLinea;
import tablero.CasillaTablero.TipoLinea;
import tablero.PuntoTablero.TipoPunto;
/**
* Clase que implementa el tablero donde mostraremos las iteraciones de los algortimos
* @author Agust�n Medina Varo
* @version 0.1
*
*/
public class Tablero extends javax.swing.JPanel {
private static final long serialVersionUID = 1L;
//Controla si las casillas tienen implementado el listener de rat�n
private boolean tipoTablero;
//Array bidimensional con las casillas del tablero
private CasillaTablero [][] casillas ;
//Array bidimensional con los puntos del tablero
private PuntoTablero [][] puntos ;
//Cadenas horizontal y vertical mostradas en la primera fila y columna del tablero
private String cadenaHorizontal,cadenaVertical;
//Tama�o de un casilla del tablero
private int tamannoActual;
//Longitud de las cadenas cadenaHorizontal y cadenaVetical
private int longCadenaHorizontal,longCadenaVertical;
/**********************************
* GET's y SET's de las variables
***********************************/
public int getTamanhoCasilla(){
return this.tamannoActual;
}
public int getLongitudCadenaHorizontal(){
return this.longCadenaHorizontal;
}
public int getLongitudCadenaVertical(){
return this.longCadenaVertical;
}
public boolean getTipoTablero(){
return this.tipoTablero;
}
public String getCadenaHorizontal(){
return this.cadenaHorizontal;
}
public String getCadenaVertical(){
return this.cadenaVertical;
}
/**
* Constructor del tablero
* @param cadenaHorizontal Cadena que se mostrar� en la parte superior del tablero
* @param cadenaVertical Cadena que se mostrar� en la parte izquierda del tablero
* @param tipo Activa si queremos que las casillas tengan un listener de rat�n
*/
public Tablero(String cadenaHorizontal,String cadenaVertical,int tamannoTablero, boolean tipo) {
this.cadenaHorizontal=cadenaHorizontal;
this.cadenaVertical=cadenaVertical;
this.longCadenaHorizontal=cadenaHorizontal.length();
this.longCadenaVertical=cadenaVertical.length();
this.tipoTablero=tipo;
this.tamannoActual=tamannoTablero;
//Sumamos 2 a las filas por la columna cabecera y por la �ltima fila de casillas
//de las cuales usaremos solo la conexi�n con su casilla derecha
int filas=this.cadenaVertical.length()+2;
//Sumamos 2 a las columnas por la columna izquierda con la palabra y por la �ltima columna de casillas
//de las cuales usaremos solo la conexi�n con su casilla inferior
int columnas=this.cadenaHorizontal.length()+2;
initComponents(filas, columnas);
//setLayout(new java.awt.GridLayout(filas, columnas));
casillas = new CasillaTablero[filas][columnas];
puntos=new PuntoTablero[filas][columnas];
//A�adimos todos los puntos primero para que no los pisen las casillas
for (int i = 0; i < filas; i++){
for (int j = 0; j < columnas; j++){
puntos[i][j]=new PuntoTablero(this.tamannoActual,i,j,this.tamannoActual,TipoPunto.INVISIBLE,this.tipoTablero);
this.add(puntos[i][j]);
}
}
//A�adimos todas las casillas
for (int i = 0; i < filas; i++){
for (int j = 0; j < columnas; j++){
if(i==0 || j==0){
if(i==0 && j!=0 && j<(columnas-1)){
casillas[i][j] = new CasillaExterna(this.cadenaHorizontal.substring(j-1, j),this.tamannoActual,i,j,this.tipoTablero);
}
else if(j==0 && i!=0 && i<(filas-1)) {
casillas[i][j] = new CasillaExterna(this.cadenaVertical.substring(i-1, i),this.tamannoActual,i,j,this.tipoTablero);
}
else{
casillas[i][j] = new CasillaExterna("",this.tamannoActual,i,j,this.tipoTablero);
}
}
else
casillas[i][j] = new CasillaInterna(this.tamannoActual,i,j,this.tipoTablero);
//Posicionamos cada casilla en su sitio dentro del tablero
// casillas[i][j].setBounds(columna_actual, fila_actual, 34, 34);
this.casillas[i][j].cambiarTamanno( this.tamannoActual);
this.add(casillas[i][j]);
}
}
}
/**
* Redimensiona el tablero actual
* @param tamanno Tama�o de cada una de las celdas del tablero
*/
public void cambiarTamanno(int tamanno){
if(tamanno!=this.tamannoActual){
int filas=this.cadenaVertical.length()+2;
int columnas=this.cadenaHorizontal.length()+2;
this.tamannoActual=tamanno;
initComponents(filas, columnas);
for (int i = 0; i < filas; i++){
for (int j = 0; j < columnas; j++){
//Posicionamos cada casilla en su sitio dentro del tablero
// this.casillas[i][j].setBounds(columna_actual, fila_actual, tamanno-1, tamanno-1);
this.puntos[i][j].cambiarTamanno(tamanno);
this.casillas[i][j].cambiarTamanno( tamanno);
}
}
this.repaint();
}
}
/**
* Inicializa el tablero, definiendo los colores de fondo, creando bordes,...
* @param filas N�mero de filas del tablero
* @param columnas N�mero de columnas del tablero
*/
private void initComponents(int filas,int columnas) {
this.setLayout(null);
this.setBackground(Color.GRAY);
this.setBorder(javax.swing.BorderFactory.createLineBorder(Color.BLACK));
this.setPreferredSize(new java.awt.Dimension(this.tamannoActual*columnas+1, this.tamannoActual*filas+1));
javax.swing.GroupLayout tableroLayout = new javax.swing.GroupLayout(this);
this.setLayout(tableroLayout);
tableroLayout.setHorizontalGroup(
tableroLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 349, Short.MAX_VALUE)
);
tableroLayout.setVerticalGroup(
tableroLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 349, Short.MAX_VALUE)
);
}
/**
* Limpia el tablero dejando todas las casillas vacias
*/
public void limpiarTablero(){
int filas=this.cadenaVertical.length()+2;
int columnas=cadenaHorizontal.length()+2;
initComponents(filas, columnas);
for (int i = 0; i < filas; i++){
for (int j = 0; j < columnas; j++){
//Posicionamos cada casilla en su sitio dentro del tablero
// this.casillas[i][j].setBounds(columna_actual, fila_actual, tamanno-1, tamanno-1);
// this.casillas[i][j].setEstado(EstadoCasilla.VACIA);
this.casillas[i][j].limpiarCasilla();
this.casillas[i][j].cambiarTamanno(this.tamannoActual);
this.puntos[i][j].limpiarPunto();
this.puntos[i][j].cambiarTamanno(this.tamannoActual);
}
}
this.repaint();
}
public void pintarLinea(int xOrigen, int yOrigen, int xDestino,int yDestino, TipoLinea tipo,ColorLinea color){
TipoPunto tipoPunto=TipoPunto.CERRADO;
if(tipo==TipoLinea.INVISIBLE){
tipoPunto=TipoPunto.INVISIBLE;
}
else{
if(color==ColorLinea.ABIERTO){
tipoPunto=TipoPunto.ABIERTO;
}
else if(color==ColorLinea.ACTUAL){
tipoPunto=TipoPunto.ACTUAL;
}
else if(color==ColorLinea.CERRADO){
tipoPunto=TipoPunto.CERRADO;
}
else if(color==ColorLinea.SOLUCION){
tipoPunto=TipoPunto.SOLUCION;
}
}
// this.puntos[xOrigen][yOrigen].pintarPunto(tipoPunto,puntos[xOrigen][yOrigen].getGraphics());
this.casillas[xOrigen][yOrigen].pintarLinea(xDestino,yDestino,tipo,color,this.casillas[xOrigen][yOrigen].getGraphics());
this.puntos[xDestino][yDestino].pintarPunto(tipoPunto,puntos[xOrigen][yOrigen].getGraphics());
}
public void nuevoAlgoritmoEnTabla(){
}
public void pintarPunto(int x,int y,TipoPunto tipo){
//if(x!=0 && y!=0){
this.puntos[x][y].pintarPunto(tipo, this.puntos[x][y].getGraphics());
// }
}
}