Contesto : userò il gioco da tavolo Spiacente come esempio, ma questa domanda potrebbe applicarsi ad altri giochi da tavolo. In Scusa, ogni giocatore ha quattro pedine. Basato su carte pescate, un giocatore muove le sue pedine attorno al tabellone. Queste mosse possono influenzare le pedine degli altri giocatori, come battere di nuovo il pedone di un altro giocatore su Start.
Per una possibile implementazione (semplificata) del gioco, considera questa architettura: 1. Classe di gioco - La responsabilità sta gestendo i turni. Ha una collezione di oggetti Player 2. Classe del giocatore: la responsabilità sta permettendo a un giocatore (AI o umano) di agire. Ha una collezione di pedine di quel giocatore. 3. Classe di pedoni: la responsabilità è conoscere il suo stato; ogni istanza rappresenta una singola entità.
Esempio : per alcune azioni del giocatore, come l'esecuzione di un Mi dispiace, il giocatore deve sapere dove tutte le pedine devono prendere una decisione informata. Altre azioni sono simili, come scegliere quale pedina spostare; Potrei muovere una pedina in modo che finisca sulla pedina dell'avversario.
Un approccio semplice sarebbe per la classe Player avere funzioni come: Pawn * ChooseSorryPawn (vector oppPlayers). La funzione quindi interrogherà ogni giocatore per i suoi pedoni, costruirà l'intera lista di pedine avversarie e quindi prenderà una decisione.
Preoccupazione : per una funzione, quanto sopra potrebbe essere ok. Ma questo stesso schema sarebbe necessario per tutte le funzioni del giocatore coinvolte nel prendere una decisione, dal momento che un giocatore ha bisogno di conoscere l'intero stato della scacchiera.
Domanda : questo è davvero il modo migliore per andare, o c'è un modello di progettazione migliore per consentire a un giocatore di prendere decisioni senza passare in riferimento diretto ai giocatori avversari e ai loro pedoni? Potrebbe un mediatore essere l'approccio giusto qui?
Come domanda correlata, sarebbe meglio memorizzare lo stato della posizione di pedone in una classe separata, come una classe di GameBoard, invece che con i pedoni stessi? In questo modo, ogni giocatore prenderà una referenza di GameBoard nel suo costruttore.