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