Browse Source

Im Schach stehen + Test für Bauer, Anton Lohrey

remotes/origin/Läufer-fertig,-Hendrik-Voß
fdai7492 11 months ago
parent
commit
e10bbdc30f
  1. 24
      src/Koenig.c
  2. 1
      src/Koenig.h
  3. 65
      test/test_imSchachstehen.c

24
src/Koenig.c

@ -208,7 +208,31 @@ bool istFeldUnsicher(char** Brett, int x, int y, Player player) {
return false; 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) { bool istzugerlaubt_Koenig(char** Brett, int startX, int startY, int endX, int endY, Player player) {
// Schauen ob der zug auf dem Spielbrett passiert // Schauen ob der zug auf dem Spielbrett passiert

1
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 GreiftDameAn(char** Brett, int x, int y, Player player);
bool GreiftKoenigAn(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 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); bool istzugerlaubt_Koenig(char** Brett, int startX, int startY, int endX, int endY, Player player);
#endif // Koenig #endif // Koenig

65
test/test_imSchachstehen.c

@ -0,0 +1,65 @@
#ifdef TEST
#include "unity.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#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
Loading…
Cancel
Save