Ich habe eine 2D-Kachel-basierte Strategie in Arbeit. Ich überlege, wie ich mit der Beziehung zwischen der Karte und den Einheiten auf der Karte umgehen soll.
Bei einer gegebenen Kachelkoordinate muss ich in der Lage sein, die Einheit darauf zu stellen, falls vorhanden. Wenn ich eine Einheit habe, möchte ich gleichzeitig in der Lage sein, die Koordinate der Einheit zu erhalten.
Ich habe zwei Lösungen dafür gesehen. Die erste Lösung wäre, dass Einheiten eine Koordinate speichern und die Karten Einheitenreferenzen in ihren Kacheln speichern. Dies erzeugt eine zyklische Abhängigkeit zwischen der Karte und den Einheiten. Ich müsste sicherstellen, dass die Karte einer beliebigen Einheit synchron bleibt, wenn sich die Einheit bewegt.
Die zweite Lösung wäre, nur die Einheiten ihre Koordinaten verfolgen zu lassen. Um festzustellen, ob eine Kachel eine Einheit enthält, und um diese Einheit zu erhalten, würde ich den gesamten Satz von Einheiten durchlaufen. Ich finde eine Einheit mit übereinstimmenden Koordinaten. Dadurch werden die zyklischen Abhängigkeiten beseitigt, aber die O (1) -Eigenschaft, die die erste Lösung zum Nachschlagen von Einheiten auf der Karte hatte, wird verloren. Dies kann sich summieren, da ich die Karte regelmäßig nach Pfaden suchen, den Bewegungsbereich bestimmen und gültige Ziele für eine bestimmte Einheit finden möchte.
Ich kann die Einheiten auch nicht einfach auf der Karte speichern (oder?). Einheiten sind mit "Armeen" verbunden, entweder Spieler oder KI. Eine Armee sollte in der Lage sein, leicht auf alle ihre Einheiten zuzugreifen und diese zu durchlaufen.
Gibt es neben den beiden Mustern, die ich für die Verwaltung der Beziehungen zwischen Einheiten und Karten beschrieben habe, noch andere Muster, da dies in Strategiespielen ein häufiges Problem zu sein scheint?
Nun, wenn Sie nicht mehrere tausend Einheiten pro Spieler haben, würde ich mir keine Sorgen um die Speichernutzung machen und die erste Lösung verwenden. Speicher ist billiger als CPU, wie es scheint.
Selbst wenn Sie 4000 Einheiten pro Spieler hatten und zwei Ganzzahlen zum Speichern des Standorts und 8 Spieler verwendeten, dauert dies nur 2 MB. Bei der ersten Lösung können Sie jedoch einen O (1) -Koordinator verwenden, anstatt O (n) (unter der Annahme unsortiert), was bei vielen Einheiten langsam sein kann.
Die meisten Spiele scheinen heutzutage eher pixelbasiert als kachelbasiert zu sein, sodass sie nur noch das Gerät zum Speichern der Koordinaten benötigen.
quelle