/*
 * Javier Abellán. 27 de Abril de 2003
 *
 * Clase para mantener fila y columna de una casilla del puzzle.
 */

/**
 * Mantiene la fila y columna de una casilla del puzzle.
 * No realiza ningún tipo de verificación.
 */
public class Casilla implements Comparable {
    
    /**
     * Constructor. Se le pasa una fila y una columna
     */
    public Casilla(int fila, int columna) 
    {
        this.fila = fila;
        this.columna = columna;
    }
    
    
 
    /**
     * Compara este objeto con el que recibe.
     * Devuelve 0 si son iguales.
     * Devuelve -1 si este objeto es anterior al que se le pasa. Se entiende
     * por anterior que sea de una fila superior o, si es de la misma fila, que
     * sea de una columna anterior.
     * Devuelve 1 si este objeto es posterior al que se le pasa.
     */
    public int compareTo(Object o)
    {
        /* Auxiliar para hacer el cast de Object a Casilla */
        Casilla aux;
        
        /* Se verifica que el parámetro no es null y que es instancia de 
         * Casilla */
        if (o == null) throw new ClassCastException();
        if (!(o instanceof Casilla)) throw new ClassCastException();
        
        /* Se hace el cast */
        aux = (Casilla)o;
                
        /* Si el objeto que nos pasan es de una fila posterior a este,
         * devolvemos 1. */
        if (aux.fila > this.fila)
            return -1;
        
        /* Si el que nos pasan  es de una fila anterior a este, devolvemos -1
         */
        if (aux.fila < this.fila)
            return 1;
        
        /* Si llegamos hasta aqui es que son de la misma fila. Devolvemos -1
         * si el que nos pasan es de una columna posterior al nuestro */
        if (aux.columna > this.columna)
            return -1;
        
        /* Si el que nos pasan es de una columna anterior al nuestro, devolvemos
         * uno.
         */
        if (aux.columna < this.columna)
            return 1;
        
        /* Si llegamos hasta aquí, es que es la misma fila y columna, devolvemos
         * cero */
        return 0;
    }
    
    /** Fila de la casilla */
    public int fila;
    
    /** Columna de la casilla */
    public int columna;
    
}
