3 Dimensionales Array durchlaufen - Algorithmus

Dark Ranger

Erfahrenes Mitglied
Guten Tag,

Ich habe ein 3 Dimensionales Array, dies stellt mein Spielfeld dar (Höhe, Breite und mehrere Ebenen).

Nun kann der User Steine setzen, egal auf welchen Punkt und auf welche Ebene, hauptsache ist nur dort ist kein anderer Punkt.

Nun will ich überprüfen, ob in die Breite in der Höhe oder in der Tiefe 4 Steine (horizontal,vertikal oder diagonal) hintereinander gesetzt sind.
Sollte dies der Fall sein, bekommt der Spieler einen Punkt und das Spiel geht weiter, allerdings werden diese Steine beim nächsten mal nicht mehr mitgezählt, also sollten wieder 4 Steine beieinander sein, aber ein Stein gehört schon zu einem Punkt, dann wird das nicht mehr als Punkt gezählt.

Nun suche ich nach einer Möglichkeit, dass ganze möglichst Effizent durchzulaufen. Nur fällt mir im moment nichts ein wie ich es am besten lösen könnte.

Könnt ihr mir da vielleicht weiterhelfen?
 
Hallo,

3 dimensionale Array bedeutet für mich gleich 3- Wiederholungsschleifen(for, while, do-while) besser for. Weil du musst ja auf einzelne Array Felder zugreifen.

Gruß
lernen.2007
 
Ohh wollte ich nicht doppelt anlegen -.-

Alle Werte durchlaufen kann ich auch, aber ich brauche eher eine Idee wie ich es mache, dass ich erkenne wann der User einen Punkt bekommt.
 
Du legst dir ein temporäres Array an, welches genauso gross ist wie dein eigentliches Array.
Im temporären Array sind bestehen alle Felder aus einem Objekt mit Richtungsangaben (horizontal, vertikal, diagonal etc, alles ints und initial 0).

Dann läufst du mit 3 for-Schleifen über das richtige Array und schaust ob ein Feld gesetzt ist. Ist dies der Fall so erhöhst du im temporären Array jeder Feld welches in einer Entfernung von bis zu 3 Feldern in jeder Richtung (das sind wieder 3 for-schleifen) liegt für die entsprechende Richtung aus der du kommst um 1. Setzt du ein Feld auf 4 so hast du entsprechend 4 Steine in einer Reihe gehabt. In einem weiteren Array kannst du so markieren dass 4 Steine in diesem Feld nicht mehr beachtet werden sollen. Das temporäre Array kannst du sogar immer fortlaufend pflegen: Immer wenn ein Zug gemacht wurde erhöhst du die Punktzahl der umliegenden Felder.
 
Hallo,

an deiner Stelle werde ich in erstes Feld einen Wert anlegen, womit du prüfen kannst ob du dann die ganzen anderen Felder prüfen sollst oder nicht.

Gruß
lernen.2007
 
ein Feld muss ich ja mindestens prüfen!

Also mein Spielfeld ist so aufgebaut, dass ein Feld 3 Werte besitzen kann:
0 für Spieler 1
1 für Spieler 2
2 für nichts

@lernen.2007: Irgendwie werde ich aus deinen Kommentaren nicht schlauer, könntest du etwas genauer werden?

@zeja: Auch bei dir habe ich es selsbt nach mehrmaligem lesen nicht verstanden was du meintest
 
Wie währs, wenn du nicht alle Felder überprüfst, sondern du merkst dir wo der letzte Stein gesetzt wurde und von diesem aus schaust du mit den schon genannten Algoritmen 3 Felder in jede mögliche Richtung. Ist auch perfomrmanter als immer alles zu checken.
 
Joar kann ich auhc machen, trotzdem habe ich noch keine Ahnung wie ich das genau anstellen soll, da stehe ich noch nen bisschen aufm Schlauch.

An der Umsetzung hapert es ein wenig
 
Zurück