#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <ctype.h> #include "spieler.h" #include "Moving.h" #include "Koenig.h" bool GreiftBauerAn(char** Brett, int x, int y, Player player) { // Checke für weißen Bauer if (player == PLAYER_BLACK) { if (y > 0 && x > 0 && Brett[y - 1][x - 1] == 'P') { // Linke Diagonale return true; } if (y > 0 && x < 7 && Brett[y - 1][x + 1] == 'P') { // Rechte Diagonale return true; } } // Checke für schwarzen Bauer if (player == PLAYER_WHITE) { if (y < 7 && x > 0 && Brett[y + 1][x - 1] == 'p') { // Linke Diagonale return true; } if (y < 7 && x < 7 && Brett[y + 1][x + 1] == 'p') { // Rechte Diagonale return true; } } return false; } bool GreiftTurmAn(char** Brett, int x, int y, Player player) { char Turm = player == PLAYER_WHITE ? 'r' : 'R'; // Check Vertikal Hoch for (int i = y - 1; i >= 0; i--) { if (Brett[i][x] != ' ') { if (Brett[i][x] == Turm) { return true; } break; // Stoppt wenn irgendeine Figur gefunden wird } } // Vertikal Runter for (int i = y + 1; i < 8; i++) { if (Brett[i][x] != ' ') { if (Brett[i][x] == Turm) { return true; } break; } } // Horizontal Links for (int j = x - 1; j >= 0; j--) { if (Brett[y][j] != ' ') { if (Brett[y][j] == Turm) { return true; } break; } } // Horizontal Rechts for (int j = x + 1; j < 8; j++) { if (Brett[y][j] != ' ') { if (Brett[y][j] == Turm) { return true; } break; } } return false; } bool GreiftSpringerAn(char** Brett, int x, int y, Player player) { int Springerzüge[8][2] = { {2, 1}, {1, 2}, {-1, 2}, {-2, 1}, {-2, -1}, {-1, -2}, {1, -2}, {2, -1} }; for (int i = 0; i < 8; i++) { int neuX = x + Springerzüge[i][0]; int neuY = y + Springerzüge[i][1]; if (neuX >= 0 && neuX < 8 && neuY >= 0 && neuY < 8) { char Figur = Brett[neuY][neuX]; if (player == PLAYER_WHITE && Figur == 'n') { return true; } else if (player == PLAYER_BLACK && Figur == 'N') { return true; } } } return false; } bool istFeldUnsicher(char** Brett, int x, int y, Player player) { if (GreiftSpringerAn(Brett, x, y, player)) { return true; } if (GreiftBauerAn(Brett, x, y, player)) { return true; } if (GreiftTurmAn(Brett, x, y, player)) { return true; } return false; } bool istzugerlaubt_Koenig(char** Brett, int startX, int startY, int endX, int endY, Player player) { // Schauen ob der zug auf dem Spielbrett passiert if (endX < 0 || endX >= 8 || endY < 0 || endY >= 8) return false; // Berechnung des unterschieds der start und endpositionen int dx = abs(endX - startX); int dy = abs(endY - startY); // Schauen ob sich nur ein feld bewegt wird if (dx > 1 || dy > 1) return false; // Nicht auf befreundete Figuren bewegen char endPosition = Brett[endY][endX]; if (player == PLAYER_WHITE && isupper(endPosition)) return false; if (player == PLAYER_BLACK && islower(endPosition)) return false; // mehr checks noch benötigt return true; }