diff --git a/src/Laeufer.c b/src/Laeufer.c index b841648..c1879f8 100644 --- a/src/Laeufer.c +++ b/src/Laeufer.c @@ -7,43 +7,40 @@ #include "Laeufer.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) { 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; - } + // Prüfen, ob eine gegnerische Figur den Weg kreuzt + int deltaX = abs(endX - startX); + int deltaY = abs(endY - startY); - // Wenn das getestete Feld leer ist, zum nächsten Feld in der Zugrichtung bewegen. - x += xDirection; - y += yDirection; -} // Schleife Ende - - // Ü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; } - // Wenn keines der obigen Kriterien erfüllt ist, ist der Zug ungültig + return false; } - -