Está en la página 1de 11

Universidad del Valle de Guatemala

Programación Orientada a Objetos


Autores: 10189, Jennifer Valdez
10256, Sergio Molina
10278, Juan Fernando Orellana
Sección: 12
Fecha de la primera entrega: 3 de noviembre de 2010

ANÁLISIS DEL PROYECTO No. 2

a) ENTRADAS

 Click sobre un Panel


 Moverse sobre los Paneles
 Click sobre los Labels en el menú, en las instrucciones o cuando perdió para
volver a jugar.

b) SALIDAS

 Se muestra un menú con las opciones de jugar o ver instrucciones.


 Se muestran las instrucciones con la opción de jugar.
 Se muestra el tablero con los 8 Paneles.
 Se muestran las piezas visibles en el tablero.
 Se muestra ambas piezas de los lados del panel en donde se posee el mouse.
Estos son las piezas que serán agregados a cada fila (Panel).
 Se muestran dos piezas de next que indican que piezas tendrá al siguiente tiro.
 Se muestra el tablero luego de eliminar los botones con el mismo identificador.
 Se muestra el punteo.
 Se muestra el nivel.
 Cuando se pierde se muestra un Panel que indica que perdió, en ese panel se
muestra el link del blog y hay una opción para volver a jugar.

c) CONDICIONES

 Si se coloca más de 6 piezas en un lado de la fila pierde.


 Si existen tres o más piezas iguales juntas se deben eliminar.
 Si se eliminan piezas se deben correr los demás.
 La imagen de la pieza según su identificador (constructor de Pieza)
 Solamente se activan los objetos al presionar el botón izquierdo del mouse
 Si no ha perdido permite seguir colocando piezas en las filas.
 Si las piezas de los laterales no están en movimiento hacia la matriz se puede
mover el mouse y visualizar donde se puede dar click.
 En los timer para moverse si la posición no es igual a la deseada se sigue
recolocando hasta llegar a la posición deseada.
 En verificar de la clase Juego si ha habido cambios se vuelve a verificar.
 En intercambio si la pieza no es null y la siguiente si (según este de lado derecho o
izquierdo) entonces se intercambian.
 En eliminar de la clase Juego se eliminan solo si no son null.
 En revisar de la clase Juego si las coordenadas se salen de la matriz, o la pieza es
null, o dichas coordenadas ya fueron evaluadas entonces regresa cero.
 Al colocar las piezas iniciales en el juego si una pieza es igual a otra que está junto
a ella se vuelve a asignar otro valor hasta que sean diferentes.
 Si ha realizado 10 tiros o múltiplo de éste (sin ser múltiplo de 20) es turno de la
pieza especial de la bala.
 Si ha realizado 20 tiros o múltiplo de éste es turno de la pieza especial de la
bomba.
 Si tiró una bala se debe eliminar la fila completa.
 Si tiró una bomba debe eliminar a todas las piezas con el mismo identificador que
quedó a la par de la bomba.
 Si la bomba o la bala no tocan otras piezas nada debe ser eliminado.
 Si hace click en una fila donde ya no hay espacio pierde.

d) DESCRIPCIÓN DE CICLOS

 Se realiza un for controlado por un contador i < 8 para crear los 8 Paneles con sus
respectivas características.
 Para crear la matriz de botones se realiza un doble for, controlados por contadores
y crea cada pieza de la matriz.
 Mientras la pieza inicial colocada sea igual a otra junto a ella se cambia.
 En eliminar se realiza un for controlado por un contador i, mientras sea menor al
tamaño del vector de coordenadas que debe eliminar.
 En intercambio se realiza un for controlado por un contador i que recorre toda la
fila evaluando si debe realizar un cambio.
 En reposicionar se realiza el for controlado por i < 8 para evaluar los 8 paneles del
tablero.
 Mientras haya un cambio se debe repetir la función, tanto en reposicionar como en
verificar.
 Se realiza un doble for para revisar todas las piezas.

e) PROGRAMA PRINCIPAL – método main

Clase: JuegoMario
Se importó javax.swing.* y java.awt.*. Se creró la ventana de tipo JFrame llamada form
con su respectivo título; luego se definió que hacer cuando la ventana se cierre lo cual era
terminar la ejecución del juego. Se creó un objeto de la clase Menu, el cual se agregó al
JFrame. Se estableció que no se pudiera cambiar de tamaño a la ventana, luego se
adapto el tamaño a los componentes. Se indicó que al salir la ventana se mostrara justo
en el centro de la pantalla y por último se establece que sea visible dicha ventana.

