Para me divertir, estou tentando escrever um dos jogos de tabuleiro favoritos do meu filho como um software. Eventualmente, espero construir uma IU do WPF sobre ele, mas agora estou construindo a máquina que modela os jogos e suas regras.
Enquanto faço isso, continuo vendo problemas que considero comuns a muitos jogos de tabuleiro e talvez outros já os tenham resolvido melhor do que eu.
(Observe que a IA para jogar o jogo e os padrões de alto desempenho não são interessantes para mim.)
Até agora, meus padrões são:
Vários tipos imutáveis que representam entidades na caixa do jogo, por exemplo, dados, damas, cartas, um tabuleiro, espaços no tabuleiro, dinheiro, etc.
Um objeto para cada jogador, que contém os recursos dos jogadores (por exemplo, dinheiro, pontuação), seu nome, etc.
Um objeto que representa o estado do jogo: os jogadores, quem é a vez, o layout das peças no tabuleiro, etc.
Uma máquina de estado que gerencia a sequência de curvas. Por exemplo, muitos jogos têm um pequeno pré-jogo onde cada jogador rola para ver quem vai primeiro; esse é o estado inicial. Quando o turno de um jogador começa, primeiro eles rolam, depois se movem, então eles têm que dançar no lugar, então os outros jogadores adivinham que raça de frango eles são e então recebem pontos.
Existe alguma arte anterior da qual eu possa aproveitar?
EDIT: Uma coisa que percebi recentemente é que o estado do jogo pode ser dividido em duas categorias:
Estado do artefato do jogo . "Eu tenho $ 10" ou "minha mão esquerda está azul".
Estado da sequência do jogo . "Já rolei duplas duas vezes; a próxima me põe na prisão". Uma máquina de estado pode fazer sentido aqui.
EDIT: O que estou realmente procurando aqui é a melhor maneira de implementar jogos multiplayer baseados em turnos, como xadrez, Scrabble ou Banco Imobiliário. Tenho certeza de que poderia criar esse jogo apenas trabalhando nele do início ao fim, mas, como outros Design Patterns, provavelmente há algumas maneiras de fazer as coisas correrem muito mais suavemente que não são óbvias sem um estudo cuidadoso. É isso que estou esperando.