Browse Source
Merge branch 'main' into 'Luis-Branch'
Merge branch 'main' into 'Luis-Branch'
# Conflicts: # src/main.cremotes/origin/Luis-Branch
fdai7834
11 months ago
8 changed files with 442 additions and 1 deletions
-
99src/Koenig.c
-
5src/Koenig.h
-
13src/Spielstatus.c
-
18src/Spielstatus.h
-
2src/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 |
@ -1,6 +1,6 @@ |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
|
|||
#include "Spielstatus.h" |
|||
|
|||
int main() { |
|||
|
|||
|
@ -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