diff --git a/src/Koenig.c b/src/Koenig.c index 3f7e7e1..751a032 100644 --- a/src/Koenig.c +++ b/src/Koenig.c @@ -28,6 +28,51 @@ bool GreiftBauerAn(char** Brett, int x, int y, Player player) { return false; } +bool GreiftTurmAn(char** Brett, int x, int y, Player player) { + char Turm = player == PLAYER_WHITE ? 'r' : 'R'; + + // Check Vertikal Hoch + for (int i = y - 1; i >= 0; i--) { + if (Brett[i][x] != ' ') { + if (Brett[i][x] == Turm) { + return true; + } + break; // Stoppt wenn irgendeine Figur gefunden wird + } + } + + // Vertikal Runter + for (int i = y + 1; i < 8; i++) { + if (Brett[i][x] != ' ') { + if (Brett[i][x] == Turm) { + return true; + } + break; + } + } + + // Horizontal Links + for (int j = x - 1; j >= 0; j--) { + if (Brett[y][j] != ' ') { + if (Brett[y][j] == Turm) { + return true; + } + break; + } + } + + // Horizontal Rechts + for (int j = x + 1; j < 8; j++) { + if (Brett[y][j] != ' ') { + if (Brett[y][j] == Turm) { + return true; + } + break; + } + } + return false; +} + bool GreiftSpringerAn(char** Brett, int x, int y, Player player) { int Springerzüge[8][2] = { {2, 1}, {1, 2}, {-1, 2}, {-2, 1}, @@ -56,6 +101,9 @@ bool istFeldUnsicher(char** Brett, int x, int y, Player player) { if (GreiftBauerAn(Brett, x, y, player)) { return true; } + if (GreiftTurmAn(Brett, x, y, player)) { + return true; + } return false; } diff --git a/src/Koenig.h b/src/Koenig.h index e3d9657..56e2d7a 100644 --- a/src/Koenig.h +++ b/src/Koenig.h @@ -2,6 +2,7 @@ #define Koenig #include "Spieler.h" 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 istFeldUnsicher(char** Brett, int x, int y, Player player); bool istzugerlaubt_Koenig(char** Brett, int startX, int startY, int endX, int endY, Player player); diff --git a/test/test_Feldsicherheit.c b/test/test_Feldsicherheit.c index 42644fe..5bbd917 100644 --- a/test/test_Feldsicherheit.c +++ b/test/test_Feldsicherheit.c @@ -45,6 +45,32 @@ void test_GreiftBauerAn(void) { freeTestBrett(Brett); } +void test_GreiftTurmAn(void) { + char** Brett = ErstelleTestBrett(); + + // Plaziert weißen Turm auf d4 (3,3) und testet für Angriffe + Brett[3][3] = 'R'; + Player player = PLAYER_BLACK; + TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 3, 0, player)); // Checkt vertikalen Angriff auf d1 + TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 3, 7, player)); // Checkt vertikalen Angriff auf d8 + TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 0, 3, player)); // Checkt horizontalen Angriff auf a4 + TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 7, 3, player)); // Checkt horizontalen Angriff auf h4 + + // Plaziert schwarzen Turm auf e5 (4,4) und Tauscht Spieler zu weiß + Brett[3][3] = ' '; // Alten turm wegmachen + Brett[4][4] = 'r'; + player = PLAYER_WHITE; + TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 4, 0, player)); // Checkt vertikalen Angriff auf e1 + TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 4, 7, player)); // Checkt vertikalen Angriff auf e8 + TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 0, 4, player)); // Checkt horizontalen Angriff auf a5 + TEST_ASSERT_TRUE(GreiftTurmAn(Brett, 7, 4, player)); // Checkt horizontalen Angriff auf h5 + + // Checkt sicheres Feld + TEST_ASSERT_FALSE(GreiftTurmAn(Brett, 0, 0, player)); + + freeTestBrett(Brett); +} + void test_GreiftSpringerAn(void) { char** Brett = ErstelleTestBrett();