Prüfen ob Barriere zwischen 2 benachbarten Hexagons liegt
-
Hi, ich habe in meinem Projekt ein Labyrinth, welches aus Hexagonen besteht, aufgebaut. Hier sieht man 2 teile mit jeweils einer öffnung.
Ich möchte nun eine Figur von einem Teil ins nächste bewegen und hab folgende Funktion für die Wand-Kollision geschrieben:
isWallInTheyWay(CardinalDirection:String) { //... //standOnHex=Hexagon auf dem Figur steht, blau makiert im Bild //walkToHex =Nachbar im Osten if(CardinalDirection == EAST) { if(standOnHex == null) { //Wenn hexagon null ist, dann gibt es auch keine Wand if(walkToHex == null) { return false; } else if (walkToHex.isSideOpen(WEST)) { return false; } } else if(standOnHex.isSideOpen(EAST)) { if(walkToHex == null) { return false; } else if (walkToHex.isSideOpen(WEST)) { return false; } } } //...weitere 5 himmelsrichtungen? return true; }
Der Code Ausschnitt ist jetzt nur für die Himmelsrichtung von Ost nach West. Bevor ich jetzt für die anderen Himmelsrichtungen den Code 5 weitere male kopiere und leicht modifiziere, wollte ich hier nach einer eleganten Lösung für evtl. kürzeren Code fragen. Das ganze ist nicht c++, aber doch sehr ähnlich zu c++.
Danke
MfG
Dudeldu
-
Du schreibst eine Funktion, die dir zu einer Himmelsrichtung die entgegengesetzte Richtung angibt. Dann wird dein Code zu:
isWallInTheyWay(CardinalDirection:String) { //... //standOnHex=Hexagon auf dem Figur steht, blau makiert im Bild //walkToHex =Nachbar im Osten OppositeDirection = GetOppositeDirection(CardinalDirection); if(standOnHex == null) { //Wenn hexagon null ist, dann gibt es auch keine Wand if(walkToHex == null) { return false; } else if (walkToHex.isSideOpen(OppositeDirection)) { return false; } } else if(standOnHex.isSideOpen(CardinalDirection)) { if(walkToHex == null) { return false; } else if (walkToHex.isSideOpen(OppositeDirection)) { return false; } } return true; }
Wobei ich es übrigens äußerst ungeschickt finde, Himmelsrichtungen als String zu modellieren. Das schreit geradezu nach einem enum.
-
Hi!
Funktioniert, danke!SeppJ schrieb:
Wobei ich es übrigens äußerst ungeschickt finde, Himmelsrichtungen als String zu modellieren. Das schreit geradezu nach einem enum.
Dudeldu schrieb:
Das ganze ist nicht c++, aber doch sehr ähnlich zu c++.
[...]ActionScript 3.0 does not support a specific enumeration facility, unlike C++ with its enum keyword or Java with its Enumeration interface.[...]
Es gibt aber ein ähnliches äquivalent mit klassen und konstanten(siehe link), was ich jetzt auch verwendet habe, dennoch bleibt der Datentyp ein String.
-
Aber Ganzzahldatentypen wird es doch wohl geben, oder? Ob man nun
enum Direction { North, Northeast, Southeast, South, Southwest, Northwest };
oder
typedef int Direction; const int North = 0; const int Northeast = 1; const int Southeast = 2; const int South = 3; const int Southwest = 4; const int Northwest = 5;
oder dessen Actionscript-Äquivalent schreibt, macht doch keinen großen Unterschied. Ist aber alles besser als String.