Está en la página 1de 12

Análisis De Programación

AnAlisis del
programa
José Pablo Castillo, Álvaro Bóleres, Luisa Portillo Díaz

Con este trabajo se dará a conocer un poco de cómo será creada la imitación del
juego Pumpkins, para ello se deben de tomar en cuenta las condiciones
establecidas por las instrucciones del juego para que el usuario puede utilizar el
programa con una interfaz muy agradable. El funcionamiento del juego consiste
básicamente en desaparecer una serie de imágenes, en este caso diamantes, al
momento en que el usuario decida dónde colocar las figuras para
poder juntar imágenes el mismo color y tipo para poder
eliminarlas y obtener la mayor cantidad de puntos.

Inicialmente se mostrará en pantalla un menú, con una breve


explicación de las instrucciones del juego. Al mismo tiempo, se
desplegará un botón donde al momento de hacer click en „Start‟ el juego iniciará.
Además, habrá otro botón con la opción de mostrar los puntajes más altos; éste
será un registro no volátil, ya que quedarán siempre guardados los nombres de las
personas y sus respetivos puntajes.

Al iniciar el juego, se mostrará en pantalla dos columnas con


imágenes preestablecidas según el nivel, en donde el usuario tendrá
que tomar la decisión en donde colocar las figuras para poder
alinearlas con tres o más figuras semejantes, para que de esta forma
Análisis De Programación

pueda obtener puntos. También se desplegará en pantalla el nivel en el que se


2
está jugando y puntaje mínimo a jugar.

Debido a que este juego posee un temporizador, si se llega al límite de tiempo y


no posee el puntaje mínimo del nivel el jugador perderá. Así mismo, cada vez que
el temporizador marque un múltiplo de 60 segundos, éste agregará una figura en
cada extremo de nuestra columna central, es decir, una columna extra del lado
izquierdo y otra del lado derecho. Otra manera de perder será cuando el usuario
no elimine imágenes similares y estas lleguen a topar en los extremos del tablero
de juego. Una vez el jugador pierda o gane en pantalla mostrará un mensaje, ya
sea para abandonar o iniciar de nuevo el juego. Al momento de perder, saldrá una
ventana en pantalla para pedirle al jugador que ingrese su nombre para guardarlo
en el registro.
Análisis De Programación

3
Entradas
Recibirá click izquierdo el cual servirá para que el usuario seleccione en
que fila desea colocar las imágenes.
La posición en la que se encuentra el mouse, sirve para saber en donde se
encuentra ubicado al momento que se tenga que hacer clic.
El nombre del jugador, el cual servirá para poder guardarlo en el registro y
luego poderse consultar los puntajes pasado.

Salidas
Se desplegará un bloque de instrucciones, en donde se indicarán las
condiciones al momento de jugar el cual poseerá el Titulo del juego y los
botones correspondientes
La ventada de High Scores, dando a conocer el registro de jugadores con
sus respectivos puntajes.
Al inicio, se mostrarán dos botones:
- High Scores.
- Start.
Se mostrará el tiempo de juego y el punteo que lleve el jugador.
Las próximas figuras que saldrán cuando el jugador coloque las que tiene
en ese momento.
Las Figuras en los extremos de la fla la cual esta sobrepuesto
El tablero del juego con las columnas con sus respectivas imágenes
correspondientes a cada nivel de juego.
Excepción mostrada como ventana de Dialogo para ingresar su nombre
después de haber concluido el juego
Ventana la cual muestra Felicidades /pesames conforme el cambio de nivel.

Condiciones
El juego se termina hasta que el usuario pierda o salga del juego.
Solamente habrá un aumento de puntos cuando existan de tres a más
figuras iguales juntas,.
Para que las imágenes se eliminen, tendrán que haber de tres a más
iguales juntas.
El juego mostrará solamente los puntajes de los jugadores que obtuvieron
la mayor cantidad de puntos.
El juego cada vez que el „timer‟ se encuentre en un múltiplo de 60
segundos, agregará una imagen de cada lado de la columna central.
Se perderá si se llega a topar el borde del tablero de juego.
Análisis De Programación

Se perderá si el tiempo final se acaba y no se ha llegado al límite de punteo


4
establecido en ese nivel.
El juego debe de mostrar los próximos caracteres a jugar.
El juego cuando suba de nivel deberá mostrar mas caracteres en el tablero
(figuras)
Las columnas centrales del tablero de juego no tienen que ser rectas, sino
alborotadas.
El juego debe llevar registro de los jugadores que han jugado y sus
puntajes.

