Browse Source

PuzzleII.c lösung ergänzt, Emman Mensdorf

main
Emman Mensdorf 11 months ago
parent
commit
a3fdf96966
  1. 57
      src/schach_in_ein_puzzle/PuzzleI.c
  2. 115
      src/schach_in_ein_puzzle/PuzzleII.c

57
src/schach_in_ein_puzzle/PuzzleI.c

@ -28,14 +28,14 @@ char** Puzzlebrett_erstellen() {
// Spielbrett befüllen, groß und kleinschreibung unterschiedlich um schwarz/weiß zu trennen // Spielbrett befüllen, groß und kleinschreibung unterschiedlich um schwarz/weiß zu trennen
char Aufbau[8][8] = { char Aufbau[8][8] = {
{ 'R' , 'N' , ' ' , 'K' , ' ' , ' ' , 'N' , 'R' },
{ 'P' , 'P' , 'P' , ' ' , ' ' , ' ' , 'B' , 'P' },
{ ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' },
{ ' ' , ' ' , ' ' , 'P' , ' ' , 'B' , ' ' , ' ' },
{ ' ' , ' ' , ' ' , ' ' , 'D' , ' ' , ' ' , ' ' },
{ ' ' , ' ' , 'n' , ' ' , ' ' , 'n' , ' ' , ' ' },
{ 'p' , 'p' , 'p' , ' ' , 'p' , 'p' , 'p' , 'p' },
{ 'r' , ' ' , 'b' , 'k' , 'd' , 'b' , ' ' , 'r' }
{ ' ' , 'K' , ' ' , ' ' , 'R' , ' ' , ' ' , ' ' },
{ ' ' , 'P' , 'P' , ' ' , ' ' , ' ' , 'r' , ' ' },
{ 'P' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' },
{ ' ' , ' ' , 'b' , ' ' , ' ' , ' ' , ' ' , ' ' },
{ ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , 'P' },
{ ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , 'p' },
{ 'p' , 'p' , 'p' , ' ' , ' ' , ' ' , ' ' , ' ' },
{ ' ' , 'k' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' }
}; };
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
@ -72,3 +72,44 @@ void Puzzlebrettspeicher_freigeben(char** Brett) {
free(Brett); 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] == 'R') {
// Überprüfe, ob der Turm den König horizontal bedroht
if (i == 7 && j == 4) {
// 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;
}

115
src/schach_in_ein_puzzle/PuzzleII.c

@ -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;
}
Loading…
Cancel
Save