Browse Source

Merge branch 'main' of https://gitlab.cs.hs-fulda.de/fdai7834/taktikmeister

remotes/origin/Läufer-fertig,-Hendrik-Voß
Hendrik Voß 11 months ago
parent
commit
a6a8342dee
  1. 27
      src/Koenig.c
  2. 2
      src/Koenig.h
  3. 24
      test/test_Koenig.c

27
src/Koenig.c

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

2
src/Koenig.h

@ -14,4 +14,6 @@ bool istzugerlaubt_Koenig(char** Brett, int startX, int startY, int endX, int en
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);
void rochiere(char** Brett, Player player, bool kingside, Spielstatus* status);
bool KannKoenigEntkommen(char** Brett, int koenigX, int koenigY, Player player);
bool istSchachmatt(char** Brett, int koenigX, int koenigY, Player player);
#endif // Koenig

24
test/test_Koenig.c

@ -95,4 +95,28 @@ void test_Rochieren(void) {
// Clean up
Schachbrettspeicher_freigeben(testBrett);
}
void test_KoenigKannEntkommen(void) {
char** testBrett = Schachbrett_erstellen();
testBrett[4][4] = 'k';
print_Schachfeld(testBrett);
TEST_ASSERT_TRUE(KannKoenigEntkommen(testBrett, 4, 4, PLAYER_BLACK));
TEST_ASSERT_FALSE(KannKoenigEntkommen(testBrett, 4, 7, PLAYER_BLACK));
}
void test_KingInCheckmate(void) {
char** testBrett = Schachbrett_erstellen();
testBrett[4][4] = 'K';
TEST_ASSERT_FALSE(istSchachmatt(testBrett, 4, 4 ,PLAYER_WHITE));
testBrett[4][0] = 'q';
testBrett[5][0] = 'q';
TEST_ASSERT_FALSE(istSchachmatt(testBrett, 4, 4 ,PLAYER_WHITE));
testBrett[3][0] = 'q';
testBrett[3][7] = 'q';
testBrett[4][7] = 'q';
testBrett[5][7] = 'q';
testBrett[7][4] = ' ';
print_Schachfeld(testBrett);
TEST_ASSERT_TRUE(istSchachmatt(testBrett, 4, 4 ,PLAYER_WHITE));
}
#endif // TEST
Loading…
Cancel
Save