Informe del TRABAJO PRACTICO 1 (3er entrega)

Integrantes del grupo

Nombre

Email

 

Alejandro Valdez

 

 

avaldez(ARROBA)dc.uba.ar

 

Enunciado

 

 

Implementar el Pacman.

 

 


Índice

 

-         Comentarios sobre los cambios en esta entrega

-         Diagramas del modelo

o       Diagramas de clases del modelo

o       Diagramas de instancias del modelo

o       Diagramas de secuencia del modelo

§         Diagramas modificados desde la entrega anterior

§         Diagramas que tenían errores en la entrega anterior

§         Diagramas nuevos desde la entrega anterior

-         Diagramas de la vista

o       Diagramas de clases del modelo

o       Diagramas de instancias del modelo

o       Diagramas de secuencia del modelo

§         Diagramas modificados desde la entrega anterior

§         Diagramas nuevos desde la entrega anterior

-         Apéndice A: Como iniciar el juego

-         Apéndice B: Artwork (otro cierre informal)

 

Algunos gráficos no logré que se vean lo suficientemente bien,  en caso de que no sean legibles se puede encontrar  un file-out de la jerarquía de Jacaranda con los gráficos originales en el directorio ‘jacaranda’.


 

Comentarios sobre los cambios en esta entrega

 

Cambios del modelo

 

En la entrega anterior cada personalidad distinta de Ghost  (Blinky, Pinky, Inky y Sue) era una clase distinta que heredaba de la clase Ghost. En esta versión reemplacé ese comportamiento por métodos de clase para obtener instancias ya inicializadas de la clase Ghost. Este cambio prácticamente no produjo ningún impacto en el modelo, se reemplazaron los anteriores métodos de clase normalSpeed, normalStrategy y smartness por colaboradores internos inicializados de acuerdo al tipo de Ghost del que se trate. Una situación análoga se dio con los distintos tipos de Fruit.

 

Mientras probaba el juego descubrí que cuando aPacMan comía a los ghosts que estaban débiles, no se incrementaba el score del jugador. Un breve repaso del modelo y una agarrada de frente después me di cuenta que ese comportamiento no estaba modelado por ningún lado, no lo había tenido en cuenta durante el diseño. Aunque no estaba dentro de las correcciones que tenía que hacer, me pareció que correspondía arreglarlo y para ello agregué una nueva clase al diseño: GhostManager (deberían prohibir la palabra manager en los TPs).

El nombre que elegí esta muy lejos de reflejar su comportamiento, pero la nombré así para mantener el pobre esquema  de nombres que asigné anteriormente. La responsabilidad de esta clase es la de encontrar los ghosts que fueron comidos en el turno actual y sumar el puntaje que corresponde a cada uno de ellos al score del jugador.

Se hace cada vez mas evidente que PillManager, PowerPillManager y GhostManager terminan ocupándose del scoring de juego y es un comportamiento común que podría llegar a extraerse en sucesivas iteraciones del modelo.

 

 

Cambios de la vista

 

Modifiqué las clases GhostView, PacManView y FruitView para que hereden de ImageMorph y de esa manera poder mostrar un archivo GIF que ciertamente hace mas lindo al juego.

 

Modifiqué la implementación de updateView en los actores para que al posicionar el Morph se tenga en cuenta la posición del tablero dentro del World de Squeak. De esta manera se puede mover el juego a cualquier parte de la pantalla.

 

Agregué tres botones para comenzar / pausar, reiniciar y salir del juego. Estos botones envían mensajes a aPacManGameView que a su vez envía mensajes al modelo para que las acciones del usuario tomen efecto.

Aproveché el agregado del botón de salida para eliminar la instancia de aGameTimer que utiliza el juego (antes debía eliminarse a mano) y para eliminar las subvistas de aPacManGameView.

 

