Spielkonstanten / -tabellen für Spiellogikklassen / -routinen modular verfügbar machen

8

Angenommen, ich habe ein Spiel, in dem es mehrere vordefinierte Konstanten und Diagramme gibt (ein XP-Diagramm, Kosten für Waren usw.). Diese können zur Laufzeit definiert oder beim Start aus Dateien geladen werden. Die Frage ist, wie diese Logikroutinen auf die Konstanten und Diagramme zugreifen sollen.

Zum Beispiel könnte ich versuchen, globale Variablen zu verwenden, aber das führt dazu, dass alle Klassen, die sich auf die Variablen verlassen, eng mit ihnen verbunden sind.

Extrakun
quelle

Antworten:

3

Es hängt wirklich davon ab, über welche Art (und Menge / Größe) von Daten Sie sprechen. Wenn es sich um ein kleines Datenbit handelt, das für die Dauer der Ausführung sicher im Speicher gespeichert werden kann, wäre so etwas wie eine statische Klasse meine Empfehlung.

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

Auf diese Weise ist die Erfahrung, die erforderlich ist, um Level X zu erreichen, Constatns.Levels[X - 1];und der Zugriff auf andere Daten ist ebenfalls einfach. Wenn Sie eine Sammlung von Elementen benötigen, können Sie diese auch hier hinzufügen. Wenn Ihre Elementdaten zu groß sind, um sie im Speicher zu speichern, können Sie dies Implementieren Sie auch die Caching-Logik innerhalb der statischen Klasse.

Wenn Sie es statisch machen, bleibt eine einzelne Kopie im Speicher und stellt sicher, dass jeder Client dieser Klasse dieselben Daten erhält.

Während dies Ihre Klassen "eng miteinander verbindet", ist eine enge Kopplung keine schlechte Sache, wenn das Design sie wirklich benötigt, was im Fall von Item-Statistiken und XP-Diagrammen meiner Meinung nach vernünftig ist, diese eng zu koppeln. Ich versuche immer, es einfach zu halten, bis etwas es zwingt, kompliziert zu werden.

Nate
quelle
3

Erstellen Sie ein Objekt, um jedes Stück darzustellen, und übergeben Sie dieses Objekt an Funktionen, die es benötigen. Dies unterscheidet sich nicht von anderen Daten - Sie geben sie weiter.

DeadMG
quelle
2

Ich empfehle die Verwendung einer global zugänglichen Klasse - nennen wir sie Dictionary (unter Verwendung der Flash-Terminologie). Das Wörterbuch ist im Grunde eine Liste von Name-Wert-Paaren (Daten, Regeln, Konstanten), auf die Sie in Ihrer gesamten Anwendung zugreifen möchten. Mit dem Namen (Zeichenfolge) können andere Klassen die Werte (Zahlen, Zeichenfolge, Klassen usw.) abrufen, die in Ihren Code eingebunden sind. Ihre Implementierung ist also im Grunde IOC, außer dass die Instanziierung zuvor im Wörterbuch durchgeführt wurde. Sie können auch Änderungen am Wörterbuch usw. anhören.

kosmoknot
quelle
Dieser Ansatz eignet sich gut zum Debuggen - Sie können das Wörterbuch an einen http-Server weiterleiten und die Zahlen im
laufenden Betrieb
0

Wenn Sie Java verwenden würden, würde ich empfehlen, Ihre Daten in XML-Dateien abzulegen und etwas wie JAXB oder simple-xml zu verwenden, um die gewünschten Daten in die richtigen Objekte zu bekommen.

Robert Massaioli
quelle
1
Wenn ich mich nicht völlig irre, geht es nicht darum, wie die Daten gespeichert und geladen werden, sondern wie nach dem Laden Zugriff darauf gewährt wird (Software-Design, OOP).
Bummzack