f) CLASES

Clase: Panel

Hereda de: JPanel

Atributos

Visibilidad Identificador Tipo Descripción


Privado no_fila int Es el número de fila en el tablero
Privado imagenFondo ImageIcon Es la imagen que tendrá de fondo el Panel
Privado height int Es el alto que tendrá cada Panel
Privado org SpringLayout Es el layout que tendrá el panel

Métodos

 public Panel(int no_fila, int height, ImageIcon img)

Se llama al constructor de la clase JPanel (clase madre) y luego se inicializa el valor de su


atributo con los parámetros ingresados y se cambia el layout con el org.

 public int getNo_fila()


Devuelve el valor del atributo no_fila {int} de la clase.

 public SpringLayout getOrg()

Devuelve el valor del atributo org {SpringLayout} de la clase.

 public void paintComponent(Graphics g)

Se dibuja la imagen en el parámetro g; estableciendo la imagen de fondo desde 0,0 con


largo de 700 y alto del tamaño del atributo height; luego se establece que no sea opaca
para que se pinten todos los pixeles y por último se manda a llamar al paintComponent de
la clase madre con el g modificado con la image.
 public void setImageBg(ImageIcon img)

Cambia el valor del atributo imagenFondo con el valor que trae el parámetro; luego manda
a llamar al paintComponent para que se vuelva a dibujar la imagen de fondo.

Clase: Pieza

Hereda de: JLabel

Atributos

Visibilidad Identificador Tipo Descripción


Privado pos_x int Es la posición en x en el tablero
Privado pos_y int Es la posición en y en el tablero
Privado identificador int Indica que imagen tendrá el botón
Privado parent Panel Es el panel en el cual estará contenido

Métodos

 public Pieza(int pos_x, int pos_y, int id, Panel parent)

Se llama al constructor de la clase JLabel (clase madre) introduciendo como parámetro


una imagen que se determina por el id. Luego se inicializan los cuatro atributos;
identificador, paren, pos_x y pos_y con los valores ingresados en los parámetros.

 public void setPos_x(int pos_x)

Se cambia el valor del atributo pos_x con el valor del parámetro pos_x ingresado.

 public void setParent(Panel parent)

Se cambia el valor del atributo parent con el valor del parámetro Panel ingresado.

 public void setIdentificador(int id)

Se cambia el valor del atributo identificador con el valor del parámetro id ingresado.

 public int getPos_x()

Devuelve el valor del atributo pos_x {int} de la clase.


 public int getPos_y()

Devuelve el valor del atributo pos_y {int} de la clase.

 public int getIdentificador()

Devuelve el valor del atributo identificador {int} de la clase.

 public Panel getParent()

Devuelve el valor del atributo parent {Panel} de la clase.

 public void colocar(int x)

Primero se agrega la pieza actual al parent. Se crea una variable SpringLayout que fue el
layout utilizado para determinar posiciones de los componentes en los paneles; dicha
variable recibirá el layout del panel; luego con esta variable se especifica a le distancia se
mostrará la pieza actual de la esquina izquierda del Panel.

Clase: Juego

Hereda de: JPanel

Atributos

Visibilidad Identificador Tipo Descripción


Privado tablero Panel [] Vector de paneles que contendrá el tablero.
Es donde existen algunos componentes de
Privado control_up Panel
control y está arriba de control_down.
Es donde existen algunos componentes de
Privado control_down Panel
control y está abajo de control_up.
Privado piezas Pieza[][] Matriz de piezas para el trablero
Pieza que será colocada en el tablero de lado
Privado pi_iz Pieza
izquierdo.
Pieza que será colocada en el tablero de lado
Privado pi_der Pieza
derecho.
Pieza que muestra cual será la siguiente pieza
Privado next_iz Pieza
que estará en juego de lado izquierdo.
Pieza que muestra cual será la siguiente pieza
Privado next_der Pieza
que estará en juego de lado derecho.
Privado lose boolean Indica si no ha perdido el juego.
Privado loser Perdio Panel que se muestra al momento de perder.
Métodos

 public Juego()

Se crea el panel contenedor que todo el juego, se le cambia a la clase al layout a


