|
@ -7,43 +7,40 @@ |
|
|
#include "Laeufer.h" |
|
|
#include "Laeufer.h" |
|
|
#include "Spielstatus.h" |
|
|
#include "Spielstatus.h" |
|
|
|
|
|
|
|
|
bool istzugerlaubt_Laeufer(char** Brett, int startX, int startY, int endX, int endY, Player player){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Überprüfen Sie, ob der Zug innerhalb des Bretts liegt |
|
|
|
|
|
|
|
|
bool istzugerlaubt_Laeufer(char** brett, int startX, int startY, int endX, int endY, Player player) { |
|
|
|
|
|
// Überprüfen, ob der Zug innerhalb des Bretts liegt |
|
|
if (endX < 0 || endX > 7 || endY < 0 || endY > 7) { |
|
|
if (endX < 0 || endX > 7 || endY < 0 || endY > 7) { |
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Prüfen ob eine gegnerische Figur den Weg kreuzt |
|
|
|
|
|
// Richtung des Zuges bestimmen |
|
|
|
|
|
int xDirection = (endX - startX) > 0 ? 1 : -1; |
|
|
|
|
|
int yDirection = (endY - startY) > 0 ? 1 : -1; |
|
|
|
|
|
|
|
|
|
|
|
int x = startX + xDirection; |
|
|
|
|
|
int y = startY + yDirection; |
|
|
|
|
|
|
|
|
|
|
|
// Die Schleife, solange x nicht gleich endX ist, jedes Feld auf dem Weg des Läufers testen. |
|
|
|
|
|
while (x != endX) { |
|
|
|
|
|
// aktuelles Feld auf dem Brett prüfen, ob es leer ist. |
|
|
|
|
|
if (Brett[x][y] != ' ') { |
|
|
|
|
|
// Wenn das aktuelle Feld nicht leer ist, ist der Zug nicht erlaubt. |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Wenn das getestete Feld leer ist, zum nächsten Feld in der Zugrichtung bewegen. |
|
|
|
|
|
x += xDirection; |
|
|
|
|
|
y += yDirection; |
|
|
|
|
|
} // Schleife Ende |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Prüfen, ob eine gegnerische Figur den Weg kreuzt |
|
|
|
|
|
int deltaX = abs(endX - startX); |
|
|
|
|
|
int deltaY = abs(endY - startY); |
|
|
|
|
|
|
|
|
// Überprüfen, ob der Zug eine gültige Diagonalbewegung ist |
|
|
// Überprüfen, ob der Zug eine gültige Diagonalbewegung ist |
|
|
if (abs(endX - startX) == abs(endY - startY)) { |
|
|
|
|
|
|
|
|
if (deltaX == deltaY) { |
|
|
|
|
|
int xDirection = (endX - startX) > 0 ? 1 : -1; |
|
|
|
|
|
int yDirection = (endY - startY) > 0 ? 1 : -1; |
|
|
|
|
|
|
|
|
|
|
|
int x = startX + xDirection; |
|
|
|
|
|
int y = startY + yDirection; |
|
|
|
|
|
|
|
|
|
|
|
// Die Schleife, solange x nicht gleich endX ist, jedes Feld auf dem Weg des Läufers testen |
|
|
|
|
|
while (x != endX) { |
|
|
|
|
|
// Aktuelles Feld auf dem Brett prüfen, ob es leer ist |
|
|
|
|
|
if (brett[x][y] != ' ') { |
|
|
|
|
|
// Wenn das aktuelle Feld nicht leer ist, ist der Zug nicht erlaubt |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Zum nächsten Feld in der Zugrichtung bewegen |
|
|
|
|
|
x += xDirection; |
|
|
|
|
|
y += yDirection; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return true; |
|
|
return true; |
|
|
} |
|
|
} |
|
|
// Wenn keines der obigen Kriterien erfüllt ist, ist der Zug ungültig |
|
|
|
|
|
|
|
|
|
|
|
return false; |
|
|
return false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|