|
|
@ -273,3 +273,27 @@ void bewegeKoenig(char** Brett, int startX, int startY, int endX, int endY, Play |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
bool kannRochieren(char** Brett, int startX, int startY, Player player, Spielstatus* status, bool kingside) { |
|
|
|
// Simple Checks um zu schauen ob es möglich ist zu rochieren |
|
|
|
if (player == PLAYER_WHITE) { |
|
|
|
if (status->BewegteSichWeißerKoenig) return false; |
|
|
|
if (kingside && status->WeißerTurmKoenigSeiteBewegt) return false; |
|
|
|
if (!kingside && status->WeißerTurmDameSeiteBewegt) return false; |
|
|
|
} else { // PLAYER_BLACK |
|
|
|
if (status->BewegteSichSchwarzerKoenig) return false; |
|
|
|
if (kingside && status->SchwarzerTurmKoenigSeiteBewegt) return false; |
|
|
|
if (!kingside && status->SchwarzerTurmDameSeiteBewegt) return false; |
|
|
|
} |
|
|
|
|
|
|
|
// Extra checks: Pfad muss frei sein, könig nicht im schach, und nicht sich durch Schach bewegen oder in Schach enden. |
|
|
|
int dir = kingside ? 1 : -1; // Schauen in welche richtung man Rochiert |
|
|
|
for (int offset = 1; offset <= (kingside ? 2 : 3); ++offset) { // Zwei Felder auf der kurzen, drei für lange Seite |
|
|
|
int checkX = startX + dir * offset; |
|
|
|
if (Brett[startY][checkX] != ' ' || istFeldUnsicher(Brett, checkX, startY, player)) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//wenn alles passt ist eine Rochade machbar |
|
|
|
return true; |
|
|
|
} |