In ein rechteckiges Raster übertragen, hätte
das ganze dann folgendes Aussehen:
|
|
Abb.2
Map: Speicherorganisation
|
|
Man erkennt, dass
nicht alle Felder benutzt werden; rechts oben und links unten befinden
sich Bereiche, die für die Verwaltung irrelevant sind. Bei größeren
Strukturen verschenkt man durch die schräge Ausrichtung der Spalten
eventuell Speicherplatz.
|
Es ist jedoch auch eine zweite Art der
Koordinatenzuteilung möglich. Anstatt die Spalten durchweg auf einer
schrägen Linie zu betrachten, kann man die Spaltenfelder auch im
'Zickzack' betrachten; dadurch wird gerade bei rechteckigen
Wabenstrukturen relativ wenig Speicherplatz verschenkt. Sehen wir uns
das Beispiel an, bei dem die Felder 'A' und 'B' beide in der Spalte
X=1 liegen:
|
|
Abb.3
Optik: Zickzack-Spalten
|
|
Hier sähe die
Speicherorganisation dann so aus:
|
r
|
Abb.4
Map: 'A' und 'B' untereinander
|
|
Bisher haben wir nur
(auf der Spitze) stehende Waben untersucht, das ganze klappt aber analog
auch mit liegenden Waben. Die Felder 'A' und 'B' befinden sich hier beide
in der Zeile Y=1:
|
|
Abb.5
Optik: Zickzack-Reihen
|
|
Und auch dazu wieder
die Darstellung im Speicher:
|
|
Abb.6
Map: 'A' und 'B' nebeneinander
|
|
Während bei rechteckigen
Kacheln jedes Feld 8 Nachbarn besitzt, haben Wabenfelder lediglich 6
Nachbarn, d.h. man darf in der Map (Spielplan im Speicher) nicht alle
Felder bei der Nachbarschaftsprüfung mit einbeziehen.
|
Wie in
Abb.6 zu sehen, gibt es zwei Arten von Feldern. Typ 'A': Eine
Spielfigur, die hier steht, darf auf alle Nachbarfelder gehen außer
nach links und rechts unten. Typ 'B': Eine Spielfigur, die hier steht,
darf auf alle Nachbarfelder gehen außer nach links und rechts
oben.
|
Auch im Speicher von stehenden Waben (siehe
Abb.4) müssen wir beide Arten unterscheiden. Typ 'A': Eine
Spielfigur, die hier steht, darf auf alle Nachbarfelder gehen außer
nach oben und unten rechts. Typ 'B': Eine Spielfigur, die hier steht,
darf auf alle Nachbarfelder gehen außer nach oben und unten
links.
|
Diese Einschränkungen muss man natürlich berücksichtigen,
wenn man den Bewegungsalgorithmus für Spielfiguren codet.
|
Ob man
nun für ein Spiel stehende oder liegende Waben wählt, ist letztlich vom
persönlichen Geschmack des Programmierers abhängig; in der optischen
Wirkung und der Speicherverwaltung sind beide Varianten wohl
gleichwertig.
|
Sollen Spielfiguren jedoch auch mit der Tastatur
(Cursortasten) steuerbar sein, dann sind liegende Waben zu empfehlen
(siehe Abb.5): nach oben und unten geht's wie gehabt mit
CursorUp/CursorDown, seitlich (nach unten) geht's mit
CursorLeft/CursorRight und seitlich nach oben gehts mit Shift
CursorLeft/CursorRight.
|
Ein Joystick ist da wesentlich
unproblematischer, weil sich dessen schräge Auslenkung relativ einfach
abfragen lässt.
|