Emman Mensdorf
11 months ago
2 changed files with 164 additions and 8 deletions
@ -0,0 +1,115 @@ |
|||||
|
#include <stdlib.h> |
||||
|
#include <stdbool.h> |
||||
|
#include "stdio.h" |
||||
|
|
||||
|
char** Puzzlebrett_erstellen() { |
||||
|
|
||||
|
int R = 8; //Reihen |
||||
|
int Z = 8; //zeilen |
||||
|
|
||||
|
//Dynamisch Platz zuweisen für schachbrett |
||||
|
char** Brett = (char**)malloc(R * sizeof(char*)); |
||||
|
|
||||
|
if (Brett == NULL) { |
||||
|
// Fehler bei speicherzuweißung |
||||
|
return NULL; |
||||
|
} |
||||
|
for (int i = 0; i < R; i++) { |
||||
|
Brett[i] = (char*)malloc(Z * sizeof(char)); |
||||
|
if (Brett[i] == NULL) { |
||||
|
// Speicherfehlerbehbung |
||||
|
for (int j = 0; j < i; j++) { |
||||
|
free(Brett[j]); |
||||
|
} |
||||
|
free(Brett); |
||||
|
return NULL; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Spielbrett befüllen, groß und kleinschreibung unterschiedlich um schwarz/weiß zu trennen |
||||
|
char Aufbau[8][8] = { |
||||
|
{ 'R' , 'N' , ' ' , 'K' , ' ' , ' ' , 'N' , 'R' }, |
||||
|
{ 'P' , 'P' , 'P' , ' ' , ' ' , ' ' , 'B' , 'P' }, |
||||
|
{ ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' }, |
||||
|
{ ' ' , ' ' , ' ' , 'P' , ' ' , 'B' , ' ' , ' ' }, |
||||
|
{ ' ' , ' ' , ' ' , ' ' , 'D' , ' ' , ' ' , 'P' }, |
||||
|
{ ' ' , ' ' , 'n' , ' ' , ' ' , 'n' , ' ' , 'p' }, |
||||
|
{ 'p' , 'p' , 'p' , ' ' , 'p' , 'p' , 'p' , 'p' }, |
||||
|
{ 'r' , ' ' , 'b' , 'k' , 'd' , 'b' , ' ' , 'r' } |
||||
|
}; |
||||
|
|
||||
|
for (int i = 0; i < 8; i++) { |
||||
|
for (int j = 0; j < 8; j++) { |
||||
|
Brett[i][j] = Aufbau[i][j]; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return Brett; |
||||
|
} |
||||
|
|
||||
|
void print_Puzzlebrett(char** Brett) { |
||||
|
int counter = 1; |
||||
|
printf(" - 1 2 3 4 5 6 7 8 \n"); |
||||
|
for (int i = 0; i < 8; i++) { |
||||
|
printf(" %d " , counter); |
||||
|
counter++; |
||||
|
for (int j = 0; j < 8; j++) { |
||||
|
printf(" %c ", Brett[i][j]); |
||||
|
} |
||||
|
printf("\n"); |
||||
|
} |
||||
|
printf("\n"); |
||||
|
} |
||||
|
|
||||
|
void Puzzlebrettspeicher_freigeben(char** Brett) { |
||||
|
if (Brett == NULL) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
for (int i = 0; i < 8; i++) { |
||||
|
free(Brett[i]); |
||||
|
} |
||||
|
|
||||
|
free(Brett); |
||||
|
} |
||||
|
|
||||
|
bool loesung_abchecken(char** Brett) { |
||||
|
// checke nach dem gegnerischen König (kleines 'k') ab |
||||
|
int koenig_X = -1, koenig_Y = -1; |
||||
|
for (int i = 0; i < 8; i++) { |
||||
|
for (int j = 0; j < 8; j++) { |
||||
|
if (Brett[i][j] == 'k') { |
||||
|
koenig_X = i; |
||||
|
koenig_Y = j; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
if (koenig_X != -1 && koenig_Y != -1) { |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// Überprüfe, ob der gegnerische König schachmatt auf dem feld |
||||
|
if (koenig_X == -1 || koenig_Y == -1) { |
||||
|
// König nicht gefunden -> error |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
// Überprüfe, ob der gegnerische König von einer Figur bedroht wird |
||||
|
for (int i = 0; i < 8; i++) { |
||||
|
for (int j = 0; j < 8; j++) { |
||||
|
if (Brett[i][j] == 'D') { |
||||
|
// Lösung |
||||
|
if (i == 6 && j == 2) { |
||||
|
// Der Turm bedroht den König |
||||
|
printf("Puzzle geloest"); |
||||
|
return true; // gelöst |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
// Wenn keine Figur den gegnerischen König bedroht, ist das Puzzle nicht gelöst |
||||
|
printf("Puzzle nicht gelöst"); |
||||
|
return false; |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue