Email |
|
avaldez(ARROBA)dc.uba.ar |
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 instancias 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
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:
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).