Análisis y Diseño

Universidad del Valle de Guatemala
Programación Orientada a Objetos
Proyecto 2
Gustavo Sánchez # 10313
Henry López # 10097


**************************************Descárgalo de:*************************************

http://www.mediafire.com/?qqneqlv1cofc5en

*****************************************************************************************


Diagrama UML



ANÁLISIS PROYECTO 2
STAKKA

Nuestro programa está diseñado de la siguiente forma:
Diseñamos una matriz de números en la que controlaremos las jugadas realizadas debido a que es una forma eficiente de comparar valores que representarán los objetos o figuras que se observarán gráficamente, y para esto hicimos una matriz de componentes Labels que representarán los valores de la matriz numérica con imágenes. De manera análoga, hicimos un arreglo de números para controlar un arreglo de Labels, que desplegarán imágenes, que simbolizan el disparador del juego.
Cada figura observada en el juego está formada por 4 Labels, (de la clase Stakkas)

1. Entradas:
 El usuario escogerá el nivel con el que desea iniciar (1, 2 o 3)
 El usuario moverá el cursor del mouse para mover el “shooter”, el movimiento del “shooter” solo ingresará la componente horizontal del movimiento del mouse.
 El usuario hará click con el mouse, seleccionando una pieza de la fuente de piezas para disparar.
 El usuario podrá seguir realizando movimientos con el “shooter”, habiendo escogido ya una pieza que disparará al tablero de piezas.
 El usuario hará click con el mouse, en el momento en que desee soltar la pieza que tenga seleccionada.

2. Salidas: Se le mostrara al usuario:
 Mensaje de Bienvenida
 Mensaje de opción de nivel
 Mensaje de que el usuario ganó el juego
 Mensaje de que el usuario perdió el juego
 El Juego, JFrame que incluye todos los paneles necesarios para ejecutar el programa.
o Las piezas que tiene a su disposición en la fuente de piezas.
o Las piezas que tiene que destruir en el tablero
o El “shooter” y su espacio de desplazamiento.
o El punteo que lleva en el juego.












3. Clases:
 Forma.java
I. Atributos:
Visibilidad Tipo Identificador Observaciones
private int numero Es la identidad da cada una de las piezas del juego
private boolean inicial Indica si la pieza que se ha creado es de las que se crearon en una casilla de las que se pueden destruir (en el tablero) o se creó en una casilla de la fuente de piezas.
private boolean toBeDestroyed Indica si la pieza debe ser destruida, dependiendo de las circunstancias del tablero de juego.
private boolean searched Indica si la casilla ya empezó la recursión en el método revisar()
private int y Posición que indica en qué columna del cuadrado se llenará con una imagen, para formar la figura Stakka
private int x Posición que indica en qué fila del cuadrado se llenará con una imagen, para formar la figura Stakka
private int color Indica de qué color será asignada su figura al momento de formar una figura Stakka.
II. Métodos:
Visibilidad Tipo de retorno Identificador Parámetros Funcionalidad
public ninguno Forma posx : int; x:int; y:int; inicial:boolean; numero:int; Constructor que inicializa el objeto asignandole los valores establecidos en sus parámetros a sus respectivas variables, y asigna a toBeDestroyed: false; y a searched: false
public void setTobeDestroyed valor : boolean Sustituye el valor actual de toBeDestroyed al valor en su parámetro.
public int getColor ninguno Devuelve un (int) que indica el color que tomará al momento de formar una pieza Stakka
public boolean getToBeDestroyed ninguno Devuelve un (boolean) que indica si la pieza debe ser borrada del tablero de juego
public void setSearched valor : boolean Sustituye el valor actual de searched, al valor en su parámetro.
public boolean getSearched ninguno Devuelve un boolean indcando el estado de este atributo, si ya ha sido analizado, en el programa
public boolean getInicial ninguno Deuelve un boolean, que indica el valor si la pieza es de las que se formaron al inicio del juego.

 Sttakas.java:
I. Hereda de JLabel
II. Importaciones:
1) javax.swing.*
III. Atributos:
Visibilidad Tipo Identificador Observaciones
private int posx Indica la columna en la que la pieza se encontrará

IV. Métodos:
Visibilidad Tipo de retorno Identificador Parámetros Funcionalidad
public ninguno Stakkas posx : int Constructor que llama al constructor de la clase Jlabel sin parámetros, e inicializa la variable posx
public void setPosx posx : int Cambia el valor actual de posx por el valor recibido como parámetro.
public int getPosx ninguno Devuelve un (int) que indica la columna en la que se encuentra una pieza Stakka

 Tablero.java:
 Clase interna: moveListener