GridLayout con una casilla para que siempre salgan los paneles pegados a la ventana. Se
cambia el layout del parent (panel contenedor) a GridLayout para manejar como matriz el
tablero de juego, se colocó de 10 x 1 porque son 8 posiciones un control_up y un
contro_down. Se inicializaron los atributos y las variables; todas las booleans (lose,
en_movimiento, movei, moved, elimino) son falsas; luego se crean los dos timers
indicando que cada 3 ms se dispare el método correspondiente. Se crea el tablero de 8
posiciones y por medio de un ciclo se crearon los 8 Paneles indicando su posición, que
su altura es de 50 y la imagen correspondiente (fondo sin luz porque no está encima el
mouse); se elige el tamaño de cada Panel el cual es de 700 x 50; luego se le agrega el
Listener OnMousePanel y por último se añade al parent. Se crean control_up y
control_down y se agregan al parent. Se establece que empieza en el nivel 1, y con 0
puntos, además se crea la variable random para escoger número al azar los cuales serán
los identificadores de las piezas. Se crean los objetos encargados de mostrar el estado
del juego, es decir, que muestran el punteo y el nivel; dichos objetos se agregan al parent;
cada panel contiene el layout SpringLayout, el cual permite colocar a cierta distancia
específica los objetos; con dicho layout se posicionaron los objetos de control del juego.
Se crean la matriz de piezas de 12 x 8; cada pieza se crea por medio de un ciclo doble,
dentro del siclo se crean la pieza con un identificador aleatorio, si el identificador esta a la
par de otro igual lo cambia hasta que sea diferente, de esta forma no quedan figuras
iguales juntas y cada pieza se coloca en su respectivo Panel.

 public int revisar(int px, int py, int id, int izde)

Se crea un String llamado s, el cual se le asigna las coordenadas actuales con los valores
que fueron ingresados en los parámetros; s tiene el siguiente formato: s = px + “,”+py+”:”.
Luego se evalúa si px y py siguen dentro de la matriz; luego si la matriz en la posición px,
py no es igual a null, la matriz en la posición px, py llama a getIdentificador() y lo compara
con id, los cuales deben ser iguales y coord._iz o coord._der que son un String global no
posee dichas coordenadeas entonces si izde es igual a cero se le agrega a coord._iz las
coordenadas actuales sino se le agrega a coord_der las coordenadas actuales, y se
devuelve 1 + revisar (x+1,y,id,izde) + revisar(x-1,y,id,izde) + revisar(x,y+1,id,izde) +
revisar(x,y-1,id,izde) , en caso no se cumpla una de las cuatro especificaciones la función
devuelve 0.

 public void eliminar(String s)

Crea dos vectores de String xy y coord.; coord será el s convertido en vector por medio de
Split separado por “:” así separamos las coordenadas que debemos eliminar; luego desde
0 hasta el tamaño de coord. Se crea xy con Split separado con “,” de coord en la posición
correspondiente para separar la coordenada x de la coordenada y las cuales revisan que
si la pieza es diferente de null entonces se elimina del parent; por cada pieza eliminada se
suma 5 puntos y se establece el nivel según los puntos; cada 500 puntos hay un cambio
de nivel, luego se actualiza el Panel y se le asigna que es igual a null. Luego se actualizan
los datos para que se muestre en pantalla.

 public boolean intercambio(int y)

Se crea una variable boolean que inicia con false llamada change y especificara cuando
cambio algo de posición; desde 0 hasta 4 (lado izquierdo del tablero) se evalua si piezas
en la posición i,y es diferente de null y piezas i+1,y es null entonces change recibe true e
intercambia la pieza i,y por la i+1,y así queda el null de lado izquierdo; de igual forma se
hace de lado derecho solamente que se evalua el i-1. Este método regresa change, es
decir, es true si hubo algún cambio en la matriz.

 public void reposicionar()

Se hace un ciclo que recorra todas las filas de tablero llamando a intercambio mientras
sea verdadero; al momento de ser falso quiere decir que la fila ya está en orden por lo que
ya se puede paras a la siguiente fila.

 public void verificar()

Se crea una variable boolean llamada cambio que inicia falsa, indicará si hubo algún
cambio en la matriz. Se crea un entero llamado ne para contabilizas número de piezas
iguales. Por medio de un ciclo doble se recorre la matriz y en cada posición se llama a
revisar y se le asigna dicho valor a ne. Si ne>2 entonces cambio es verdadero y se manda
a eliminar y luego a reposicionar. Al terminar los ciclos se evalua y si cambio fue true
entonces llama recursivamente a verificar, hasta que ya no elimine mas piezas.

 public void evaluar()

