Browse Source

Feldsicherheit Dame + Tests, Anton Lohrey

remotes/origin/Läufer-fertig,-Hendrik-Voß
fdai7492 11 months ago
parent
commit
c6431cd3d4
  1. 22
      src/Koenig.c
  2. 1
      src/Koenig.h
  3. 35
      test/test_Feldsicherheit.c

22
src/Koenig.c

@ -157,6 +157,28 @@ bool istFeldUnsicher(char** Brett, int x, int y, Player player) {
return false; return false;
} }
bool GreiftDameAn(char** Brett, int x, int y, Player player) {
char Dame = player == PLAYER_WHITE ? 'q' : 'Q';
//Schaut in alle Richtungen
int Richtungen[8][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {-1, -1}, {1, -1}, {-1, 1}};
for (int i = 0; i < 8; i++) {
int dx = Richtungen[i][0];
int dy = Richtungen[i][1];
int nx = x + dx;
int ny = y + dy;
while (nx >= 0 && nx < 8 && ny >= 0 && ny < 8) {
if (Brett[ny][nx] != ' ') {
if (Brett[ny][nx] == Dame) return true;
break;
}
nx += dx;
ny += dy;
}
}
return false;
}
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) {
// Schauen ob der zug auf dem Spielbrett passiert // Schauen ob der zug auf dem Spielbrett passiert

1
src/Koenig.h

@ -5,6 +5,7 @@ bool GreiftBauerAn(char** Brett, int x, int y, Player player);
bool GreiftTurmAn(char** Brett, int x, int y, Player player); bool GreiftTurmAn(char** Brett, int x, int y, Player player);
bool GreiftSpringerAn(char** Brett, int x, int y, Player player); bool GreiftSpringerAn(char** Brett, int x, int y, Player player);
bool GreiftLaeuferAn(char** Brett, int x, int y, Player player); bool GreiftLaeuferAn(char** Brett, int x, int y, Player player);
bool GreiftDameAn(char** Brett, int x, int y, Player player);
bool istFeldUnsicher(char** Brett, int x, int y, Player player); bool istFeldUnsicher(char** Brett, int x, int y, 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);
#endif // Koenig #endif // Koenig

35
test/test_Feldsicherheit.c

@ -115,31 +115,26 @@ void test_GreiftLaeuferAn(void) {
freeTestBrett(Brett); freeTestBrett(Brett);
} }
void test_GreiftLaeuferAn(void) {
char** Brett = ErstelleTestBrett();
// Plaziert einen weißen Läufer auf c4 (2,3) und testet Angriffe
Brett[3][2] = 'B';
void test_GreiftDameAn(void) {
char** Brett = ErstelleTestBrett();
// Plaziert weiße dame auf d4
Brett[3][3] = 'Q';
Player player = PLAYER_BLACK; Player player = PLAYER_BLACK;
TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 0, 1, player)); // Check unten Links
TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 5, 0, player)); // Check oben Links
TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 4, 5, player)); // Check unten Rechts
TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 3, 2, player)); // Check oben Rechts
// Plaziert einen schwarzen Läufer auf e5 (4,4) und testet Angriffe vom anderen spieler
Brett[2][3] = ' ';
Brett[4][4] = 'b';
player = PLAYER_WHITE;
TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 2, 2, player)); // Check unten Rechts
TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 2, 6, player)); // Check oben Links
TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 6, 6, player)); // Check unten Rechts
TEST_ASSERT_TRUE(GreiftLaeuferAn(Brett, 6, 2, player)); // Check oben Rechts
// Test Oben/Seitlich
TEST_ASSERT_TRUE(GreiftDameAn(Brett, 3, 7, player)); // d8
TEST_ASSERT_TRUE(GreiftDameAn(Brett, 0, 3, player)); // a4
// Check sicheres Feld
TEST_ASSERT_FALSE(GreiftLaeuferAn(Brett, 0, 1, player));
// Test Diagonal
TEST_ASSERT_TRUE(GreiftDameAn(Brett, 1, 5, player)); // b6
freeTestBrett(Brett);
// Plaziert eigene Figur zum blocken
Brett[4][3] = 'P';
// Test blockiert von eigener Figur
TEST_ASSERT_FALSE(GreiftDameAn(Brett, 3, 7, player)); // d8 blocked
freeTestBrett(Brett);
} }
#endif // TEST #endif // TEST
Loading…
Cancel
Save