You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.3 KiB
46 lines
1.3 KiB
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdbool.h>
|
|
#include <ctype.h>
|
|
#include "spieler.h"
|
|
#include "Moving.h"
|
|
#include "Laeufer.h"
|
|
#include "Spielstatus.h"
|
|
|
|
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
|
|
int deltaX = abs(endX - startX);
|
|
int deltaY = abs(endY - startY);
|
|
|
|
// Überprüfen, ob der Zug eine gültige Diagonalbewegung ist
|
|
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 false;
|
|
}
|
|
|