|
|
@ -297,3 +297,39 @@ bool kannRochieren(char** Brett, int startX, int startY, Player player, Spielsta |
|
|
|
//wenn alles passt ist eine Rochade machbar |
|
|
|
return true; |
|
|
|
} |
|
|
|
void rochiere(char** Brett, Player player, bool kingside, Spielstatus* status) { |
|
|
|
int startY = player == PLAYER_WHITE ? 0 : 7; // Startreihe basierend auf dem Spieler |
|
|
|
int koenigStartX = 4; // König x position |
|
|
|
if (!kannRochieren(Brett,koenigStartX, startY, player, status, kingside)) { |
|
|
|
printf("Rochieren ist unter den aktuellen Bedingungen nicht möglich.\n"); |
|
|
|
return; // Beende die Funktion, wenn Rochieren nicht möglich ist |
|
|
|
} |
|
|
|
int koenigEndX = kingside ? 6 : 2; // König bewegt sich zwei Felder |
|
|
|
int turmStartX = kingside ? 7 : 0; // Turm Startposition |
|
|
|
int turmEndX = kingside ? 5 : 3; // Turm bewegt sich neben den könig |
|
|
|
|
|
|
|
// Den zug darstellen |
|
|
|
char koenig = player == PLAYER_WHITE ? 'K' : 'k'; |
|
|
|
char turm = player == PLAYER_WHITE ? 'R' : 'r'; |
|
|
|
Brett[startY][koenigStartX] = ' '; // Königs startposition Leeren |
|
|
|
Brett[startY][koenigEndX] = koenig; // Plaziert König auf dem neuen Feld |
|
|
|
Brett[startY][turmStartX] = ' '; // Turm startposition Leeren |
|
|
|
Brett[startY][turmEndX] = turm; // Plaziert Turm auf dem neuen Feld |
|
|
|
|
|
|
|
// Spielstatus updaten weil eine Rochade ausgeführt wurde |
|
|
|
if (player == PLAYER_WHITE) { |
|
|
|
status->BewegteSichWeißerKoenig = true; |
|
|
|
if (kingside) { |
|
|
|
status->WeißerTurmKoenigSeiteBewegt = true; |
|
|
|
} else { |
|
|
|
status->WeißerTurmDameSeiteBewegt = true; |
|
|
|
} |
|
|
|
} else { |
|
|
|
status->BewegteSichSchwarzerKoenig = true; |
|
|
|
if (kingside) { |
|
|
|
status->SchwarzerTurmKoenigSeiteBewegt = true; |
|
|
|
} else { |
|
|
|
status->SchwarzerTurmDameSeiteBewegt = true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |