Hallo Community!
Ich habe mal wieder ein Problem bei dem ich nicht weiterkomme.
Folgendes:
Ich habe ein etwas ungewöhnlicheres Spielfeld. Dieses Spielfeld besteht aus einzelnen Sechsecken die wie Waben aneinander geordnet sind. Hier einmal so ein Spielfeld als ASCII-Art:
_ _ _
/ A \ _ / L \ _ / V \
\ _ / F \ _ / Q \ _ /
/ B \ _ / M \ _ / W \
\ _ / G \ _ / R \ _ /
/ C \ _ / N \ _ / X \
\ _ / H \ _ / S \ _ /
/ D \ _ / O \ _ / Y \
\ _ / I \ _ / T \ _ /
/ E \ _ / P \ _ / Z \
\ _ / K \ _ / U \ _ /
\ _ / \ _ /
Alles anzeigen
Dazu habe ich ein 2 Dimensionales Array deklariert welches 7x7 Elemente besitzt. In diesem Array sind die Spielfeld Eigenschaften dokumentiert. Um es für mein Problem einfach zu halten gibt es nur 3 möglichen Zustände.
„-1“ steht dabei für ein Feld welches nicht begehbar ist. (Im ASCII-Art einfach Weggelassen)
„0“ steht für ein Feld welches begehbar ist.
„1“ steht für ein Feld auf welches eine Figur steht.
Dazu folgende Deklaration:
[autoit]Global $aField[7][7] = [[-1, -1, -1, -1, -1, -1, -1], _
[-1, 0, 0, 0, 0, 0, -1], _
[-1, 0, 0, 0, 0, 0, -1], _
[-1, 0, 0, 1, 0, 0, -1], _
[-1, 0, 0, 0, 0, 0, -1], _
[-1, 0, 0, 0, 0, 0, -1], _
[-1, -1, -1, -1, -1, -1, -1]]
Mein Problem:
Wegen der ungewöhnlichen Spielfeldform (mit 6 benachbarten Felder) ist es etwas schwierig das 2D Array so zu verändern dass es der Beschaffenheit meines Spielfeldes entspricht. Heißt im Klartext, wenn ich meine Figur (die auf Feld N steht) nach rechts oben (auf das Feld R) ziehe, welche Werte muss ich dann im Array ändern? Von der Logik her wäre der Index [3][3] das Feld N und der Index [2][4] das Feld R. Leider lässt sich das so nicht auf alle Felder übertragen. Wenn ich von dem Feld G nach M ziehe, dann wechsle ich im Array von [2][2] auf [2][3]. Ich hoffe es ist so verständlich wie ich das meine, das Bewegen meiner Figur hat kein strukturiertes Muster im 2D Array. Zumindest ist mir keines bisher aufgefallen.
Ich habe den Index zu einem Feld folgendermaßen ermittelt:
Bei meinem Spielfeld habe ich von oben links angefangen zu zählen (A, F, L, Q, V = 5 |+ B, G, M, R, W = 10 |+ C, G, N = 13)
Dann habe ich bei den „0“ markierten Feldern angefangen zu zählen von links oben und bin so zur Mitte gekommen.
So habe ich bisher alle Warben-Felder in das 2D Array übertragen.
Aber wie mache ich das meinem Programm klar?
Ich könnte da einige Denkansätze gebrauchen.
Die Schwierigkeit ist dabei, dass das Feld unterschiedlich groß sein kann.
Die Map soll später nämlich zufällig generiert werden.
Falls ich mich zu unklar ausgedrückt haben sollte, dann tut es mir sehr leid...
Besser kann ich’s nicht erklären.
LG. Make =)