De nuevo un Viernes en los laboratorios de informatica del Juan Benet para realizar la practica 6.
Para hacer esta práctica eran necesarias las clases Pieza y la clase Cola, que eran las que habi que implementar.
Empezamos con la clase Pieza:
Esta clase es la encargada de modelar a una pieza;se definen 3 atributos,que en nuestro caso los definimos como “private”, por lo que luego los metodos de acceso a los mismos los definimos como “public”.Esto lo hacemos así para que desde clases externas no se pueda acceder directamente a los atributos y modificarlos.
Los 3 atributos son “int x”, “int y”, que son los encargados de la posición de la pieza, y después un atributo “char tipo”, que se encarga de definir la forma fisica de la pieza. Una duda que tenemos con respecto a este atributo es de si se podía haber de alguna otra forma.
En cuanto a metodos y contructor, tiene un constructor al que se le pasa como parametro el tipo de pieza=> public Pieza(char tipo).
Hay un metodo mover, el cual en este caso lo implementamos vacio,es decir, no hara nada cuando éste sea invocado.
La mayor duda la tenemos en el método toString. Pedimos ayuda a unas compañeras y nos dijeron que ra de la siguiente forma:
public String toString(){
return Character.toString(tipo);
}
Cuando lo vimos nos recordó bastante a la forma de algunos métodos que si que conocíamos como Integer.parseInt(String), pero no lo acabamos de entender, asi que si alguien nos puede echar una mano se lo agradeceríamos.
Aquí acababa nuestra clase Pieza.
Seguimos con la clase Cola:
Esta será la clase encargada de almacenar las distintas piezas modeladas en la clase Pieza.
Como atributos necesitamos 3: “int numElementos” que indica el tamaño de la Cola, “int posicion” que hará la función de un índice, y por último, un array de piezas donde relamente se almacenan éstas
Pieza[] piezas; //el array se llamara piezas.
En el constructor, se creará el array con un tamaño que se le pasará como argumento.Además, como se crea vacío, nuestro indice apuntara a la última posición ocupada, que es “-1″.
También tendrá sus respectivos métodos para comprobar si el array está lleno o está vacío.Hay 2 formas parecidas de implementar estos métodos.
1º. public boolean llena(){
return(posicion==piezas.length -1);
}
2º. public boolean llena(){
if(posicion==piezas.length-1)
return true;
else
return false;
}
Nosotros usamos la primera opción porque es la forma más corta.
Como toda Cola tiene sus métodos, desencolar y encolar.
Encolar:
public void encolar(Pieza p){
posicion++;
Pieza[posicion]piezas= Pieza p;
}
Como el índice estaba apuntando al empezar a “-1″, es necesario incrementarlo antes de “meter” la pieza en el array.Esto sucedera siempre que se quiera meter una pieza en el array(excepto cuando esté llena).
Desencolar:
En este método ya teníamos más problemas, porque no sabíamos exactamente cómo sacar los Objetos Pieza de forma adecuada. En la clase de teoría nos explicaron que una forma de implementar la Cola sería con 2 índices. Como en este caso sólo disponemos de un indice, nosotros lo hemos hecho de la siguiente manera:
public Pieza desencolar(){
for(int i=piezas.length-1;i>=0;i–){
if(piezas[i]!=null)
return(piezas[i]);
break;
}
}
Nuesta idea es, que cuando se invoque a este metodo, se desencole el último objeto del array, por eso recorremos el array desde el final hasta el principio, y si vemos que la posición del array está vacia( null) pues seguimos hasta que se encuntre una que no lo esté. Dudamos en que el mecanismo para que “pare” funciona, porque después de la sentencia return ya no se ejecutaría nada, y por tanto el “break” nunca se ejecutaría.
Si alguien nos puede explicar un poco cual sería la forma de hacer este método se lo agradeceríamos:).
Parece que esta práctica se nos ha dado bastante mejor, alomejor con eso de ser el Tetris pues nos resultaba más…¿familiar?, haciendonos recordar los vicios de este juego con GameBoy de cuando eramos crios… ¡ que tiempos aquellos ! XD