Browse Source
Merge branch 'fdai7492' into 'main'
Merge branch 'fdai7492' into 'main'
Implementierung König bis auf Schachmatt See merge request fdai7834/taktikmeister!3remotes/origin/Läufer-fertig,-Hendrik-Voß
fdai7492
11 months ago
8 changed files with 444 additions and 1 deletions
-
99src/Koenig.c
-
5src/Koenig.h
-
13src/Spielstatus.c
-
18src/Spielstatus.h
-
4src/main.c
-
50test/test_Koenig.c
-
14test/test_Spielstatus.c
-
242test/test_imSchachstehen.c
@ -0,0 +1,13 @@ |
|||||
|
#include "Spielstatus.h" |
||||
|
#include <stdio.h> |
||||
|
|
||||
|
// Initalisiert den Spielstatus |
||||
|
void initalisiereSpielstatus(Spielstatus* status) { |
||||
|
if (status == NULL) return; |
||||
|
status->BewegteSichWeißerKoenig = false; |
||||
|
status->BewegteSichSchwarzerKoenig = false; |
||||
|
status->WeißerTurmKoenigSeiteBewegt = false; |
||||
|
status->WeißerTurmDameSeiteBewegt = false; |
||||
|
status->SchwarzerTurmKoenigSeiteBewegt = false; |
||||
|
status->SchwarzerTurmDameSeiteBewegt = false; |
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
#ifndef SPIELSTATUS_H |
||||
|
#define SPIELSTATUS_H |
||||
|
|
||||
|
#include <stdbool.h> |
||||
|
|
||||
|
typedef struct { |
||||
|
bool BewegteSichWeißerKoenig; |
||||
|
bool BewegteSichSchwarzerKoenig; |
||||
|
bool WeißerTurmKoenigSeiteBewegt; |
||||
|
bool WeißerTurmDameSeiteBewegt; |
||||
|
bool SchwarzerTurmKoenigSeiteBewegt; |
||||
|
bool SchwarzerTurmDameSeiteBewegt; |
||||
|
} Spielstatus; |
||||
|
|
||||
|
void initalisiereSpielstatus(Spielstatus* status); |
||||
|
|
||||
|
|
||||
|
#endif // SPIELSTATUS_H |
@ -0,0 +1,14 @@ |
|||||
|
#ifdef TEST |
||||
|
#include "unity.h" |
||||
|
#include "Spielstatus.h" |
||||
|
void test_initalisiereSpielstatus(void) { |
||||
|
Spielstatus status; |
||||
|
initalisiereSpielstatus(&status); |
||||
|
TEST_ASSERT_FALSE(status.BewegteSichWeißerKoenig); |
||||
|
TEST_ASSERT_FALSE(status.BewegteSichSchwarzerKoenig); |
||||
|
TEST_ASSERT_FALSE(status.WeißerTurmKoenigSeiteBewegt); |
||||
|
TEST_ASSERT_FALSE(status.WeißerTurmDameSeiteBewegt); |
||||
|
TEST_ASSERT_FALSE(status.SchwarzerTurmKoenigSeiteBewegt); |
||||
|
TEST_ASSERT_FALSE(status.SchwarzerTurmDameSeiteBewegt); |
||||
|
} |
||||
|
#endif // TEST |
@ -0,0 +1,242 @@ |
|||||
|
#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(); |
||||
|
//Weißer König wird von schwarzen Bauer angegriffen |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[5][5] = 'p'; |
||||
|
|
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
// Schwarzer König wird von weißen Bauer angegriffen |
||||
|
Brett[3][3] = 'k'; |
||||
|
Brett[2][2] = 'P'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
// Schwarzer König wird von weißen Bauer angegriffen(andere seite) |
||||
|
Brett[3][3] = 'k'; |
||||
|
Brett[2][4] = 'P'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
// Weißer König nicht in Gefahr |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[3][4] = 'P'; |
||||
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
// Schwarzer König nicht in Gefahr |
||||
|
Brett[3][3] = 'k'; |
||||
|
Brett[1][3] = 'P'; |
||||
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
} |
||||
|
void test_SchachDurchTurm(void) { |
||||
|
char** Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Weißer König wird von schwarzen Turm bedroht (Horizontal) |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[4][7] = 'r'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Weißer König wird von schwarzen Turm bedroht (Vertikal) |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[0][4] = 'r'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer König wird von weißen Turm bedroht (Horizontal) |
||||
|
Brett[3][3] = 'k'; |
||||
|
Brett[3][0] = 'R'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer König wird nicht bedroht weil er von einer Figur beschützt wird |
||||
|
Brett[3][3] = 'k'; |
||||
|
Brett[3][1] = 'R'; |
||||
|
Brett[3][2] = 'p'; |
||||
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Weißer König nicht in gefahr |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[5][5] = 'r'; |
||||
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
} |
||||
|
void test_SchachDurchSpringer(void) { |
||||
|
char** Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Weißer König bedroht durch schwarzen Springer |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[3][6] = 'n'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer König bedroht durch weißen Springer |
||||
|
Brett[3][3] = 'k'; |
||||
|
Brett[5][4] = 'N'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Weißer könig nicht bedroht |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[7][7] = 'n'; |
||||
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer könig durch mehrere Springer bedroht |
||||
|
Brett[0][0] = 'k'; |
||||
|
Brett[1][2] = 'N'; |
||||
|
Brett[2][1] = 'N'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer König wird trotz Mauer angegriffen |
||||
|
Brett[0][0] = 'k'; |
||||
|
Brett[0][1] = 'p'; |
||||
|
Brett[1][0] = 'p'; |
||||
|
Brett[1][1] = 'p'; |
||||
|
Brett[1][2] = 'N'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
} |
||||
|
void test_SchachDurchLaeufer(void) { |
||||
|
char** Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Weißer König wird von schwarzen Läufer bedroht |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[2][2] = 'b'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer König wird von weißen Läufer bedroht |
||||
|
Brett[3][3] = 'k'; |
||||
|
Brett[6][0] = 'B'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Weißer König wird nicht bedroht |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[6][7] = 'b'; |
||||
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer König wird von mehreren Läufer bedroht |
||||
|
Brett[4][4] = 'k'; |
||||
|
Brett[6][6] = 'B'; |
||||
|
Brett[0][0] = 'B'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer könig nicht in gefahr weil Läufer blockiert wird |
||||
|
Brett[0][0] = 'k'; |
||||
|
Brett[2][2] = 'P'; |
||||
|
Brett[4][4] = 'B'; |
||||
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
} |
||||
|
void test_SchachDurchDame(void) { |
||||
|
char** Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Weißer könig wird von schwarzer Dame bedroht (Horizontal) |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[4][7] = 'q'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer könig wird von weißer Dame bedroht (Vertikal) |
||||
|
Brett[3][3] = 'k'; |
||||
|
Brett[0][3] = 'Q'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Weißer könig wird nicht von schwarzer Dame bedroht aufgrund blockierender Figur |
||||
|
Brett[4][4] = 'K'; |
||||
|
Brett[4][2] = 'p'; |
||||
|
Brett[4][0] = 'q'; |
||||
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_WHITE)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer könig wird von weißer Dame bedroht (Diagonal) |
||||
|
Brett[0][0] = 'k'; |
||||
|
Brett[7][7] = 'Q'; |
||||
|
TEST_ASSERT_TRUE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
Brett = ErstelleTestBrett(); |
||||
|
|
||||
|
// Schwarzer könig wird nicht von weißer Dame bedroht aufgrund blockierender Figur |
||||
|
Brett[7][7] = 'k'; |
||||
|
Brett[5][5] = 'P'; |
||||
|
Brett[3][3] = 'Q'; |
||||
|
TEST_ASSERT_FALSE(istKoenigImSchach(Brett, PLAYER_BLACK)); |
||||
|
|
||||
|
freeTestBrett(Brett); |
||||
|
} |
||||
|
#endif // TEST |
Write
Preview
Loading…
Cancel
Save
Reference in new issue