HI HIIIIIIIIIIIIIIIIIIIIII!!!!!
El viernes 4 de abril (aguas mil) realizamos la…tatatachantachaaaaaaaaan!! PRÁCTICA 6!!
En ella nos tocaba hacer un tetris. Al principio dijimos:”puff, pues tendremos que hacer la ventanita con las puntuaciones y en la que se amontonan las fichas y en la que se ve la ficha que caerá a continuación y…OTRA QUE ENGLOBE TODAS….”, pero estábamos equivocados. El problema entonces era:”ostras, y ¿¿por dónde empezamos para hacer un videojuego con todo mínimamente en condiciones??”.No se trataba de hacerlo con interfaces gráficas sino con la ventana de comandos, haciendo que todo salga por consola. Para ello primero, antes de hacer cualquier cosa, pensamos en los diferentes tipos de piezas que había en este juego. Las piezas son L, O, S, Z e I, cada letra representa la forma de la pieza del juego. Al principio pensamos que cada una de estas piezas deberían heredar de la clase pieza, en la que se generalizarían cada una, pero no, si podemos elegir cada pieza con tan solo una letra, lo mas lógico entonces es utilizar un char para usarlas. Simplemente con escribir la clase Pieza bastaba, porque si le ponemos un atributo char en el que podramos meter la letra de la pieza que tu quieras, todo es más sencillo.
Lo siguiente entonces era averiguar los atributos que necesitaríamos para la clase Pieza. Ya sabíamos del char, al que llamamos tipo (el cual es el tipo de la pieza del juego) un valor de tipo int llamado x y otro de tipo int llamado y. Estos dos últimos sirven para situar la pieza en la pantalla, para la posición que tomará la pieza en la pantalla.
Como debíamos comenzar desde cero y no nos dieron métodos a implementar, nosotros creamos los que consideramos necesarios, como el Constructor. Aunque Java te crea un constructor por defecto siempre es bueno creárselos, nunca se sabe cuando los necesitarás. Nosotros optamos por hacer uno en el que se le pasaban por parámetro las posiciones, x e y, y el tipo; y otro en el que tan solo se le pasaba el tipo.
Después implementamos un método mover, para poder cambiar la posición de la pieza. Y por último el famosísimo toString, el cual aparece en todas partes. Lo necesitaríamos para que imprimiese por pantalla el tipo de la pieza y la posición que posee, de esta manera podíamos estar “al loro” de todo lo que ocurriese con las piezas en todo momento y si al probarlo, en un futuro, desempeñaban la función que esperábamos.
|
public class Pieza |
A continuación implementamos la clase PruebaPieza, para probar la clase Pieza. Para ello, en el método main, creamos un objeto pieza haciendo uso del primer constructor creado y mostrándolo por pantalla. Lo mismo hicimos con un segundo objeto, pero llamando al segundo constructor.
|
class PruebaPieza
|
El resultado que obtuvimos era el esperado.
El paso siguiente era crear un contenedor en el que se guardasen las distintas piezas del juego, y además debía ser una estructura de datos basada en arrays. Como en clase se dijo que utilizásemos una cola, pues eso hicimos. Nosotros en un principio pensamos en una pila, pero bueno da igual. XD
Así que creamos una clase llamada Contenedor en el que implementamos una cola basada en arrays. Lo primero que pensamos fue en los atributos que debería tener. Si nos dicen en el enunciado que sea basada en arrays, pues obviamente un atributo será un array ¿de qué?, pues con las distintas piezas que vayan entrando en el juego, en definitiva, un array de piezas. Otro atributo sería un entero llamado índice, el cual nos ayudará a saber si la cola está vacía, llena, o en que posición se encuentra relleno el array en cada momento que lo queramos mirar.
Pues bien, ¿cuáles son los primeros métodos a implementar en una clase?…MUY BIEN EL DE LA PRIMERA FILA….LOS CONSTRUCTORES. Sólo hicimos un constructor, no nos pareció necesario más, y con la ayuda de las transparencias de clase, J jeje, lo hicimos pasándole por parámetro un entero que será la dimensión del array de Piezas, así que el índice tendrá valor -1.
Mas abajo se encuentra el método isEmpty(), para saber si el array está vacío, para ello si el índice es igual a -1, es que no hay ningún objeto en el array. También creamos el opuesto, fullQueue(), para averiguar si el array está lleno o no, en el caso de que así fuese, el índice apuntaría a la última posición del array, es decir, el índice debería ser igual a la longitud de la cola menos 1. Si lo igualásemos a la longitud de la cola estaría mal porque nos salimos del array y nos saltaría la ya CONOCIDÍSIMA excepción ArrayIndexOfBoundsException.
Ayudándonos de este último, implementamos el Push, o encolar, como la propia palabra indica, añade un objeto más al array. Para poder, lo primero es comprobar que tenemos espacio para introducir un nuevo objeto, y aquí es donde entra el fullQueue(). Si no está lleno entonces hay hueco para, por lo menos, un objeto Pieza más, así que incrementamos el índice en uno, situamos el objeto en el array en la posición en la que el índice muestra tras haberle sumado 1.
Y claro, si hemos hecho un encolar, habrá que hacer su contrario, el desencolar o Pop(). Este método extrae un objeto del array, pero ¿el primero que metimos o el último? Como extraer tu puedes extraer el que quieras siempre que hagas un método que realice esa acción y la haga bien, pero lo normal es que si estamos implementando una cola extraigamos el primero, ¿por qué? Porque la cola es de tipo FIFO (First Int First Out), esto es, el primero que entra es el primero que sale. Algo así como cuando estás esperando en una cola inmensa para comprarte tu comic favorito, de esos de edición limitada que traducen poquitos en España, el primero que llegue lo va a tener primero, y seguro que lo tiene…. Y YO SIGO AL FINAL DE LA COLA ESPERANDO! L pero…al final como todos van saliendo por delante de la cola, voy adelantando posiciones y consigo mi preciado comic!!!!! JA! Olvidando los arranque frikis, a lo que íbamos, que si el array no está vacío, se puede extraer un objeto Pieza, para ello optamos por recorrer el array e igualar una posición en el array a la siguiente de esta forma: cola[i]=cola[i+1], así cuando lo saquemos del array habrá un objeto menos por lo que debemos restarle uno al índice.
También está el método tamaño o size. En él se devuelve el índice del array para saber la longitud que tiene.
Y por último, un método al que llamamos presenta, pero es el mostrar de toda la vida. Recorremos el array mostrando por pantalla cada uno de los diferentes objetos.
|
public class Contenedor |
Una vez acabado, tocaba probarlo. Decidimos poner un línea que se imprimiese por pantalla que avisase al usuario que debía introducir un número, el número de piezas del juego. Lo que entre por la entrada estándar será la dimensión del array de piezas. Además aprovechamos para probar los diferentes métodos que implementamos como el push, el pop y el presenta.
|
import java.io .*;
public class PruebaContenedor
|
De esta manera apareció por la pantalla de comandos el resultado de tal prueba.
Hasta aquí nuestra sesión de prácticas explicando todo lo que hicimos y los problemas que nos surgió al hacerlo.
Esperamos que os sea de ayuda compañeros y si nosotros tenemos algo mal y queréis echarnos una mano aceptamos sugerencias.
BYE BYE!!


Todavía no entiendo cómo no os habéis convertido ya en el libro de cabecera de vuestros compañeros…
Por: Jose Jesus el Abril 8, 2008
a las 9:16 am
Tiene razón el profe a nosotros la verdad que nos estaís sirviendo de mucha ayuda y gracias a vosotros conseguimos acabar las prácticas que dejamos a medias, o lo que es más importante entender cosas que nosotros no entendemos.muchas gracias
Por: Ytiroporquemetoca el Abril 10, 2008
a las 3:34 pm