88 lines
1.9 KiB
C
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;
|
|
}
|
|
}
|