Se colocan en las posiciones originales a pi_iz y pi_der, se vuelven visibles según toque
bala, bomba o pieza normal; si el valor de iguales de lado izquierdo es mayor que dos
elimina las coor_iz y establece que elimino es verdadero; de igual forma se evalua de lado
derecho. Si elimino es verdadero entonces llama a reposicionar y luego a verificar.

 public void bala(int fila)

Se crea un string llamado s que guardará las coordenadas de las piezas que debe
eliminar; revisa en toda la fila por medio de un for, y si la pieza existe entonces sus
coordenadas son agregadas al string; luego se llama a eliminar enviando como parámetro
el string con las coordenadas, luego se reestablece el punteo y el nivel y se muestran en
pantalla; por último se colocan y se vuelven visibles las piezas laterales.
 public void bomba(int id)

Recorre toda la matriz buscando piezas con el identificador del parámetro; al encontrar
agrega su coordenada en un string que al terminar el for se llama a eliminar con dicho
string; luego se reestablece el punteo y el nivel y se muestran en pantalla; al eliminar se
llama a reposicionar y a verificar por si acaso existen de nuevo tres piezas iguales juntas;
por último se colocan y se vuelven visibles las piezas laterales.

Private class TimerPiezaIz Implementa de ActionListener

 public void actionPerformed(AcionEvent event)

Si posición es menor que a donde debe llegar o si la pieza es diferente a una bala se le
suma 5 a posición y se coloca en su nueva posición; esto es para animar el juego al
momento de darle click. Si ya llego a donde debería se detiene el timer izquierdo se
detiene; luego se establece que movei es falso, se coloca la pieza ya en lo posición
exacta de donde debería posicionarse, luego se evalúan los click y si ya pasaron 10 clicks
se cambia el identificador del next a una bala; luego si ya pasaron otros 10 click se
cambia el identificador del next a una bomba y así sucesivamente, si no es múltiplo de 10
el lanzamiento el identificador del next izquierdo se escoge aleatoriamente; luego se
cambia el identificador de pi_iz por el identificador que tenía el next_iz. Se evalúa si la
pi_der aun se mueve y si no entonces en_moviemiento es igual a falso, al ocurrir esto se
verifica y si la pieza es una bomba se manda a llamar al método bomba sino manda a
llamar a evaluar.

Private class TimerPiezaDer Implementa de ActionListener

 public void actionPerformed(AcionEvent event)

Si posición es mayor que a donde debe llegar o si la pieza es diferente a una bomba se le
resta 5 a posición y se coloca en su nueva posición; esto es para animar el juego al
momento de darle click. Si ya llego a donde debería se detiene el timer derecho se
detiene; luego se coloca el identificador del next derecho a la pieza lateral derecha; luego
se evalúa y si ya pasaron 10 turnos se cambia el next derecho a una bala, luego a los
siguientes 10 turnos se cambia por una bomba y así sucesivamente; luego se establece
que moved es falso, se coloca la pieza ya en lo posición exacta de donde debería
posicionarse, si no toca bala o bomba el identificador de next_der se selecciona al azar
para sacar otra pieza aleatoria. Se evalúa si la pi_iz aun se mueve y si no entonces
en_moviemiento es igual a falso, al ocurrir esto se evalúa y si la pieza lanzada es una
bala manda a llamar al método bala, sino manda a llamar a evaluar.

Private class OnMousePanel extiende de MouseAdapter

 public void mouseEntered(MouseEvent event)


Se evalúa si no está en movimiento entonces se realiza un casting del objeto que disparó
el evento para que sea un Panel, se crea un entero que se le asiga el getNo_Fila del
Panel; se crea una ImageIcon con la imagen del fondo del panel pero con más claridad,
luego se cambia el fondo a esta imagen así cuando el mouse entre al panel se observa
que el fondo es más claro; luego la pi_iz y la pi_der se les cambia de parent, siendo sus
nuevos parents el panel en donde está el mouse; se colocan en dicho parent el cual se
actualiza, para mostrar dichas piezas.

 public void mouseExited(MouseEvent event)

