From f72563d84b896268f707779e01a37b04b0508cc8 Mon Sep 17 00:00:00 2001 From: fdai7492 Date: Fri, 2 Feb 2024 06:53:30 +0000 Subject: [PATCH] Anfang Feldsicherheits-check + Test, Anton Lohrey --- src/Koenig.c | 29 ++++++++++++++++++++++++ src/Koenig.h | 9 ++++---- test/test_Feldsicherheit.c | 46 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 4 deletions(-) create mode 100644 test/test_Feldsicherheit.c diff --git a/src/Koenig.c b/src/Koenig.c index 7de33e2..b912f9a 100644 --- a/src/Koenig.c +++ b/src/Koenig.c @@ -6,6 +6,35 @@ #include "Moving.h" #include "Koenig.h" +bool GreiftSpringerAn(char** Brett, int x, int y, Player player) { + int Springerzüge[8][2] = { + {2, 1}, {1, 2}, {-1, 2}, {-2, 1}, + {-2, -1}, {-1, -2}, {1, -2}, {2, -1} + }; + + for (int i = 0; i < 8; i++) { + int neuX = x + Springerzüge[i][0]; + int neuY = y + Springerzüge[i][1]; + if (neuX >= 0 && neuX < 8 && neuY >= 0 && neuY < 8) { + char Figur = Brett[neuY][neuX]; + if (player == PLAYER_WHITE && Figur == 'n') { + return true; + } else if (player == PLAYER_BLACK && Figur == 'N') { + return true; + } + } + } + return false; +} +bool istFeldUnsicher(char** Brett, int x, int y, Player player) { + + if (GreiftSpringerAn(Brett, x, y, player)) { + return true; + } + + 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 if (endX < 0 || endX >= 8 || endY < 0 || endY >= 8) diff --git a/src/Koenig.h b/src/Koenig.h index c8d0328..f83b79c 100644 --- a/src/Koenig.h +++ b/src/Koenig.h @@ -1,6 +1,7 @@ -#ifndef Springer -#define Springer +#ifndef Koenig +#define Koenig #include "Spieler.h" - +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); -#endif // Springer +#endif // Koenig diff --git a/test/test_Feldsicherheit.c b/test/test_Feldsicherheit.c new file mode 100644 index 0000000..0b2b5a4 --- /dev/null +++ b/test/test_Feldsicherheit.c @@ -0,0 +1,46 @@ +#ifdef TEST +#include "unity.h" +#include +#include +#include +#include "Spieler.h" +#include "Koenig.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_GreiftSpringerAn(void) { + char** Brett = ErstelleTestBrett(); + + // Plaziert ein schwarzen Springer (3,4) und testet 'Angriff' auf e3 (4,2) + Brett[4][3] = 'n'; + Player player = PLAYER_WHITE; + TEST_ASSERT_TRUE(GreiftSpringerAn(Brett, 4, 2, player)); + + // Plaziert ein weißen Springer (5,2) und testet 'Angriff' auf e5 (4,4) + Brett[2][5] = 'N'; + player = PLAYER_BLACK; + TEST_ASSERT_TRUE(GreiftSpringerAn(Brett, 4, 4, player)); + + // Testet Feld ohne Bedrohung + TEST_ASSERT_FALSE(GreiftSpringerAn(Brett, 0, 0, player)); + + freeTestBrett(Brett); +} +#endif // TEST +