I. Metodos

Visibilidad Tipo de retorno Identificador Parámetros Funcionalidad
public void mouseEntered e : MouseEvent Indica la columna en la que el cursor del mouse ingresó,
public void mouseClicked event : MouseEvent Se evalúa la posición del disparador y se evalúa si ya ha escogido una pieza, si ya lo hizo, la dispara, o si no, escoge la pieza en que se encuentre la parte izquierda del disparador si está en una casilla par.




II. Importaciones de Tablero
 java.awt.event.*
 java.awt.*
 javax.swing.*
 Java.util.Random
III. Atributos de Tablero

Visibilidad Tipo Identificador Observaciones
private Stakkas [][] piezas Matriz de Stakkas, que son la parte visible del programa, donde se colocarán imágenes de colores que formarán las figuras.
private int nivel Entero que indica el nivel del juego (1, 2 ,3)
private Forma [][] formas Matriz donde se harán las evaluaciones de lo que el jugador haga con los eventos del mouse
private Stakkas [] shooter Arreglo de Stakkas que contendrán la figura del "shooter".
private int [] disparador Arreglo análogo a lo que es "Forma a Stakkas", aquí se evaluarán los eventos que haga el jugador con el mouse, para realizar acciones visibles en "shooter"
private Timer contador Controlador de tiempo que ejecutará acciones cada intervalo de 15 segundos
private int color Indica de que color será asignada su figura al momento de formar una figura Stakka.




 Stakka.java

1. Algoritmo narrativo
a. Inicio
b. Pedir al usuario la dificultad que desea
c. Llamar al constructor de Tablero con el parámetro escogido
d. Mientras ganar sea false
i. El usuario escoge que pieza usara
ii. El usuario suelta la pieza
iii. Se verifica si se destruirán piezas y se darán puntos
iv. Se verifica si el usuario ha ganado o perdido
v. El Timer corre 15 segundos
e. Fin mientras
f. FIN






I. Metodos de Tablero

Visibilidad Tipo de retorno Identificador Parámetros Funcionalidad
public ninguno Tablero nivel : int Llama al constructor de Jpanel sin parámetros, inicializa los arreglos de "shooter" y "disparador" con 12 casillas; inicializa la variable nivel con el parámetro; inicializa la matriz de Forma y Stakkas, con [16][12]; y le asigna la posción de columna a cada figura Stakka
public void escoger y : int En la posición en la que se encuentra el disparador, se sube las piezas que se encuentran en las filas 13 y 12 dos filas arriba, y borra las piezas en su posición anterior construyendo una forma vacía.
public void tirar yeh : int Evalua condiciones especiales para las piezas seleccionadas, (Stakkas) y de acuerdo a qué tipo se esté tratando, se evaluará si alguna Stakka superior encuentra, fila por fila, un Stakka de color distinto a 0, dentro de un ciclo.
public void revisar x: int; y: int Los parámetros indican las cordenadas dónde comenzar el método, éste se encarga de revisar
si la pieza tiene mas piezas adyacentes del mismo color.
public void destruir ninguno Revisa la matriz y destruye todas las piezas cuyo atributo toBeDestroyed sea true
public void fall ninguno si una pieza se encuentre sin ninguna pieza que la sostenga y se caiga, osea sea destruida.
public void pintar ninguno se encarga de pintar la matriz visible teniendo como modelo la matriz de control.
public void formaVacia x: int; y: int Recibe las coordenadas en las que se necesita una forma vacia, el cambio se hace en la matriz de control.
public void construirForma x: int; y: int; inicial:boolean Recibe las coordenadas que indican la posicion de la esquina inferior izquierda de la pieza a crear, y si la pieza se encuentra en juego o no.







A. Ciclos
Clase
Tablero
Método tirar
Función:
Ciclo do que se encarga de revisar si la pieza en movimiento tiene otra pieza encima de ella o llego al limite de la pantalla, se detiene cuando se cumple alguna de estas dos condiciones.
Ciclo que recorre toda la matriz evaluando qué piezas de Stakkas han sido evaluadas con la recursión y se les cambia el parámetro de toBeDestroyed a (true)
Ciclo que recorre la matriz en las casillas de [14][12] buscando si al menos hay una Stakka que tenga un color distinto de 0 y 7, esto significa que aún quedan figuras en el tablero y que el usuario no ha ganado todavía, hasta que queden todas las figuras vacías se deslegará un JOptionPane mostrando que se ha ganado la partida.

