Hallo Forum,
ich möchte ein Spiel programmieren, das Cathedral heißt und habe folgende Problematik. So kann ein Spielbrett zu einem gewissen Zeitpunkt im Spiel aussehen (Design, Spielsteine setzen, Freiräume für Spielsteine erkennen, erkennen dass mein einen Spielstein nicht auf ein Feld setzen kann hab ich alles schon programmiert):
Jetzt muss erkannt werden, dass oben rechts in der Ecke die Felder von blauen Steinen eingekreist sind oder z.B. unten rechts in der Ecke die Steine von grünen da diese Felder dem blauen, bzw. dem grünen Spieler gehören.
Mein Ansatz: Ich habe erstmal folgenden Algorithmus geschrieben, um Polygonzüge zu erkennen:
Dieser Algorithmus findet quasi rekursiv immer einen weiteren weg zum nächsten stein bis es keinen mehr gibt.
Aber jetzt weiß ich nicht mehr weiter, alles, was ich dann probiert habe funktioniert immer nur teilweise, es werden einfach nicht immer inneliegende Felder erkannt. Vielleicht sieht ja einer von Euch die Problematik und denkt "Hey, das ist kann man doch mit dem x,y-Algorithmus lösen" aber ich weiß einfach nicht mehr weiter und wäre über Hilfe dankbar!
LG
Chris
ich möchte ein Spiel programmieren, das Cathedral heißt und habe folgende Problematik. So kann ein Spielbrett zu einem gewissen Zeitpunkt im Spiel aussehen (Design, Spielsteine setzen, Freiräume für Spielsteine erkennen, erkennen dass mein einen Spielstein nicht auf ein Feld setzen kann hab ich alles schon programmiert):
Jetzt muss erkannt werden, dass oben rechts in der Ecke die Felder von blauen Steinen eingekreist sind oder z.B. unten rechts in der Ecke die Steine von grünen da diese Felder dem blauen, bzw. dem grünen Spieler gehören.
Mein Ansatz: Ich habe erstmal folgenden Algorithmus geschrieben, um Polygonzüge zu erkennen:
Java:
public void getConnectedFields(Point p, Player player, ArrayList<Point> connected_fields, ArrayList<Point> border_fields){
int x = (int) p.getX();
int y = (int) p.getY();
connected_fields.add(p);
if (x == 0 || x == 9 || y == 0 || y == 9)
border_fields.add(p);
if (x+1 <= 9 && this.fieldMatrix[x+1][y] == player.getId() && !connected_fields.contains(new Point(x+1,y)))
this.getConnectedFields(new Point(x+1,y),player,connected_fields, border_fields);
if(y+1 <= 9 && this.fieldMatrix[x][y+1] == player.getId() && !connected_fields.contains(new Point(x,y+1)))
this.getConnectedFields(new Point(x,y+1),player,connected_fields, border_fields);
if(x-1 >= 0 && this.fieldMatrix[x-1][y] == player.getId() && !connected_fields.contains(new Point(x-1,y)))
this.getConnectedFields(new Point(x-1,y),player,connected_fields, border_fields);
if(y-1 >= 0 && this.fieldMatrix[x][y-1] == player.getId() && !connected_fields.contains(new Point(x,y-1)))
this.getConnectedFields(new Point(x,y-1),player,connected_fields, border_fields);
}
Aber jetzt weiß ich nicht mehr weiter, alles, was ich dann probiert habe funktioniert immer nur teilweise, es werden einfach nicht immer inneliegende Felder erkannt. Vielleicht sieht ja einer von Euch die Problematik und denkt "Hey, das ist kann man doch mit dem x,y-Algorithmus lösen" aber ich weiß einfach nicht mehr weiter und wäre über Hilfe dankbar!
LG
Chris