miércoles 25 de julio de 2007

Modelando el juego de la oca...

En el trabajo se esta realizando un curso de objetos, y me postule para dar un ejercicio. Queria ver como era dar una clase y todo eso.

Decidi modelar el juego de la oca, la clase la presente con diagramas de secuencia, pero para que se vea que sirve de algo pensar en un modelo, tambien implemente lo modelado en Squeak, para que me "crean" un poco la utilidad de pensar un modelo.

Les paso el link con el paquete de Monticello para que puedan ver el modelo, criticarmelo, destruirlo, basurearlo o lo que sea.

Para poder verlo tienen que hacer lo siguiente:

Abrir un Squeak, hacer click sobre el boton izquierdo.


Abrir el Monticello browser.

Seleccionar la opcion de agregar un nuevo repositorio y seleccionar el directorio que contenga al archivo descargado

Luego seleccionando el directorio agregado como nuevo repositorio clicker sobre la opcion open

Seleccionar la opcion load, y listo ya tenemos el modelo en nuestra imagen.


Ahora para ver un poco como es la dinamica del juego ejecutar, lo siguiente:
| configuracion partida|
configuracion := ConfiguracionPartida new.
configuracion
ficha: Color black para: (Jugador nombre: 'Pedro');
ficha: Color red para: (Jugador nombre: 'Luis');
ficha: Color white para: (Jugador nombre: 'Toro');
ficha: Color blue para: (Jugador nombre: 'Chicho');
yourself.

partida := PartidaDelJuegoDeLaOca inicializarPara: configuracion.
partida comenzar

Me agarro mucho sueño, me voy a torrar. abrazo.

3 comentarios:

Hernan Wilkinson dijo...

Que haces Claudio, muy bueno!, pero ya que propones hacer mierda el diseño... jaja.
Bueno, aca te paso unos comentarios luego de ver rapidamente lo que hiciste:
1) (No es de diseño) Me parece que esta contando mal... juge y dice que Luis saco 6 y movio su oca a la casilla 7...
2) A mi gusto, algunos nombres de mensajes no son buenos. Por ejemplo:
a) Jugador nombre: 'Pedro' yo hubiese utilizado: Jugador llamado: 'Pedro'. Me parece que se lee mejor
b) A ConfiguracionPartida lo llamaria ConfiguracionDePartida y la haria immutable
c) Tampoco me gusta el mensaje #ficha:para:... yo utilizaria algo como #jugadorLlamado:utilizaFicha:
Me parece mas declarativo
d) El mensaje #inicializarPara: de PartidaDelJuegoDeLaOca lo cambiaria por #nuevaCon:
e) Vi que creaste una clase por cada tipo de casilla pero no tienen ningun protocolo... es es muy raro... Esto me parece que sucede por la metafora que usaste, o sea, la de tener reglas de juego. Eso implica tener objetos con pocas responsabilidades. Otra metafora que se puede usar es la distribuir las reglas como responsabilidades de los objetos que componen el modelo, de esta manera el tipo de una casilla tendria la responsabilidad de decidir que hacer cuando cae una ficha en ella por ejemplo.
f) Un lugar donde usas el tipo de la casilla es en la condicion de las reglas donde por ejemplo la regla hace: "(unaPartidaDelJuegoDeLaOca juego tablero casillaDe: unaFicha) tipo = Carcel"
Me parece feo como se esta rompiendo el encapsulamiento ahi (juego tablero casillaDe:..). Lo cambiaria por algo como "unaPartidaDelJuegoDeLaOca es: Carcel casillaDe: unaFica" (suponiendo que mantenemos los tipos que no me parece bueno como estan)
g) Se me ocurre rapidamente que para sacar esas clases de tipo lo que se puede hacer es que el juego tenga collecciones con las casillas de cada tipo y listo

Bueno, no tengo mas tiempo, fueron un par de ideas.
Me parece un ejercicio interesante, me parece que te lo voy a robar! jaja. (Estaria bueno hacerlo con TDD no?)

Claudio Acciaresi dijo...

hernán! Como va! gracias por los comentarios! la verdad que lo de hacer clases para los tipos es una cosita muy desprolija. :).

El tema de las reglas lo puse porque me gusta la idea de pensar el modelo haciendo un mapeo con la realidad, dado que uno al abrir el juego se encuentra con reglas, éstas deberían estar por algún lugar.. :)

"Otra metafora que se puede usar es la distribuir las reglas como responsabilidades de los objetos que componen el modelo, de esta manera el tipo de una casilla tendria la responsabilidad de decidir que hacer cuando cae una ficha en ella por ejemplo."

Con respecto a TDD, la verdad que hubiera sido un ejercicio copado para encararlo así.

A! el tema de de que suma mal, es que los jugadores salen de la casilla 1. :)

Me gustaron muchos los consejos de los nombres :) Gracias!

Diego dijo...

Claudito, gracias por los comments!! :)

Te mando un abraso grande, y vengo siguiento tu blog con el reader...