Package modelo

Source Code of modelo.Tablero

package modelo;

import java.util.ArrayList;
import java.util.List;
import modelo.excepciones.ExcepcionCoordenadaErronea;

/**
* La Clase Tablero.
*
* @author JESUS MANRESA PARRES
* @version 3.0
* @date 04.10.2012
*/
public class Tablero
{
 
  /** Variable privada de clase que indica el numero de filas, default 8. */
  private int dimy= 8;
 
  /** Variable privada de clase que indica el numero de columnas, default 8. */
  private int dimx= 8;
 
  /** Variable privada de clase que indica el numero maximo de columnas. */
  public final int MAX_DIMX= 26;
 
  /** Variable privada de clase que indica el numero maximo de filas. */
  public final int MAX_DIMY= Integer.MAX_VALUE;
 
  /** Variable privada de clase donde se almacenaran las casillas con sus coordenadas y colores, simula el tablero. */
  private Casilla table[][];
 
 
  /**
   * Constructor por parametros de tablero.
   *
   * @param dimx el numero de columnas
   * @param dimy el numero de filas
   */
  public Tablero(int dimx, int dimy)
  {
    if(dimy%2==0 && dimy>0 && dimy<=MAX_DIMY) this.dimy= dimy;
    if(dimx%2==0 && dimx>0 && dimx<=MAX_DIMX) this.dimx= dimx;
   
    table= new Casilla[this.dimy][this.dimx];
   
    Color coloraux= Color.NULO;
    char letra='A';
    int i= this.dimy-1;
    int j= this.dimx-1;
    int fila=this.dimy;
   
    try
    {
      while(i>=0)
      {
        while(j>=0)
        {
          if((i+j)%2==0) coloraux= Color.BLANCO;
          else coloraux= Color.NEGRO;
          table[i][j]= new Casilla(coloraux, new Coordenada(letra, fila));
          letra++;
          j--;
        }
        i--;
        fila--;
        letra='A';
        j= this.dimx-1;
      }
    }
    catch(ExcepcionCoordenadaErronea e)
    {
      System.err.println(e.getMessage());
    }
  }
 
  /**
   * Constructor de copia de tablero.
   * @param t un objeto de tipo tablero
   */
  public Tablero(Tablero t)
  {
    dimx= t.getDimx();
    dimy= t.getDimy();
   
    table= new Casilla[dimy][dimx];
    char letra='A';
   
    int i=dimy-1;
    int j=dimx-1;
    int aux=j;
    int fila= dimy;
   
    try
    {
      while(i>=0)
      {
        letra='A';
        j=aux;
        while(j>=0)
        {
          table[i][j]= new Casilla(t.getCasillaAt(letra,fila).getColor(), t.getCasillaAt(letra,fila).getCoordenada());
          letra++;
          j--;
        }
        fila--;
        i--;
      }
    }
    catch(ExcepcionCoordenadaErronea e)
    {
      System.err.println(e.getMessage());
    }
  }
 
  /**
   * Getter.
   * @return dimx numero de columnas
   */
  public int getDimx() { return dimx; }
 
  /**
   * Getter.
   * @return dimy el numero de filas
   */
  public int getDimy() { return dimy; }
 
  /**
   * Devuelve la casilla que contiene la coordenada c, en caso de no existir devolvera CasillaError.
   *
   * @param c un objeto de tipo Coordenada
   * @return Casilla una casilla
   * @throws ExcepcionCoordenadaErronea the excepcion coordenada erronea
   */
  public Casilla getCasillaAt(Coordenada c) throws ExcepcionCoordenadaErronea
  {
    int i=dimy-1;
    int j=dimx-1;
   
    while(i>=0)
    {
      while(j>=0)
      {
        if(table[i][j].getCoordenada().equals(c))
          return table[i][j];
        j--;
      }
      i--;
      j=dimx-1;
    }
    throw new ExcepcionCoordenadaErronea(c.getLetra(), c.getY());
  }
 
  /**
   * Devuelve una casilla con la coordenada (c,y).
   *
   * @param c la letra de la coordenada
   * @param y la fila de la coordenada
   * @return Casilla
   * @throws ExcepcionCoordenadaErronea the excepcion coordenada erronea
   */
  public Casilla getCasillaAt(char c, int y) throws ExcepcionCoordenadaErronea
  {
    return getCasillaAt(new Coordenada(c,y));
  }
 
