Browse Source

Rochieren Anfang, Anton Lohrey

remotes/origin/Läufer-fertig,-Hendrik-Voß
fdai7492 11 months ago
parent
commit
9e6a771104
  1. 24
      src/Koenig.c
  2. 1
      src/Koenig.h

24
src/Koenig.c

@ -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;
}

1
src/Koenig.h

@ -12,4 +12,5 @@ bool istFeldUnsicher(char** Brett, int x, int y, Player player);
bool istKoenigImSchach(char** Brett, Player player); bool istKoenigImSchach(char** Brett, Player player);
bool istzugerlaubt_Koenig(char** Brett, int startX, int startY, int endX, int endY, Player player); bool istzugerlaubt_Koenig(char** Brett, int startX, int startY, int endX, int endY, Player player);
void bewegeKoenig(char** Brett, int startX, int startY, int endX, int endY, Player player, Spielstatus* status); void bewegeKoenig(char** Brett, int startX, int startY, int endX, int endY, Player player, Spielstatus* status);
bool kannRochieren(char** Brett, int startX, int startY, Player player, Spielstatus* status, bool kingside);
#endif // Koenig #endif // Koenig
Loading…
Cancel
Save