Come gestire le interazioni tra molti oggetti

1

Ho lavorato a un gioco nel mio tempo libero. Ho praticamente finito di definire i primitivi e fino ad oggi tutto era abbastanza ben segmentato e incapsulato, ma ora è giunto il momento di implementare la ricerca dei percorsi (e altri modi in cui gli oggetti interagiscono tra loro). Qui la ricerca del percorso richiede almeno una conoscenza della mappa, una conoscenza di dove le unità sono nella mappa e quali tipi di terreno sono percorribili dall'unità il cui percorso è stato trovato.

Ci sono tre modi in cui ho pensato di implementare questo

  • Implementalo in alcune classi di alto livello che conoscono già tutte queste cose (ad esempio un oggetto di stato del gioco)
  • Implementalo in qualche metodo specifico all'interno di una delle classi "coinvolte" (come unità o mappa) e passa in tutti gli stati pertinenti
  • Implementalo in una funzione completamente separata (perché nessuno stato deve essere mantenuto) e passa di nuovo in tutti i dati rilevanti

Voglio avere la tua opinione su quale di questi ha senso (o se ce ne sono altri a cui non ho pensato). Il primo mi piace di più perché accoppia solo gli oggetti ad un livello elevato e non richiede di esporre gli oggetti per dichiarare che non hanno (altrimenti) bisogno di sapere. Non mi piace il numero 2 perché non fa quelle cose e il numero 3 su questo punto sono neutrale; non sembra necessariamente migliore o peggiore del numero 1.

Se il numero 2 è in realtà il vincitore, ho delle preoccupazioni su quanta complessità verrà propagata a questa classe di gioco di alto livello.

    
posta Mark Bishop 23.04.2014 - 02:49
fonte

1 risposta

3

Vorrei andare al n.3 in un mondo ideale, semplicemente a causa del Principio di Responsabilità Unico. Una classe ha path status, non è pathfinding e stato del gioco. In questo modo è facile cambiare la strategia di individuazione dei percorsi e testarla isolatamente (e in un mondo ideale, riutilizzarla per diversi giochi).

Detto questo, l'interfaccia che esponi per funzionare con lo stato del gioco (e le informazioni sulla mappa, le informazioni sull'unità, ecc.) tende ad essere molto basata sulla query. Chiedi qualcosa, ottieni qualcosa. Il PathFinding tende ad aver bisogno di tutto e quindi di manipolarlo in una certa misura. Nel mondo reale, potresti aver bisogno di un'interfaccia backdoor per ottenere il pathfinder di cosa ha bisogno o per andare con # 1.

Ricorda, un gioco fatto è sempre meglio di un gioco ben progettato e non funzionante.

    
risposta data 23.04.2014 - 03:15
fonte