From e53f13dd7381142ce613af23dbebac88d01399a4 Mon Sep 17 00:00:00 2001 From: fdai7492 Date: Fri, 2 Feb 2024 17:46:50 +0000 Subject: [PATCH] =?UTF-8?q?Feldsicherheit=20L=C3=A4ufer=20+=20Tests,=20Ant?= =?UTF-8?q?on=20Lohrey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Koenig.c | 54 ++++++++++++++++++++++++++++++++++++-- src/Koenig.h | 1 + test/test_Feldsicherheit.c | 52 ++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 2 deletions(-) diff --git a/src/Koenig.c b/src/Koenig.c index 751a032..4a39fb0 100644 --- a/src/Koenig.c +++ b/src/Koenig.c @@ -93,15 +93,65 @@ bool GreiftSpringerAn(char** Brett, int x, int y, Player player) { } return false; } + +bool GreiftLaeuferAn(char** Brett, int x, int y, Player player) { + char Laeufer = player == PLAYER_WHITE ? 'b' : 'B'; + + // Check oben Rechts + for (int i = x + 1, j = y - 1; i < 8 && j >= 0; i++, j--) { + if (Brett[j][i] != ' ') { + if (Brett[j][i] == Laeufer) { + return true; + } + break; + } + } + + // Check oben Links + for (int i = x - 1, j = y - 1; i >= 0 && j >= 0; i--, j--) { + if (Brett[j][i] != ' ') { + if (Brett[j][i] == Laeufer) { + return true; + } + break; + } + } + + // Check unten Rechts + for (int i = x + 1, j = y + 1; i < 8 && j < 8; i++, j++) { + if (Brett[j][i] != ' ') { + if (Brett[j][i] == Laeufer) { + return true; + } + break; + } + } + + // Check unten Links + for (int i = x - 1, j = y + 1; i >= 0 && j < 8; i--, j++) { + if (Brett[j][i] != ' ') { + if (Brett[j][i] == Laeufer) { + return true; + } + break; + } + } + + return false; +} + bool istFeldUnsicher(char** Brett, int x, int y, Player player) { if (GreiftSpringerAn(Brett, x, y, player)) { return true; } - if (GreiftBauerAn(Brett, x, y, player)) { + if (GreiftBauerAn(Brett, x, y, player)) { + return true; + } + if (GreiftTurmAn(Brett, x, y, player)) { return true; } - if (GreiftTurmAn(Brett, x, y, player)) { + if (GreiftLaeuferAn(Brett, x, y, player)) { return true; } diff --git a/src/Koenig.h b/src/Koenig.h index 56e2d7a..0b77adb 100644 --- a/src/Koenig.h +++ b/src/Koenig.h @@ -4,6 +4,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 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 5bbd917..c4fb7ab 100644 --- a/test/test_Feldsicherheit.c +++ b/test/test_Feldsicherheit.c @@ -89,5 +89,57 @@ void test_GreiftSpringerAn(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'; + + 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 + + // Check sicheres Feld + TEST_ASSERT_FALSE(GreiftLaeuferAn(Brett, 0, 1, player)); + + 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'; + + 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 + + // Check sicheres Feld + TEST_ASSERT_FALSE(GreiftLaeuferAn(Brett, 0, 1, player)); + + freeTestBrett(Brett); +} #endif // TEST