# Hexagon-Spielfeld



## Caliburns (8. Aug 2019)

Hallo,

ich möchte ein Hexagon-Spielfeld implementieren. Habe allerdings keine Idee wie das möglichst einfach dargestellt werden soll... Gibt es eine Möglichkeit dies mit Arrays oder einer Arraylist darzustellen? Wichtig wären die Koordinaten der einzelnen Felder. Damit die angrenzenden Felder emittelt werden können.

Danke


----------



## krgewb (8. Aug 2019)

Bei einem Schachbrett könnte man mit 2D-Arrays arbeiten. Siehe hierzu
https://www.java-forum.org/thema/adresse.184014/
Da steht, wie anhand der Adresse die Koordinaten berechnet werden können. Mithilfe von Plus und Minus kommt man dann ganz einfach an die benachbarten Felder.

Hexagon scheint aber  komplizierter zu sein. Ich würde eine Klasse für die Bienenwaben machen und die IDs der Nachbarn speichern in Variablen für Nordwest, Nordost, West, Ost, Südwest und Südost.


----------



## Caliburns (8. Aug 2019)

In die Richtung ging meine jetzige Idee auch. Du meinst ausgehend vom regulären 2D-Array die Nachbarn berechnen, die im Hexagon vorkommen? Diese IDs dann in der Hexagon-Klasse entsprechend speichern?


----------



## mrBrown (8. Aug 2019)

Hexagon lässt sich doch auch einfach als 2D-Array speichern, jede zweite Reihe muss man nur als "verschoben" betrachten.

Mit Plus und Minus kommt man auch da an die Felder, die ersten 4 Nachbarn sind die gleichen wie beim normalen Schachfeld, die anderen beiden muss man Positionsabhängig berechnen mit entweder + bzw - [(-1,1),(1,1)] (wenn ich mich nicht grad verrechnet hab)


----------



## mihe7 (8. Aug 2019)

Mensch @mrBrown... Du warst zu schnell :-(


----------



## Caliburns (8. Aug 2019)

Die Idee ist für mich nachvollziehbar. Aber wie sieht es als Java-Code aus? Ich kann also ein normales 2D-Array erstellen und durch die positionsabhängige Berechnung wird die "Verschiebung" schon berücksichtigt, richtig?


----------



## mihe7 (8. Aug 2019)

Im 2D-Fall hast Du zwei Indizes und die geben die Position an, so wie sie @mrBrown eingezeichnet hat.


----------



## mihe7 (8. Aug 2019)

Es gibt insgesamt sechs Nachbarfelder. Oben und unten ist eindeutig. Links und rechts nicht, da es jeweils zwei gibt. Wenn Du die Bilder von mrBrown und mir vergleichst, stellst Du fest, dass seine zweite Spalte nach oben, meine dagegen nach unten verschoben wurde. Die Info brauchst Du zusätzlich, um die Nachbarn korrekt zu berechnen.

Ich bleibe mal bei seinem Muster.

```
+----------+---------------------------------------------------------------------------+        
|          |                              Nachbarn                                     |
| Spalte   | oben    | unten   | links oben | links unten | rechts oben | rechts unten |
|--------------------------------------------------------------------------------------|
| gerade   | (x,y-1) | (x,y+1) | (x-1, y-1) | (x-1, y)    | (x+1, y-1)  | (x+1, y)     |
| ungerade | (x,y-1) | (x,y+1) | (x-1, y)   | (x-1, y+1)  | (x+1, y)    | (x+1, y+1)   |
+----------+---------+---------+------------+-------------+-------------+--------------+
```


----------