  /**
   * Coloca una pieza en el tablero.
   *
   * @param c la coordenada a la que vamos a insertar la pieza
   * @param p la pieza que vamos a insertar
   * @return true/false
   * @throws ExcepcionCoordenadaErronea the excepcion coordenada erronea
   */
  public boolean colocaPiezaAt(Coordenada c, Pieza p) throws ExcepcionCoordenadaErronea
  {
    return getCasillaAt(c).setPieza(p);
  }
 
  /**
   * Convierte el tablero a cadena.
   * @return String
   */
  public String toString()
  {
    String cadena= new String("");
    int i= dimy-1;
    int j= dimx-1;
   
    while(i>=0)
    {
      while(j>=0)
      {
        if(table[i][j].isOcupada())
          cadena+="1";
        else
          cadena+="0";
        j--;
      }
      cadena+="\n";
      i--;
      j= dimx-1;
    }
    return cadena;
  }
 
  /**
   * Devuelve una lista con las casillas en la fila izquierda
   * @param c la casilla central
   * @return List<Casilla>
   */
  public List<Casilla> getFilaIzquierda(Casilla c)
  {
    if(c!=null)
      return getLista(c, -1, 0);
    else
      return new ArrayList<Casilla>();
  }
 
  /**
   * Devuelve una lista con las casillas en la fila derecha
   * @param c la casilla central
   * @return List<Casilla>
   */
  public List<Casilla> getFilaDerecha(Casilla c)
  {
    if(c!=null)
      return getLista(c, 1, 0);
    else
      return new ArrayList<Casilla>();
  }
 
  /**
   * Devuelve una lista con las casillas en la columna Arriba
   * @param c la casilla central
   * @return List<Casilla>
   */
  public List<Casilla> getColumnaArriba(Casilla c)
  {
    if(c!=null)
      return getLista(c, 0, 1);
    else
      return new ArrayList<Casilla>();
  }
 
  /**
   * Devuelve una lista con las casillas en la columna abajo
   * @param c la casilla central
   * @return List<Casilla>
   */
  public List<Casilla> getColumnaAbajo(Casilla c)
  {
    if(c!=null)
      return getLista(c, 0, -1);
    else
      return new ArrayList<Casilla>();
  }
 
  /**
   * Devuelve una lista con las casillas en la diagonal NorOEste
   * @param c la casilla central
   * @return List<Casilla>
   */
  public List<Casilla> getDiagonalNO(Casilla c)
  {
    if(c!=null)
      return getLista(c, -1, 1);
    else
      return new ArrayList<Casilla>();
  }
 
  /**
   * Devuelve una lista con las casillas en la diagonal NorEste
   * @param c la casilla central
   * @return List<Casilla>
   */
  public List<Casilla> getDiagonalNE(Casilla c)
  {
    if(c!=null)
      return getLista(c, 1, 1);
    else
      return new ArrayList<Casilla>();
  }
 
  /**
   * Devuelve una lista con las casillas en la diagonal SurOEste
   * @param c la casilla central
   * @return List<Casilla>
   */
  public List<Casilla> getDiagonalSO(Casilla c)
  {
    if(c!=null)
      return getLista(c, -1, -1);
    else
      return new ArrayList<Casilla>();
  }
 
  /**
   * Devuelve una lista con las casillas en la diagonal SurEste
   * @param c la casilla central
   * @return List<Casilla>
   */
  public List<Casilla> getDiagonalSE(Casilla c)
  {
    if(c!=null)
      return getLista(c, 1, -1);
    else
      return new ArrayList<Casilla>();
  }
 