Se evalúa si no está en movimiento entonces se realiza un casting del objeto que disparó
el evento para que sea un Panel, se crea un entero que se le asiga el getNo_Fila del
Panel; se crea una ImageIcon con la imagen del fondo del panel original, es decir, sin luz;
luego se cambia el fondo a esta imagen así cuando el mouse salga del panel se observa
que el fondo vuelve a ser el de antes; luego la pi_iz y la pi_der se eliminan de este panel,
el cual se actualiza y así ya no se muestran estas piezas en él.

 public void mouseClicked(MouseEvent event)

Si no está en movimiento entonces se realiza un casting del objeto que disparó el evento
para que sea un Panel, se crea un entero que se le asiga el getNo_Fila del Panel. Luego
se hace un for donde se calcula el valor de im, el cual es cuantos espacios debe moverse
hasta llegar a uno ocupado. Si im es igual a cero entonces lose = verdadero; sino xi
recibirá cuanto se debe mover en pixeles; lo mismo se realiza con el lado derecho se hace
el for y evalua si lose es falso para calcular jm y luego si jm es igual a 11 entonces lose =
verdadero el juego sino xd se calcula el cual es la distancia que se mueve la pi_der. Si
lose es falso entonces las piezas se crean en el tablero, sus posiciones iniciales de
movimiento es 0 y 650 para la pi_iz y la pi_der respectivamente, la varialble
en_movimiento, movei y moved se vuelven verdaderos, se le suma al contador de click 1
y luego se limpian las coordenadas y se inicianlos timers. Si lose es verdadero entonces
se crea loser de la clase Perdio, se remueve el parent y se agrega loser.

Clase: Perdio

Hereda de: JPanel

Atributos

Visibilidad Identificador Tipo Descripción


Privado play JLabel Será el botón para volver a jugar
Privado parent Panel Panel que contiene a perdio
Si se vuelve a jugar se crea un objeto de la
Privado game Juego
clase Juego
Métodos

 public Perdio()

Se cambia el layout a GridLayout(1,1) para que los objetos salgan pegados a la ventana;
crea el label con una imagen para jugar de nuevo, se le agrega el MouseListener. Se crea
el parent y se agrega el label a este parent; se crea un SpringLayout para posicionar el
boton dentro del parent; luego se posiciona el botón estableciendo las distancias tanto de
top como left; se asignan las dimensiones del parent y se agrega a la clase.

Private class OnClick extiende de MouseAdapter

 public void mouseClicked(MouseEvent event)

Se crea un nuevo Juego, se remueve el parent y se agrega el nuevo juego.

Clase: Menu

Hereda de: JPanel

Atributos

Visibilidad Identificador Tipo Descripción


Privado play Pieza Será el botón para jugar
Privado instrucciones Pieza Será el botón para ir a las instrucciones
Privado parent Panel Panel que contiene a Menu
Privado game Juego Es el panel del Juego
Privado inst Instrucciones Es el panel de las instrucciones

Métodos

 public Menu()

Se cambia el layout a un nuevo GridLayout(1,1) para que los objetos estén pegados a la
ventana, luego se crean los botones (jugar y de instrucciones); luego se le agrega el
listener a ambos botones. Se crea el parent, se crea un SpringLayout para colocar los
botones en el parent en su posición exacta; los botones se posicionan y se agregan al
parent; se le define el tamaño al parent y se agrega a la clase.
Private class OnClickPlay extiende de MouseAdapter

 public void mouseClicked(MouseEvent event)

Se crea game, el parent se remueve y se añade game a la clase.

Private class OnClickInst extiende de MouseAdapter

 public void mouseClicked(MouseEvent event)

Se crea inst, el parent se remueve y se añade inst a la clase.

Clase: Instrucciones

Hereda de: JPanel

Atributos

Visibilidad Identificador Tipo Descripción


Privado play Pieza Será el botón para jugar
Privado parent Panel Panel que contiene a instrucciones
Privado game Juego Es el panel del juego

Métodos

 public Instrucciones()

Se cambia el layout a GridLayout para que los objetos queden pegados a la ventana; se
crea el boton para jugar, se le agrega el Listener. Se crea el parent y se le agrega el
botón; se crea un SpringLayout para posicionar el boton dentro del paretn y se coloca; se
le define tamaño al parent y se añade a la clase.

Private class OnClick extiende de MouseAdapter

 public void mouseClicked(MouseEvent event)

Se crea el Panel Juego,se remueve el paren y se agrega a Instrucciones a la clase.

También podría gustarte