Repeticiones
Se repite el proceso de registrar la matriz de true or false para saber en
dónde se encuentran semejantes. Este ciclo concluirá hasta que se llegue a
terminar la tabla.
Se repite el proceso de restructuración de la tabla de caracteres (cada
carácter se asocia a una imagen). Este dejará de repetirse hasta que ya no
hallan más de tres figuras alineadas.
Se repetirá el proceso de subir de nivel. Este se controlará hasta que el
usuario llegue a perder o decida salirse del juego.
Se repite la colocación de las figuras en donde el usuario decida, estas
colocaciones pueden ser muchas, solamente el usuario debe de controlar el
tiempo establecido y el puntaje mínimo para poder cambiar de nivel. Esta
repetición terminará hasta que el usuario cambie de nivel o llegue a perder.
Se repite el proceso de crear paneles (filas) donde el usuario podrá jugar,
(estas son las que cambian de color).
Se repite el proceso de adjuntar nuevos paneles al panel principal cuando
es presionado el botón de “play”. Se termina el ciclo cuando se acaben los
paneles de filas
Análisis De Programación

CLASES Y DESCRIPCION TECNICA


5

Clase: Tablero_inicio
Atributos:
Privados:
- tabla_string: Este es de tipo String y almacena la matriz.
- mul: Es de tipo entero, almacena la cantidad de imágenes de cada nivel.
- caracteres: Este será un atributo constante para todas las demás clases hijas, el
cual es de tipo String
con los caracteres: “abcdefghijklmnopqrstuvwxyz”.
-mi_randomizador: objeto de tipo Random que sirve para generar numero
aleatorios permitidos para la integración de caracteres(imágenes representadas)
aleatoriamente según el nivel.
-porsiacaso: Booleano que se encarga de verificar si efectivamente ya se utilizo
algún caso de ORDEN en un case, si en tal caso el case no ha establecido ningún
tipo aleatorio de orden en la columna, se utilizara uno pre disponible, por lo que es
necesario este boolean para verificar.

Protegidos:
- alto: El cual es de tipo entero y almacenará el alto de la matriz.
- ancho: de tipo entero y almacena el ancho de la matriz.

Métodos:
Tablero_inicio: Este es el constructor personalizado que no tiene valor de
retorno, pero será protegido. Tiene como parámetros el alto y ancho de la
matriz,y el nivel en el que se encuentra el jugador. Éste se heredará a las
clases hijas, su función inicial es establecer el tablero, debido a que
cualquier juego necesita uno. Este método creará las primeras columnas al
momento de inicial el juego en el centro del tablero. (recordando que no
necesariamente tienen que ser simetricas)
randomizarTabla: Este es un método de apoyo, el cual creará la tabla
aleatoria con los respectivos caracteres de cada nivel, por esa razón recibe
como parámetro el nivel. Este nivel será sumado al “carácter” quien define
como método de aumento exponencial (observar comportamiento)
haciendo los niveles de juego mas difíciles.
obtenerLetraRandom: Este método es de apoyo el cual se define para
establecer una letra sobre el tablero de juego, a manera que se devuelva un
carácter definido entre los parámetros del nivel en el que se está jugando.
En este caso habrá una variable que indicará hasta que número, según el
nivel, va a permitir que salgan ciertos caracteres de distinta forma.
Análisis De Programación

getArrayTabla: Método de servicio, este obtiene el String generado por el


6
método Tablero, el cual fue heredado, y con éste transforma su String en
una serie de matriz, de caracteres. Tiene como parámetros un String y
retorna un array.
getMul: Este método lo que hace es devolver la cantidad de caracteres
diferentes que se están jugando, así poderlo utilizar sabiendo cuantas
imágenes diferentes pueden haber según el nivel.
getCaracter: recibe como parámetro las posiciones del carácter en el vector
correspondiente devolviéndolo.
getCaracteres: retorna la lista de caracteres de los cuales hacer(según el
programador) referencia a la imagen correspondiente. Cada letra o carácter
en ese String significa una imagen diferente.

Clase: Diamond_game
Esta clase básicamente lo que va a hacer es obtener el puntaje y registrar los
movimientos internos del juego. Por cada moviendo que se tenga que realizar éste
hará las modificaciones y a su vez agregará puntaje a el usuario. Es decir que esta
clase manejará el proceso interno del juego, el cual administra todos los valores a
jugar.

