|
|
@ -333,3 +333,30 @@ void rochiere(char** Brett, Player player, bool kingside, Spielstatus* status) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
bool KannKoenigEntkommen(char** Brett, int koenigX, int koenigY, Player player) { |
|
|
|
int directions[8][2] = {{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}}; |
|
|
|
for (int i = 0; i < 8; i++) { |
|
|
|
int neuX = koenigX + directions[i][0]; |
|
|
|
int neuY = koenigY + directions[i][1]; |
|
|
|
|
|
|
|
if (neuX >= 0 && neuX < 8 && neuY >= 0 && neuY < 8) { |
|
|
|
char zielFeld = Brett[neuY][neuX]; |
|
|
|
if ((player == PLAYER_WHITE && (zielFeld == ' ' || islower(zielFeld))) || |
|
|
|
(player == PLAYER_BLACK && (zielFeld == ' ' || isupper(zielFeld)))) { |
|
|
|
if (!istFeldUnsicher(Brett, neuX, neuY, player)) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
bool istSchachmatt(char** Brett, int koenigX, int koenigY, Player player) { |
|
|
|
// Überprüfen, ob der König im Schach steht |
|
|
|
if (istKoenigImSchach(Brett, player)) { |
|
|
|
return true; // Nicht Schachmatt, wenn der König nicht im Schach steht. |
|
|
|
} |
|
|
|
|
|
|
|
// Überprüfen, ob der König entkommen kann |
|
|
|
return !KannKoenigEntkommen(Brett, koenigX, koenigY, player); |
|
|
|
} |