Para divertirme, estoy tratando de escribir uno de los juegos de mesa favoritos de mi hijo como una pieza de software. Eventualmente espero construir una interfaz de usuario de WPF sobre ella, pero ahora mismo estoy construyendo la máquina que modela los juegos y sus reglas.
Mientras hago esto, sigo viendo problemas que creo que son comunes a muchos juegos de mesa, y quizás otros ya los hayan resuelto mejor que yo.
(Tenga en cuenta que la inteligencia artificial para jugar el juego y los patrones de alto rendimiento no me interesan).
Hasta ahora mis patrones son:
Varios tipos inmutables que representan entidades en la caja del juego, por ejemplo, dados, damas, cartas, un tablero, espacios en el tablero, dinero, etc.
Un objeto para cada jugador, que contiene los recursos de los jugadores (por ejemplo, dinero, puntuación), su nombre, etc.
Un objeto que representa el estado del juego: los jugadores, quién es el turno, la disposición de las piezas en el tablero, etc.
Una máquina de estado que gestiona la secuencia de turnos. Por ejemplo, muchos juegos tienen un pequeño pre-juego donde cada jugador tira para ver quién va primero; ese es el estado de inicio. Cuando comienza el turno de un jugador, primero rueda, luego se mueve, luego tiene que bailar en su lugar, luego otros jugadores adivinan qué raza de pollo son, luego reciben puntos.
¿Existe algún estado de la técnica que pueda aprovechar?
EDITAR: Una cosa de la que me di cuenta recientemente es que el estado del juego se puede dividir en dos categorías:
Estado del artefacto del juego . "Tengo $ 10" o "mi mano izquierda está en azul".
Estado de la secuencia del juego . "He tirado dobles dos veces; la siguiente me mete en la cárcel". Una máquina de estados puede tener sentido aquí.
EDITAR: Lo que realmente estoy buscando aquí es la mejor manera de implementar juegos multijugador basados en turnos como Ajedrez, Scrabble o Monopolio. Estoy seguro de que podría crear un juego de este tipo simplemente trabajando en él de principio a fin, pero, al igual que otros patrones de diseño, es probable que haya algunas formas de hacer que las cosas funcionen mucho mejor que no son obvias sin un estudio cuidadoso. Eso es lo que espero.