From e10bbdc30f6bc27cb199a00cec218ec8dc78070d Mon Sep 17 00:00:00 2001 From: fdai7492 Date: Mon, 5 Feb 2024 02:21:12 +0000 Subject: [PATCH] =?UTF-8?q?Im=20Schach=20stehen=20+=20Test=20f=C3=BCr=20Ba?= =?UTF-8?q?uer,=20Anton=20Lohrey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Koenig.c | 24 ++++++++++++++ src/Koenig.h | 1 + test/test_imSchachstehen.c | 65 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 test/test_imSchachstehen.c diff --git a/src/Koenig.c b/src/Koenig.c index dd97a02..b5adbc6 100644 --- a/src/Koenig.c +++ b/src/Koenig.c @@ -208,7 +208,31 @@ bool istFeldUnsicher(char** Brett, int x, int y, Player player) { return false; } +bool istKoenigImSchach(char** Brett, Player player) { + char kingSymbol = (player == PLAYER_WHITE) ? 'K' : 'k'; + int kingX = -1, kingY = -1; + // König finden + for (int y = 0; y < 8; y++) { + for (int x = 0; x < 8; x++) { + if (Brett[y][x] == kingSymbol) { + kingX = x; + kingY = y; + goto Koeniggefunden; + } + } + } +Koeniggefunden: + if (kingX == -1 || kingY == -1) { + // Falls kein König gefunden wird + return false; + } + if (istFeldUnsicher(Brett, kingX, kingY, player)) { + return true; // König ist im Schach + } + + return false; // König ist nicht im Schach +} 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 7dd9444..9828d82 100644 --- a/src/Koenig.h +++ b/src/Koenig.h @@ -8,5 +8,6 @@ bool GreiftLaeuferAn(char** Brett, int x, int y, Player player); bool GreiftDameAn(char** Brett, int x, int y, Player player); bool GreiftKoenigAn(char** Brett, int x, int y, Player player); bool istFeldUnsicher(char** Brett, int x, int y, Player player); +bool istKoenigImSchach(char** Brett, Player player); bool istzugerlaubt_Koenig(char** Brett, int startX, int startY, int endX, int endY, Player player); #endif // Koenig diff --git a/test/test_imSchachstehen.c b/test/test_imSchachstehen.c new file mode 100644 index 0000000..24aedda --- /dev/null +++ b/test/test_imSchachstehen.c @@ -0,0 +1,65 @@ +#ifdef TEST +#include "unity.h" +#include +#include +#include +#include "Spieler.h" +#include "Koenig.h" +#include "Schachbrett.h" + +char** ErstelleTestBrett() { + char** Brett = malloc(8 * sizeof(char*)); + for (int i = 0; i < 8; i++) { + Brett[i] = malloc(8 * sizeof(char)); + for (int j = 0; j < 8; j++) { + Brett[i][j] = ' '; //Erstelle komplett leeres Brett + } + } + return Brett; +} + +void freeTestBrett(char** Brett) { + for (int i = 0; i < 8; i++) { + free(Brett[i]); + } + free(Brett); +} +void test_SchachDurchBauer(void) { + char** Brett = ErstelleTestBrett(); + + Brett[4][4] = 'K'; + Brett[5][5] = 'p'; + + TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE)); + + freeTestBrett(Brett); + Brett = ErstelleTestBrett(); + + Brett[3][3] = 'k'; + Brett[2][2] = 'P'; + TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); + + freeTestBrett(Brett); + Brett = ErstelleTestBrett(); + + Brett[3][3] = 'k'; + Brett[2][4] = 'P'; + TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); + + freeTestBrett(Brett); + Brett = ErstelleTestBrett(); + + Brett[4][4] = 'K'; + Brett[3][4] = 'P'; + TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE)); + + freeTestBrett(Brett); + Brett = ErstelleTestBrett(); + + Brett[3][3] = 'k'; + Brett[1][3] = 'P'; + TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK)); + + freeTestBrett(Brett); +} +#endif // TEST