diff --git a/src/Koenig.c b/src/Koenig.c new file mode 100644 index 0000000..7de33e2 --- /dev/null +++ b/src/Koenig.c @@ -0,0 +1,31 @@ +#include +#include +#include +#include +#include "spieler.h" +#include "Moving.h" +#include "Koenig.h" + +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) + return false; + + // Berechnung des unterschieds der start und endpositionen + int dx = abs(endX - startX); + int dy = abs(endY - startY); + + // Schauen ob sich nur ein feld bewegt wird + if (dx > 1 || dy > 1) return false; + + // Nicht auf befreundete Figuren bewegen + char endPosition = Brett[endY][endX]; + if (player == PLAYER_WHITE && isupper(endPosition)) + return false; + if (player == PLAYER_BLACK && islower(endPosition)) + return false; + + // mehr checks noch benötigt + + return true; +} diff --git a/src/Koenig.h b/src/Koenig.h new file mode 100644 index 0000000..c8d0328 --- /dev/null +++ b/src/Koenig.h @@ -0,0 +1,6 @@ +#ifndef Springer +#define Springer +#include "Spieler.h" + +bool istzugerlaubt_Koenig(char** Brett, int startX, int startY, int endX, int endY, Player player); +#endif // Springer diff --git a/test/test_Koenig.c b/test/test_Koenig.c new file mode 100644 index 0000000..23bd7ad --- /dev/null +++ b/test/test_Koenig.c @@ -0,0 +1,48 @@ +#ifdef TEST +#include "unity.h" +#include +#include +#include +#include "Spieler.h" +#include "Schachbrett.h" +#include "Koenig.h" + + +void test_istzugerlaubt_Koenig_LegalMoves(void) { + char **Brett = Schachbrett_erstellen(); + Player player = PLAYER_WHITE; + //Vorbereitung für Test + Brett[1][4] = ' '; + Brett[2][4] = 'p'; + + // Test bewegung + TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 0, 4, 1, player)); // e1 zu e2 + TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 1, 4, 2, player)); // e2 zu e3 (Einnehmen von Figur) + + Schachbrettspeicher_freigeben(Brett); + Brett = Schachbrett_erstellen(); + player = PLAYER_BLACK; + //Vorbereitung für Test + Brett[6][4] = ' '; + Brett[5][4] = 'P'; + + // Test bewegung + TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 7, 4, 6, player)); // e8 zu e7 + TEST_ASSERT_TRUE(istzugerlaubt_Koenig(Brett, 4, 6, 4, 5, player)); // e7 zu e6 (Einnehmen von Figur) + + Schachbrettspeicher_freigeben(Brett); +} + +void test_istzugerlaubt_Koenig_IllegalMoves(void) { + char **Brett = Schachbrett_erstellen(); + Player player = PLAYER_WHITE; + + // Illegaler zug: König versucht sich 2 Felder zu bewegen + TEST_ASSERT_FALSE(istzugerlaubt_Koenig(Brett, 4, 0, 4, 2, player)); + + // Illegaler zug: König versucht sich auf besetztes Feld zu bewegen + TEST_ASSERT_FALSE(istzugerlaubt_Koenig(Brett, 4, 0, 3, 1, player)); + + Schachbrettspeicher_freigeben(Brett); +} +#endif // TEST