Wunderschönen Guten Tag,
ich bin dabei eine App in Swift zu programmieren und stehe absolut auf dem Schlauch. Ich möchte das Spiel Reversi/Othello generieren und scheitere gerade am Algorithmus zum Umdrehen der Steine.
Ich versuche es mal in Javaquellcode (Java und Swift sind von der Syntax nicht so übel anders, aber ist vielleicht besser so) darzulegen.
Also das Startfeld sieht so aus:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 2 0 0 0
0 0 0 2 1 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Nun lege ich einen Stein dazu:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 1 2 1 0 0
0 0 0 2 1 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Auf Punkt 5/3 habe ich gesetzt und damit muss Sein 4/3 umgeklappt werden, weil er sich zwischen 3/3 und 5/3 befindet. 1 und 2 sind hier die Spielernummern und 0 sind leere Felder.
Nun habe ich einen Algorithmus gebastelt, welcher in alle acht Richtungen schießt und überprüft, wie viele Steine er umlegen muss.
Dazu habe ich diese beiden Arrays:
int[] yDirArr = {-1, 0, 1}```
Die ich also in einer doppelten for-each Schleife durchlaufen lasse.
Ich weiß nicht, ob mein Konzept einfach nur ungünstig ist, oder ob ich auf dem Schlauch stehe, aber er gibt mir nun folgende sechs Dinge aus:
[ul]
[li]int x: Die x-Position des Steins, der hinzugesetzt wurde.
[/li][li]int y: Die y-Position des Steins, der hinzugesetzt wurde.
[/li][li]int currX: Die x-Position des letzten umlegbaren Steins.
[/li][li]int currY: Die y-Position des letzten umlegbaren Steins.
[/li][li]int dirX: Die x-Richtung in die er gerade prüft.
[/li][li]int dirY: Die yx-Richtung in die er gerade prüft.
[/li][/ul]
Das heißt also, es wird alles von Position (x,y) in Richtung (dirX,dirY) bis hin zu (currX,currY) umgelegt.
Das Umlegen mache ich durch diese einfache Zeile (ruft eine passende Methode auf):
setStone(currPlayer, x:a, y:b)
Nun mein Problem: Ich bin schlicht weg gerade nicht fähig es zu schaffen der Programmiersprache zu sagen, dass er genau diese Steine drehen soll. Es scheitert an der for-Schleife an folgender Sache:
for var b=currY+1;b<=x;b++ {
for var a=currX+1;a<=y;a++ {
setStone(currPlayer, x:a, y:b)
}
}
Bedingt durch die Tatsache, dass die Steine ja in alle acht Richtungen geprüft werden, ist die Abschlussbedingung `b<=x` und `a<=y` hinfällig, weil es ja, je nach Richtung sowohl größergleich, als auch kleinergleich sein kann.
Kann mir jemand sagen, wie ich dieses Problem lösen kann?
Die Lösung ist wahrscheinlich näher als ich denken kann ...