RatChess/src/help.c
2025-06-18 12:38:00 -04:00

88 lines
1.9 KiB
C

#include <stdio.h>
#include "types.h"
long long fullSet(sets *s) {
return s->bishops ^ s->king ^ s->knights ^ s->pawns ^ s->queen ^ s->rooks;
}
long long fullSetBoth(game *g) {
return fullSet(&g->white) ^ fullSet(&g->black);
}
void print_bitboard(long long bitboard) {
for (int i = 63; i >= 0; i--) {
// Check if the i-th bit is set
if ((bitboard >> i) & 1) {
printf("1 ");
} else {
printf("0 ");
}
// Print a newline every 8 bits (for rows)
if (i % 8 == 0) {
printf("\n");
}
}
printf("\n");
}
long long *findSet(game *g, long long bit) {
if (g->white.pawns & bit) {
return &g->white.pawns;
} else if (g->white.knights & bit) {
return &g->white.knights;
} else if (g->white.bishops & bit) {
return &g->white.bishops;
} else if (g->white.rooks & bit) {
return &g->white.rooks;
} else if (g->white.queen & bit) {
return &g->white.queen;
} else if (g->white.king & bit) {
return &g->white.king;
} else if (g->black.pawns & bit) {
return &g->black.pawns;
} else if (g->black.knights & bit) {
return &g->black.knights;
} else if (g->black.bishops & bit) {
return &g->black.bishops;
} else if (g->black.rooks & bit) {
return &g->black.rooks;
} else if (g->black.queen & bit) {
return &g->black.queen;
} else if (g->black.king & bit) {
return &g->black.king;
} else {
return NULL;
}
}
long long *charToSet(game *g, char c) {
switch (c) {
case 'P':
return &g->white.pawns;
case 'N':
return &g->white.knights;
case 'B':
return &g->white.bishops;
case 'R':
return &g->white.rooks;
case 'Q':
return &g->white.queen;
case 'K':
return &g->white.king;
case 'p':
return &g->black.pawns;
case 'n':
return &g->black.knights;
case 'b':
return &g->black.bishops;
case 'r':
return &g->black.rooks;
case 'q':
return &g->black.queen;
case 'k':
return &g->black.king;
default:
return NULL;
}
}