  /**
   * Devuelve una lista con las posiciones a las que puede ir el caballo
   * @param c la Casilla c
   * @return List<Casilla>
   */
  public List<Casilla> getSaltosCaballo(Casilla c)
  {
    if(c==null)
      return new ArrayList<Casilla>();
     
    List<Casilla> lista= new ArrayList<Casilla>();
    Casilla aux;
    Coordenada caux;
   
    aux= new Casilla();
    caux= new Coordenada(c.getCoordenada());
   
      try
      {
        aux=getCasillaAt((char)(caux.getLetra()+1), caux.getY()+2);
        if(aux!=null)
          lista.add(aux);
      }
      catch(ExcepcionCoordenadaErronea e)
      {
        System.err.println(e.getMessage());
      }
     
      try
      {
        aux=getCasillaAt((char)(caux.getLetra()+2), caux.getY()+1);
          if(aux!=null)
            lista.add(aux);
      }
      catch(ExcepcionCoordenadaErronea e)
      {
        System.err.println(e.getMessage());
      }
     
      try
      {
        aux=getCasillaAt((char)(caux.getLetra()+2), caux.getY()-1);
        if(aux!=null)
          lista.add(aux);
      }
      catch(ExcepcionCoordenadaErronea e)
      {
        System.err.println(e.getMessage());
      }
     
      try
      {
        aux=getCasillaAt((char)(caux.getLetra()+1), caux.getY()-2);
        if(aux!=null)
          lista.add(aux);
      }
      catch(ExcepcionCoordenadaErronea e)
      {
        System.err.println(e.getMessage());
      }
     
      try
      {
        aux=getCasillaAt((char)(caux.getLetra()-1), caux.getY()-2);
        if(aux!=null)
          lista.add(aux);
      }
      catch(ExcepcionCoordenadaErronea e)
      {
        System.err.println(e.getMessage());
      }
     
      try
      {
        aux=getCasillaAt((char)(caux.getLetra()-2), caux.getY()-1);
        if(aux!=null)
          lista.add(aux);
      }
      catch(ExcepcionCoordenadaErronea e)
      {
        System.err.println(e.getMessage());
      }
     
      try
      {
        aux=getCasillaAt((char)(caux.getLetra()-2), caux.getY()+1);
        if(aux!=null)
          lista.add(aux);
      }
      catch(ExcepcionCoordenadaErronea e)
      {
        System.err.println(e.getMessage());
      }
     
      try
      {
        aux=getCasillaAt((char)(caux.getLetra()-1), caux.getY()+2);
        if(aux!=null)
          lista.add(aux);
      }
      catch(ExcepcionCoordenadaErronea e)
      {
        System.err.println(e.getMessage());
      }
    return lista;
  }
 
  /**
   * Devuelve una lista dependiendo de los valores difH y difV
   * @param c la casilla central
   * @param difH valor horizontal
   * @param difV valor vertical
   * @return List<Casilla>
   */
  public List<Casilla> getLista(Casilla c, int difH, int difV)
  {
    List<Casilla> lista= new ArrayList<Casilla>();
    char l= c.getCoordenada().getLetra();
    int y= c.getCoordenada().getY();
   
    try
    {
      Casilla aux= new Casilla();
     
      while(aux!=null)
      {
        aux= getCasillaAt((char)(l+difH), y+difV);
        if(aux!=null)
          lista.add(aux);
       
        if(aux.isOcupada())
          aux=null;
       
        l+=difH;
        y+=difV;
      }
    }
    catch(ExcepcionCoordenadaErronea e)
    {
      System.err.println(e.getMessage());
   
    return lista;
  }
 
  /**
   * Devuelve la lista de piezas del color establecido que amenazan a una casilla
   * @param cas la casilla amenazada
   * @param col el color
   * @return List<Pieza>
   */
  public List<Pieza> getAmenazas(Casilla cas, Color col)
  {
    List<Pieza> lista= new ArrayList<Pieza>();
    Casilla c= new Casilla();
   
    if(cas!=null && col!=null && col!=Color.NULO)
    {
      try
      {
        int i=1;
        char letra='A';
        Casilla aux= getCasillaAt(cas.getCoordenada());
       
        while(i<=dimy)
        {
          while(letra<='H')
          {
            c= getCasillaAt(letra, i);
           
            if(c!=null && c.getPieza()!=null && c.getPieza().getCasillasAmenazadas().contains(aux) && c.getPieza().getColor().equals(col))
              lista.add(c.getPieza());
            letra++;
          }
          i++;
          letra='A';
        }
      }
      catch(ExcepcionCoordenadaErronea e)
      {
        System.err.println(e.getMessage());
      }
    }
   
    return lista;
  }
}
TOP

Related Classes of modelo.Tablero

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.