Atributos:
Privados:
- próximos: es un arreglo de los próximos caracteres a jugar.
-actuales: son los caracteres actuales con los que se están jugando almacenados
en un arreglo. Estos son las figuras desplegaran en los extremos.
nivel.
- punteo: Es de tipo entero, el cual se encarga de almacenar el puntaje del
usuario.
Métodos:
Diamond_game: Este constructor toma como inicialización el constructor
del método heredado, así poder establecer los nuevos parámetros, tales
como el punteo y el nivel de juego.

Diamond_game: consturctor predefinido que lo que hace es en vez de


crear solamente un nuevo mundo, este crea un nuevo mundo y le da el
puntaje inicial. Se utiliza cuando se inicializa el juego, y se desea crear la
pantalla inicial con puntaje 0. Después de ello solo interesa jugar
cambiando el mundo, no el puntaje.

nuevoMundo: Este es un tipo de nuevo constructor predefinido que a su vez


crea el nuevo mundo, sin embargo devuelve un valor boolean el cual sirve
para el driver indicando que efectivamente paso o no de nivel.

moverCaracter: Este método recibe como parámetros una coordenada, la


cual indica la posición al momento del click y sobre esa fila se almacenaran
Análisis De Programación

horizontalmente las nuevas figuras. Si en tal caso adjuntarCosas () hace el


