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.

47 lines
1.4 KiB

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <ctype.h>
  5. #include "Spieler.h"
  6. #include "Moving.h"
  7. #include "Dame.h"
  8. bool istzugerlaubt_Dame(char** Brett, int startX, int startY, int endX, int endY, Player player){
  9. // Überprüfe, ob der Zug auf dem Spielbrett liegt
  10. if (endX < 0 || endX >= 8 || endY < 0 || endY >= 8)
  11. return false;
  12. // Berechne den Unterschied der Start- und Endpositionen
  13. int dx = abs(endX - startX);
  14. int dy = abs(endY - startY);
  15. // Überprüfe, ob sich die Dame nur vertikal, horizontal oder diagonal bewegt
  16. if (dx != 0 && dy != 0 && dx != dy)
  17. return false;
  18. // Überprüfe, ob die Dame über andere Figuren springt
  19. if (dx > 0) {
  20. int dirX = (endX - startX) / dx;
  21. for (int i = 1; i < dx; i++) {
  22. if (Brett[startY + i * dirX][startX + i * dirX] != ' ')
  23. return false;
  24. }
  25. }
  26. if (dy > 0) {
  27. int dirY = (endY - startY) / dy;
  28. for (int i = 1; i < dy; i++) {
  29. if (Brett[startY + i * dirY][startX + i * dirY] != ' ')
  30. return false;
  31. }
  32. }
  33. // Überprüfe, ob die Dame eine feindliche Figur schlägt oder auf ein leeres Feld zieht
  34. char endPosition = Brett[endY][endX];
  35. if (player == PLAYER_WHITE && isupper(endPosition))
  36. return false;
  37. if (player == PLAYER_BLACK && islower(endPosition))
  38. return false;
  39. return true;
  40. }