You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
48 lines
1.4 KiB
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdbool.h>
|
|
#include <ctype.h>
|
|
#include "Spieler.h"
|
|
#include "Moving.h"
|
|
#include "Dame.h"
|
|
|
|
bool istzugerlaubt_Dame(char** Brett, int startX, int startY, int endX, int endY, Player player){
|
|
|
|
// Überprüfe, ob der Zug auf dem Spielbrett liegt
|
|
if (endX < 0 || endX >= 8 || endY < 0 || endY >= 8)
|
|
return false;
|
|
|
|
// Berechne den Unterschied der Start- und Endpositionen
|
|
int dx = abs(endX - startX);
|
|
int dy = abs(endY - startY);
|
|
|
|
// Überprüfe, ob sich die Dame nur vertikal, horizontal oder diagonal bewegt
|
|
if (dx != 0 && dy != 0 && dx != dy)
|
|
return false;
|
|
|
|
// Überprüfe, ob die Dame über andere Figuren springt
|
|
if (dx > 0) {
|
|
int dirX = (endX - startX) / dx;
|
|
for (int i = 1; i < dx; i++) {
|
|
if (Brett[startY + i * dirX][startX + i * dirX] != ' ')
|
|
return false;
|
|
}
|
|
}
|
|
if (dy > 0) {
|
|
int dirY = (endY - startY) / dy;
|
|
for (int i = 1; i < dy; i++) {
|
|
if (Brett[startY + i * dirY][startX + i * dirY] != ' ')
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Überprüfe, ob die Dame eine feindliche Figur schlägt oder auf ein leeres Feld zieht
|
|
char endPosition = Brett[endY][endX];
|
|
if (player == PLAYER_WHITE && isupper(endPosition))
|
|
return false;
|
|
if (player == PLAYER_BLACK && islower(endPosition))
|
|
return false;
|
|
|
|
return true;
|
|
|
|
}
|