7
cambio, pero el verificador () dice que no hay ningún movimiento válido,
sólo es de modificar una sola línea para restarle puntos, o si no,
simplemente no hacerle nada.
getNextCatacteres: Este método indicará cuales van a ser la siguientes
figuras a las que deberán ser proyectadas en pantalla.
crearNextCaracteres: Este método CREA los siguientes caracteres a jugar,
y en palabras técnicas los mantiene en memoria, hasta que sean
necesarios.( lo almacena en próximos
adjuntarCosas: Este método corre los diamantes a colocar hasta su
extremo pegado a donde se quería colocar y a las columnas que ya están
en pantalla.
setPoints: Este método modifica el punteo actual del jugador ingresándole
uno nuevo.
getPoints: Devuelve el punteo del jugador
Verificador: Este método es de servicio que se encarga buscar tres o más
figuras en línea, no recibe ningún parámetro y tiene un valor de retorno
void.
Clase: HighScores

Esta clase su función esCrear un nuevo frame en el cual mostrara un cuadro de


texto con los valores de los puntajes mas altos y los respectivos dueños de tales
puntajes. Los ordenara en orden Descendente (mayor a menor) y los desplegara
en pantalla. Escribe y modifica textos.

Atributos:
Privados:
- highScore: Es de tipo entero y almacena los puntajes más altos del juego.
Métodos:
HighScores: Este método lo que hace es generar un String muy grande que
contiene tanto los nombres, como sus puntajes, para que después se
puedan mandar a llamar.
masPuntaje: Este método recibe como parámetros técnicamente cuántos
jugadores han obtenido los puntajes más altos y éstos devolverlos en un
array, esto es para poder mostrarlo más fácilmente en pantalla desde el
programa principal.
convertirString: Este es un método de apoyo que divide todo el programa en
Strings, a manera que se pueda localizar fácilmente por coordenadas de
fila, quién es el mayor, y quién es el menor, por nombre y punteo.
escribirDocumento: Este método escribe sobre el documento el nombre y el
puntaje de dicho jugador, tiene valor de retorno void.
Análisis De Programación

8 Clase: Mi_frame_variable

Esta clase es quien ejecuta el juego. Crea un objeto de la clase JFrame donde se
desplegaran los componentes sirviendo de maximun container. Este enviara de
parámetros al “mi_panel_tablero” una imagen, la cual establecera de fondo.

Métodos:
Public static void main:
aquí se creara un objeto tipo JFrame, y un objeto Panel_Tablero para
poder ejecutar el juego.

Clase: Panel_tablero

La función de esta cla4e es establecer la interfaz del usuario con el diseño del
cego. Crea en si adentro de si mismo varios Objetos del tipo Adjutntar Panel. Lo
que se pretende es llenarlo con este tipo de panel el cual puede tener varias
funciones diferentes. En la primera posición desplegara un panel el cual tienene a
su disposición mostrar el tiempo, el punteo y las respectivas imágenes
correspondientes. Despues este también administra la interfaz de botones, según
el usuario desee realizar una acción. Adentro posee clases internas las cuales
sirven como implemetaciones para utilizar Listeners y asi leer los eventos y
realizar una acción direcente. La clase también Implementa el MouesListener,
para asignarle a cadapanel del juego uno y asi poder decir pa posición actual que
esta señalando.

Atributos:
Privados:
- fondo_panel: Es la imagen de fondo del juego recibido en los parámetros del
mismo
-Mi tablero: objeto de Diamond game, el quien guiara el juego y lo administrara.
-play y highScore: Ambos botones objetos de Mi_Boton. Poseen ActionListeners
para cada uno. Play Inicializa la pantalla de Juego cambiando el Fondo del Panel
Principal y Quitando los bonotes (asi mismo también) para poder colocar los
paneles de juego. Highsocres abre otra pantalla de juego para poder mostrar asi
los puntajes de juego asi como nombres de los jugadores (Objeto de la clase
Highscore)
-forma: Es un objeto de gridLayout, el cual establecera la forma en la cual se
mostraran los componentes en el recipiente o contenedor, en este caso será el
mismo.
-Adjuntal_panel[] paneles_Juego: Arreglo de Adjuntar_Paneles que creara los
paneles en los cuales de mostraran por filas los componentes del Objeto Diamond
game, entablando la relación entre Gui y Command Line.
-panel_header: Objeto de la clase Adjuntar_panel el cual siempre estará
mostrándose en pantalla na vez el Jugador halla presionado Play, hasta que el
Análisis De Programación

juego finalize. Lo que va a cambiar va a ser el tiempo (debido a que esta en


9
constante cambio).
-punteo=0: Por motivos de Orden Es mejor Obtener el punteo en la clase principal
por aquello que este variando mucho en el objeto de Diamod_game, por lo que
aquí se mostrara de igual manera.
-Timer reloj: este es un objeto de tipo timer, el cual se encarga de generar eventos
cierto intervalo de tiempo generando un tipo de ilusión óptica de movimiento.
-juego [][]: Recibe un arreglo de la matris command line, y asi poder establecer las
imágenes espectivas a los paneles sobre las imágenes que deberán desplegar en
pantalla.
-mis_caracteres y mi_array_next: son Arreglos con 2 cuadrantes. En el primero se
establecen las imágenes actuales de juego, y en el segundo las imágenes a
desplegar después.
-temp: es un arreglo de 2 cuadrantes para establecer un valor de intercambio, y
realizar un cambio de información entre los 2 anteriores.

Métodos:
Panel_tablero:contructor, el cual su función es establecer su fondo y
generar los paneles del juego y dejarlos invisibles, hasta que el usuario
presione el botón “play”. Tambien genera los botones play y highscores,
que de desplegaran sobre el con el fondo de presentación predeterminado
hasta que el usuario realice una acción. Adentro de el también establece los
JLabels iniciales de cada panel presente para que se despliegue la matriz
tal como es en su debido orden (siempre seteando invisible hasta que el
usuario presioneplay)
paintComponent: de le hace @overriding a un método heredado en el cual
se establece el fondo del componente. En este caso se le hizo overriding al
componente cambiándole el fondo con un drawImage(); método que recibe
la imagen a ubicar, las posiciones x y Y iniciales y si posee algún grid
epecifico.
actionPerformed(actionEvent acción): este método es una implementación
de Action Listener, el cuan se le esta haciendo Overriding.para asignárselo
a el botón de highScore. Adentro genera un Objeto de tipo HIghscore y
despliega otra pantalla con los resultados
reestablecerBotones(booleans, JButton, JButton=: la función de este es
Crear dos botones a los cuales les asignar asi visibilidad y utilizada como lo
disponga el Boolean. Si en tal caso es falso, los botones desaparecerán y
cambiara el fondo, a “fondo de juego”, si es tru, los botones re aparecerán,
y el condo cambia a, fondo DE PRESENTACION y mostrara los botones.
MouseEntered(MouseEvent): Overriding de MouseListener implementado
en Panel_tablero. Lo que hace es que cuando se entre al objeto asignado
con este listener, leerá que componente es
Análisis De Programación

(Componente)event.getSource(), y se mostrara que JPanel de


10
Adjunta_paneles fue activado. Después de determinar que panel fue
seleccionado mostrara en sus extremos los caracteres con los cuales se eta
jugando
MouseExited(MouseEvent) lo que hace es cuando el cursor se va del area
asignada, en este caso un JPanel de Adjuntar_paneles, este volverá a su
estado inicial colocando en sus extremos las figuras no reconocidas
(vacias) dejando asi el panel original.
MouseClicked(mouseEvent): Su función es que genere movimiento de los
caracteres en sus extremos del panel, hasta que se topen con otros objetos
dentro del mismo. Después de ello generara una comparación si
efectivamente hay iguales. Si en caso hay iguales el método se encargara
de Diamond_game de eliminarlos

Inner Clases:

MotionPerClick:

Este es una clase interna implementando ActionListener. Este


efectuara un movimiento o animación del movimiento de los caracteres. También
afectaría la simulación de movimiento del fondo del tablero generando una especie
de movimiento oceánico de agua en el fondo del juego. También generara acción
de contar cada cuanto aumentar un segundo a nuestro timer, así cuando este
llegue a 3 minutos que este cambie de nivel.

BotonLIstener

Innerclass que esta asignada al botón de Play. Este Oculta todos lo


posible y vuelve a limpiar el panel colocando los paneles de juego (incluye llamar
al método reestablecerBotones().

Clase: Adjuntar_panel

Clase cuya función es generar los paneles Transparentosos interpolando su color


actual con el fondo del panel donde se coloca. Este método tiene dos tipods de
constructores predefinidos. Un método predefinido crea el Header del juego, y el
otro genera los paneles los cuales se seleccionan para jugar y colocar allí las
imágenes del juego.

Atributos:
Privados:
Análisis De Programación

- mis_imagnes[]: son JLabels los cuales almacenaran las imágenes de cada


11
representación de nuestro objeto Diamond_game haciendo la matriz visualmente
atractiva (por fila).
-forma_uno: Es un objeto de Gridlayout que establecerá la forma del componente.
Tran: variable tipo float que establece la transparencia del panel.
-tiempo: variable int, que su función es llevar el tiempo desplegado en caso el
constructor sea header.
-numero: numero establece el valor del Adjuntar panel, en caso sea un objeto, el
objeto ya posee un identificador que lo identifique.(ID)
Métodos:
AdjuntarPanel(): Constructor que recibe de parámetros; la figura del reloj, el
tiempo inicial, La imagen del dinero, el punteo de inicio, la imagen futura a
desplegar y la segunda imagen futura a desplegar.
AdjuntarPanel().Constructor predefinido que recibe de parameárosla
cantidad de imágenes (la fila) que va a almacenar y el identificador que le
pertenece. Recibe la cantidad de filas para saber el grid que hay que
colocarle al panel.
setAdjuntarImagener(int posición, ImageIcon icono): método que recibe la
posición de la imagen en la matris “mis_imagenes” y el icono que habra de
colocarle a esta JLabel.
addComponentsS(): método de apoyo queabrega los componentes al
panel.
addComponentsEx(ImageIcon derecho,ImageIcon izquierdo) : recibe las
figuras en los extremos que se deben colocar simulando asi que las
próximas figuras lo siguinen a donde el mouse se mueva.
getTran(): regresa el valor de transparencia, necesario para
paintComponent quien dice la transparencia de interpolación de pixelado.
setTran(float invisible): es un método publico de servicio que su función es
restablecer el nivel de transparencia del panel. Nos sirve para saber cual
panel hemos seleccionado y donde nos encontramos posicionados Es
utilizado en Pane_tablero, para cantesta o no esta sobre un icono cambia el
calor de su transparencia, aparentando selección.
getNum(): método de Servicio que regresa el Identificador del panel.
Análisis De Programación

12 Clase: JPanelRound

Esta clase es heredada hacia AdjuntarPanel. La creación de esta Clase se llama


Edisoncor y le damos las gracias por ofrecernos su clase para libre uso. Se le
esta dando crédito por su contribución a este trabajo. Esta clase Crea tres colores,
sea cual sea su valor simbolizan la orilla el centro y el fondo del panel. Este
también genera los ARCOS en los paneles tornando sus orillas redondas y mas
suaves a la vista.
Fuente: Edisoncor,2007,”Crear JPanel Redondeado”,Edisoncor’s Weblog,
citado el: Miercoles 3 Noviembre,
Enlace al: http://edisoncod.wordpress.com/2007/11/26/jpanel-redondeado/
Se le agradece Por su contribución y Turoriales de Modificacion de recursos graficos.