From c6431cd3d49f8772bd9d66fd69fdeff61a1b188c Mon Sep 17 00:00:00 2001 From: fdai7492 Date: Fri, 2 Feb 2024 19:21:27 +0000 Subject: [PATCH] Feldsicherheit Dame + Tests, Anton Lohrey --- src/Koenig.c | 22 ++++++++++++++++++++++ src/Koenig.h | 1 + test/test_Feldsicherheit.c | 35 +++++++++++++++-------------------- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/src/Koenig.c b/src/Koenig.c index 4a39fb0..16aa2c2 100644 --- a/src/Koenig.c +++ b/src/Koenig.c @@ -157,6 +157,28 @@ bool istFeldUnsicher(char** Brett, int x, int y, Player player) { 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) { // Schauen ob der zug auf dem Spielbrett passiert diff --git a/src/Koenig.h b/src/Koenig.h index 0b77adb..b66f9d1 100644 --- a/src/Koenig.h +++ b/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 GreiftSpringerAn(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 istzugerlaubt_Koenig(char** Brett, int startX, int startY, int endX, int endY, Player player); #endif // Koenig diff --git a/test/test_Feldsicherheit.c b/test/test_Feldsicherheit.c index c4fb7ab..15639e2 100644 --- a/test/test_Feldsicherheit.c +++ b/test/test_Feldsicherheit.c @@ -115,31 +115,26 @@ void test_GreiftLaeuferAn(void) { 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; - 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