Estoy desarrollando un juego de mesa que tiene una clase de juego que controla el flujo del juego y jugadores vinculados a la clase de juego. El tablero es solo una clase visual, pero el control de los movimientos es todo por el juego.
El jugador puede intentar hacer movimientos falsos que conduzcan al juego diciéndole al jugador que este tipo de movimiento no está permitido (y decir la razón detrás de esto). Pero en algunos casos, el jugador puede hacer un movimiento y darse cuenta de que no es el mejor movimiento, o simplemente hacer clic en el tablero o simplemente intentar otro enfoque.
El juego se puede guardar y cargar, por lo que un enfoque podría ser almacenar todos los datos antes del movimiento y no permitir una reversión, pero permitir al usuario cargar el último turno guardado automáticamente. Esto parece un buen enfoque, pero involucra la interacción del usuario, y el rediseño del tablero podría ser tedioso para el usuario. ¿Hay una mejor manera de hacer este tipo de cosas o la arquitectura realmente importa en esto?
La clase de juego y la clase de jugador no son complicadas, por lo que es una buena idea clonar las clases, o separar los datos del juego de las reglas del juego para un mejor enfoque, o el guardado / carga (incluso automático en una reversión solicitada) está bien.
ACTUALIZACIÓN: cómo funciona este juego: tiene un tablero principal donde haces movimientos (movimientos simples) y un tablero de jugador que reacciona en los movimientos que hace en el tablero principal. También tiene movimientos de reacción de acuerdo con los movimientos de otros jugadores y sobre ti mismo. También puedes reaccionar cuando no sea tu turno, haciendo cosas en tu tablero. Tal vez no pueda deshacer cada movimiento, pero me gusta la idea de deshacer / rehacer flotando en una de las respuestas actuales.