1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#ifndef BITBOARD_H
#define BITBOARD_H
#include "ints.h"
typedef u64 bitboard_t;
enum {
WHITE_KING,
WHITE_QUEEN,
WHITE_ROOK,
WHITE_BISHOP,
WHITE_KNIGHT,
WHITE_PAWN,
BLACK_KING,
BLACK_QUEEN,
BLACK_ROOK,
BLACK_BISHOP,
BLACK_KNIGHT,
BLACK_PAWN,
PIECE_TYPE_COUNT,
};
enum {
WHITE_SHORT_CASTLE,
WHITE_LONG_CASTLE,
BLACK_SHORT_CASTLE,
BLACK_LONG_CASTLE,
};
enum {
WHITE_TURN,
BLACK_TURN,
};
#define BITMASK_RANK_A 255ULL
#define BITMASK_RANK_B 65280ULL
#define BITMASK_RANK_C 16711680ULL
#define BITMASK_RANK_D 4278190080ULL
#define BITMASK_RANK_E 1095216660480ULL
#define BITMASK_RANK_F 280375465082880ULL
#define BITMASK_RANK_G 71776119061217280ULL
#define BITMASK_RANK_H 18374686479671623680ULL
#define BITMASK_COLM_1 72340172838076673ULL
#define BITMASK_COLM_2 144680345676153346ULL
#define BITMASK_COLM_3 289360691352306692ULL
#define BITMASK_COLM_4 578721382704613384ULL
#define BITMASK_COLM_5 1157442765409226768ULL
#define BITMASK_COLM_6 2314885530818453536ULL
#define BITMASK_COLM_7 4629771061636907072ULL
#define BITMASK_COLM_8 9259542123273814144ULL
typedef struct {
bitboard_t bitboards[PIECE_TYPE_COUNT];
u8 castling;
u8 turn;
u8 passantable_column;
} position_t;
position_t position_starting();
void assert_valid_position(position_t position);
bitboard_t whites(position_t position);
bitboard_t blacks(position_t position);
void print_bitboard(bitboard_t bitboard);
#endif // !BITBOARD_H
|