#pragma once #include #include #define FILE_A 0x0101010101010101ULL #define FILE_B 0x0202020202020202ULL #define FILE_C 0x0404040404040404ULL #define FILE_D 0x0808080808080808ULL #define FILE_E 0x1010101010101010ULL #define FILE_F 0x2020202020202020ULL #define FILE_G 0x4040404040404040ULL #define FILE_H 0x8080808080808080ULL #define RANK_1 0x00000000000000FFULL #define RANK_2 0x000000000000FF00ULL #define RANK_3 0x0000000000FF0000ULL #define RANK_4 0x00000000FF000000ULL #define RANK_5 0x000000FF00000000ULL #define RANK_6 0x0000FF0000000000ULL #define RANK_7 0x00FF000000000000ULL #define RANK_8 0xFF00000000000000ULL #define SET_BIT(bb, sq) ((bb) |= (1ULL << (sq))) #define CLEAR_BIT(bb, sq) ((bb) &= ~(1ULL << (sq))) #define GET_BIT(bb, sq) ((bb) & (1ULL << (sq))) #define TOGGLE_BIT(bb, sq) ((bb) ^= (1ULL << (sq))) enum Color { WHITE = 0, BLACK = 1, BOTH = 2 }; enum Piece { P, N, B, R, Q, K, // 0..5 white p, n, b, r, q, k // 6..11 black }; enum Castling { CASTLE_WK = 1 << 0, CASTLE_WQ = 1 << 1, CASTLE_BK = 1 << 2, CASTLE_BQ = 1 << 3 }; struct Board { uint64_t pieces[12]; // Each set of pieces get a bitboard for each player. uint64_t occ[3]; // Color occupancy bitboards. uint64_t king_square[2]; uint8_t castling_rights; int ep_square; enum Color side_to_move; int halfmove_clock; int fullmove_number; }; void create_knight_attack_cache(); void create_pawn_attack_cache(); void create_king_attack_cache(); void print_board();