Rendere disponibili costanti / tabelle di gioco per classi / routine di logica di gioco in modo modulare


8

Supponiamo che io abbia un gioco in cui ci sono diverse costanti e grafici predefiniti (una carta XP, il costo delle merci e così via). Questi potrebbero essere definiti in fase di esecuzione o caricati dai file all'avvio. La domanda è: come dovrebbero queste routine logiche accedere alle costanti e ai grafici?

Ad esempio, potrei provare a usare le variabili globali, ma ciò fa sì che tutte le classi che fanno affidamento sulle variabili siano strettamente associate a esse.

Risposte:


3

Dipende davvero dal tipo (e dalla quantità / dimensione) di dati di cui stai parlando. Se si tratta di un piccolo bit di dati che può essere conservato in modo sicuro in memoria per la durata dell'esecuzione, qualcosa come una classe statica sarebbe la mia raccomandazione.

public static class Constants
{
    public static int[] Levels = { 0, 100, 200, 400, 800, 1600, 3200, 6400 }
}

In questo modo, l'esperienza richiesta per arrivare al Livello X è Constatns.Levels[X - 1];e anche l'accesso ad altri dati è facile, se hai bisogno di una raccolta di Articoli, puoi aggiungerli anche qui, se i tuoi Dati Articoli sono troppo grandi per essere archiviati in memoria, puoi implementare anche la logica di memorizzazione nella cache all'interno della classe statica.

Renderlo statico mantiene una singola copia in memoria e garantisce che tutti i client di questa classe ottengano gli stessi dati.

Mentre questo fa "accoppiare strettamente" le tue classi, l'accoppiamento stretto non è una brutta cosa se il design ne ha davvero bisogno, che nel caso delle statistiche degli oggetti e dei grafici XP, è ragionevole, IMHO, abbinarle strettamente. Cerco sempre di mantenerlo semplice, fino a quando qualcosa non lo costringe a complicarsi.


3

Crea un oggetto per rappresentare ogni pezzo e passa quell'oggetto alle funzioni che ne hanno bisogno. Questo non è diverso da qualsiasi altro dato: lo si passa in giro.


2

Consiglio di usare una classe accessibile a livello globale - chiamiamola Dizionario (usando la terminologia flash). Il dizionario è sostanzialmente un elenco di coppie nome-valore (dati, regole, costanti) che si desidera accedere a tutta l'applicazione. Usando il nome (stringa) altre classi saranno in grado di recuperare i valori (numeri, stringhe, classi ecc.) Che sono interfacciati nel tuo codice. Quindi la tua implementazione è fondamentalmente IOC tranne che l'istanza è stata precedentemente effettuata nel Dizionario. Puoi anche ascoltare le modifiche al Dizionario, ecc.


Questo approccio è utile per il debug: puoi reindirizzare il dizionario a un server http e modificare i numeri al volo da un'altra app, oppure stampare i valori sullo schermo, ecc.
tenpn

0

Bene, se stavi usando Java, consiglierei di inserire i tuoi dati in file XML e di usare qualcosa come JAXB o simple-xml per ottenere i dati che desideri negli oggetti giusti.


1
Se non sbaglio completamente, la domanda non è su come archiviare e caricare i dati, ma piuttosto su come fornire accesso ad essi una volta caricati (progettazione del software, OOP).
bummzack,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.