Método destruir:
Función:
Un ciclo con otro interno que recorre la matriz evaluando si los Stakkas tienen activado el atributo toBeDestroyed, y crean una figura vacía en su lugar
Dos ciclos que recorren uno por uno las Stakkas de la matriz cambiandole el atributo searched a false.

Método pintar
Función:

Doble ciclo que recorre la matriz de control (Formas) evaluando su color, y de esta forma le asigna a cada casilla de la matriz visible (piezas) una imagen representativa de un color.
Ciclo que recorre el arreglo del disparador, haciendo la misma tarea, de manera análoga con el ciclo de las figuras del tablero










Clase Método Funcion
moveListener mouseEntered Ciclo que cambia el valor de cada casilla en el arreglo disparador a (0), para borrar el disparador donde sea que esté.
Ciclo que cambia el valor de la casilla donde se requiera que esté el disparador, este valor es el número de columna en el que esté el mouse, al entrar a cualquier cuadrito Stakka.
mouseClicked Ciclo que evalúa en qué casilla se encuentra el disparador, para que escoga una pieza de la fuente de piezas si no ha escogido una ya, o si ya tiene una escogida, la tire. También le cambia el valor al atributo piezaescogida.


B. Condiciones

 Para que las piezas desaparezcan deben tener 6 cuadros del mismo color adyacentes a sí mismas
 El usuario no puede mover otras piezas del tablero aparte de las que se encuentran en la parte inferior.


1) En la clase moveListener
a. En el método mouseEntered

 La imagen del disparador no puede mostrarse en la última casilla de la fila donde se encuentra el disparador, porque está formada por dos casillas, por lo que se mueve una casilla atrás la figura para que no haya problemas.

 Si se ha seleccionado a una pieza de la fuente de piezas, al mover el mouse, se deben mover también la pieza seleccionada arrastrándola, por lo que se guardó su posición en la que se encontraba antes de mover el mouse, y se trasladó en la dirección que se ha movido el mouse, y además se borró la figura que estaba en la posición anterior creando una forma vacía.

 Si el mouse se mueve hacia la derecha solo se copian las Stakkas de la Derecha hacia su derecha, pero si el mouse se mueve hacia la izquierda, primero hay que mover las Stakkas que se encuentran a la izquierda del cuadrado, a su izquierda.





2) En la clase Tablero
a. En el método tirar(yeh : int)
 Cuando se intente tirar cualquier Figura (conjunto de Stakkas) se debe evaluar hasta qué momento deben ir subiendo fila por fila por el tablero de juego, esto es hasta que al menos un (Stakkas) encuentre arriba de él otro Stakka que sea de color distinto de 0. (Hasta que encuentre otra figura); ocurre un problema con la figura que es una “_” inferior, porque los (Stakkas) superiores encuentran una figura y para; por lo que se observa como que si la pieza quedara flotando, se debe hacer un caso especial para esta figura.
 Cuando se intente tirar una figura”|” sea de lado izquierdo o derecho, esta figura deberá encajar en un espacio donde haya un vacío correspondiente para sus casillas, por lo que se deberá evaluar en un caso especial.

b. En el método revisar (x: int ; y:int)
 Se debe evaluar si se empieza a revisar una figura Stakka con las coordenadas (x,y del parámetro) para comprobar si está al borde izquierdo del tablero, si no lo está, se debe evaluar si la Stakka que tenga a la izquierda ya se ha revisado. También se debe considerar que no se esté evaluando a una pieza izquierda de la figura misma. Es decir otra figura que no sea ella misma.
 Se debe evaluar si se está empezando a revisar una figura Stakka que esté al borde superior del tablero, si no es así entonces se debe volver a utilizar el mismo método mandándose como parámetro la coordenada de la Stakka en la posición superior a la coordenada original.
 Se debe evaluar si se está empezando a revisar una figura Stakka que esté al borde derecho del tablero, si no es así, entonces se debe volver a utilizar el mismo método mandándose como parámetro la coordenada de la Stakka en la posición derecha a la coordenada original.
 Se debe evaluar si se está empezando a revisar una figura Stakka que esté al borde inferior del tablero, si no es así entonces se debe volver a utilizar el mismo método mandándose como parámetro la coordenada de la Stakka en la posición inferior a la coordenada original.


c. En el método fall
 Se debe evaluar si al destruir alguna pieza, por circunstancias del juego, se halla quedado una figura que no era del mismo color de las piezas que se debían destruir, por lo tanto se observaría como si quedara flotando, por lo tanto también se debe destruir.

d. En el método construirForma
 Hay una condición múltiple que evalúa que tipo de forma se deberá construir, y dependiendo de esta figura, los 4 Labels que forman una pieza Stakka se llenarán con imágenes.