diff --git a/src/Springer.c b/src/Springer.c new file mode 100644 index 0000000..785d840 --- /dev/null +++ b/src/Springer.c @@ -0,0 +1,31 @@ +#include +#include +#include +#include +#include "spieler.h" +#include "Moving.h" +#include "Springer.h" + +bool istzugerlaubt_Springer(char** Brett, int startX, int startY, int endX, int endY, Player player) { + // Berechnung des unterschieds der start und endpositionen + int dx = abs(endX - startX); + int dy = abs(endY - startY); + + + + // Schaut ob die bewegung eine L-form hat + if ((dx == 2 && dy == 1) || (dx == 1 && dy == 2)) { + + char EndPosition = Brett[endY][endX]; + + if (player == PLAYER_WHITE && islower(EndPosition)) { + return true; // Erlaubter zug weil die Position leer ist oder von einer gegnerischen Figur belegt ist + } else if (player == PLAYER_BLACK && isupper(EndPosition)) { + return true; // Erlaubter zug weil die Position leer ist oder von einer gegnerischen Figur belegt ist + } else if (EndPosition == ' ') { + return true; // Erlaubter zug weil die Zielposition leer ist + } + } + + return false; // kein erlaubter zug +} diff --git a/src/Springer.h b/src/Springer.h new file mode 100644 index 0000000..f7cc8e7 --- /dev/null +++ b/src/Springer.h @@ -0,0 +1,7 @@ +#ifndef Springer +#define Springer +#include "spieler.h" + +bool istzugerlaubt_Springer(char** Brett, int startX, int startY, int endX, int endY, Player player); + +#endif // Springer diff --git a/test/test_Springer.c b/test/test_Springer.c new file mode 100644 index 0000000..790a465 --- /dev/null +++ b/test/test_Springer.c @@ -0,0 +1,18 @@ +#ifdef TEST +#include "unity.h" +#include +#include +#include +#include "Springer.h" +#include "Schachbrett.h" +#include "Spieler.h" + +void test_istzugerlaubt_Springer_LegalMove(void) { + char **Brett = Schachbrett_erstellen(); + + // Teste legaler Zug für weißen Springer : b1 zu a3 + TEST_ASSERT_TRUE(istzugerlaubt_Springer(Brett, 1, 0, 0, 2, PLAYER_WHITE)); + + Schachbrettspeicher_freigeben(Brett); +} +#endif // TEST