Sobre la sensación de que se pierden eventos de teclado en el juego, creo que se produce porque el juego funciona terriblemente lento y no por un problema de manejo de eventos (el manejo del teclado es el mismo que mostró Hernan en clases, que a su vez es el mismo del Tetris que trae Squeak). El usuario se impacienta y mueve las teclas reflejando la velocidad que espera ver en la pantalla y no a la que realmente se está desarrollando el juego. Esto produce la sensación de que aPacMan no va hacia donde uno quiere, aunque lo que en realidad sucede es que el usuario pensó el siguiente movimiento e indicó que fuera en otra dirección antes de que el pobre bicho tuviera la oportunidad de reflejar la primer intención del jugador (observé este tipo de situaciones mirando las manos de mis amigos cuando probaban el juego).


 

Diagramas de clase del modelo

 

 

 

 

 

 





 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 


 Diagramas de instancias del modelo

 

 


Diagramas de secuencia del modelo

 

Diagramas modificados desde la entrega anterior

 

aRuleManager procesa las reglas del juego:

 

 

 

 


 

aLeaveHome (una estrategia) termina su trabajo y pone al aMovilActor que tiene asociado (aBlinky) en estado normal para salir a perseguir al engreído PacMan:

 

 
Diagramas que tenían errores en la entrega anterior

 

aPillManager elimina las pills comidas:

 


aPowerPillManager elimina las powerPills comidas:

 

 

 

 

 

 


Diagramas nuevos desde la entrega anterior

 

aPacManGame crea los actores del juego:

 


Creación de aGhost (en este caso aBlinky):

 

 

Creación de aFruit (en este caso aCherry):

 
aGhostManager procesa aPacManGame:

 

 

 

 

 

aGhostManager encuentra a los ghosts que estaban comidos y fueron revividos en el último turno, los quita de su conjunto de ghosts comidos que ya fueron sumados al score:

 

 


 

aGhostManager detecta a los ghosts que fueron comidos en el último turno y los agrega luego de sumar su score, los agrega a scoredGhosts:

 


aGhostManager agrega el score de los ghosts comidos en el último turno:

 

 
 Diagrama de clases de la vista

 


 

Diagrama de instancias de la vista

 


 

 

Diagramas de secuencia de la vista

 

Diagramas que fueron modificados desde la entrega anterior

 

Se crea una vista:


Se crea aGhostView:


aGhostView se actualiza:

 


Diagramas nuevos desde la entrega anterior

 

El usuario inicia el juego:

 


El usuario pone pausa al juego:

 


El usuario hace reset del juego:

 

 


El usuario sale del juego:

 

 


Apéndice A: Como iniciar el juego

 

En el archivo ZIP donde se entrega este trabajo, en el directorio ‘pacMan’ se encuentran los file-out de las distintas categorías de clases que componen el trabajo y los archivos gráficos necesarios para que se vea lindo.

 

Para tener un instalación funcionando del trabajo, sugiero realizar los siguientes pasos:

 

-         Copiar una imagen limpia de Squeak 3.6-5429 al directorio pacMan.

-         Cerrar todas las ventanas que aparecen inicialmente en el World.

-         Iniciar Squeak, abrir un File List en la solapa Tools del World.

-         Hacer file-in de los siguientes archivos, en el orden dado:

o       TP-Strategies.st

o       TP-Managers.st

o       TP-Actors-Abstract.st

o       TP-Actors-Mobile.st

o       TP-Actors-Static.st

o       TP-Core.st

o       TP-Morphic-Static.st

o       TP-Morphic-Movil.st

o       TP-Morphic-General.st

-         Cerrar el File List y abrir el Transcript desde la solapa Tools.

-         Evaluar: PacManGameView new.

 

Aparecerá en la esquina superior izquierda una vista del juego, para que la vista reciba los eventos del teclado es necesario minimizar el Transcript (y cualquier otro browser o inspector) y colocar el puntero del mouse sobre la vista. En esta situación las teclas con las que funciona el juego son:

 

            UP: PacMan hacia arriba

            DOWN: PacMan hacia abajo

            LEFT: PacMan hacia la izquierda

            RIGHT: PacMan hacia la derecha

 

Y los botones START, RESET y EXIT.

 

Notar que ahora sí se puede arrastrar la vista a otra posición de la pantalla (por favor,  hágalo se ve tan lindo que me emociono cuando lo veo J).

Apéndice B: Artwork (otro cierre informal)

 

Este es el fondo de pantalla de mi escritorio desde hace dos meses: