Estou desenvolvendo um jogo de tabuleiro que possui uma classe de jogo que controla o fluxo do jogo e jogadores ligados à classe de jogo. O tabuleiro é apenas uma classe visual, mas o controle dos movimentos é todo pelo jogo.
O jogador pode tentar fazer movimentos falsos que levam ao jogo dizendo ao jogador que esse tipo de movimento não é permitido (e diga a razão por trás disso). Mas, em alguns casos, o jogador pode simplesmente fazer um movimento e perceber que não é a melhor jogada, ou simplesmente clicar no tabuleiro ou apenas tentar outra abordagem.
O jogo pode ser salvo e carregado, portanto, uma abordagem pode armazenar todos os dados antes do movimento e não permitir uma reversão, mas permitir que o usuário carregue a última curva salva automaticamente. Parece uma boa abordagem, mas envolve a interação do usuário, e o redesenho do quadro pode ser entediante para o usuário. Existe uma maneira melhor de fazer esse tipo de coisa ou a arquitetura realmente importa nessa coisa?
A classe do jogo e a classe do jogador não são complicadas, portanto é uma boa ideia clonar as classes ou separar os dados do jogo das regras do jogo para uma abordagem melhor, ou o salvamento / carregamento (mesmo automático em uma reversão solicitada) está ok?
ATUALIZAÇÃO: como este jogo funciona: Possui um tabuleiro principal onde você faz jogadas (jogadas simples) e um tabuleiro de jogador que reage aos jogadas no tabuleiro principal. Ele também tem movimentos de reação de acordo com os movimentos de outros jogadores e você mesmo. Você também pode reagir quando não é a sua vez, fazendo as coisas no seu tabuleiro. Talvez eu não consiga desfazer todos os movimentos, mas gosto da ideia de desfazer / refazer flutuando em uma das respostas atuais.