From 6f7cfbfcde39a57a59db17882339fa26055b75a0 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Wed, 14 Sep 2022 05:27:30 +0300 Subject: feat: precompute king attack tables --- src/board.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src/board.c') diff --git a/src/board.c b/src/board.c index 83fe8ce..a0b1bb7 100644 --- a/src/board.c +++ b/src/board.c @@ -18,7 +18,7 @@ void print_bitboard(Bitboard bb) { void precompute_knight_attack_table(Bitboard attacks[64]) { for (int index = 0; index < 64; index++) { - U64 position = (U64)1 << index; + U64 position = BIT << index; attacks[index] = ((position & notAFile & notBFile) << 6) | @@ -32,6 +32,17 @@ void precompute_knight_attack_table(Bitboard attacks[64]) { } } +void precompute_king_attack_table(Bitboard attacks[64]) { + for (int index = 0; index < 64; index++) { + U64 position = BIT << index; + + attacks[index] = + (position & notAFile) << 7 | (position << 8) | (position & notHFile) << 9 | + (position & notAFile) >> 1 | (position & notHFile) << 1 | + (position & notAFile) >> 9 | (position >> 8) | (position & notHFile) >> 7; + } +} + Board parse_FEN(char* FEN) { Board board; for (int i = 0; i < 12; i++) board.pieces[i] = 0; @@ -42,7 +53,7 @@ Board parse_FEN(char* FEN) { for (int k = 0; k < strlen(FEN); k++) { int c = FEN[k]; int index = rank * 8 + file; - Bitboard position = (Bitboard)1 << index; + Bitboard position = BIT << index; if (c > '0' && c <= '8') file += c - '0'; else { @@ -87,8 +98,6 @@ Board parse_FEN(char* FEN) { rank--; file = -1; // So that it becomes 0 break; - case ' ': // TODO: parse everything after - return board; } file++; } @@ -103,7 +112,7 @@ void print_board(Board board) { printf("%i|", rank + 1); for (int file = 0; file < 8; file++) { int index = rank * 8 + file; - Bitboard position = (Bitboard)1 << index; + Bitboard position = BIT << index; int found = 0; for (int piece = 0; piece < 12; piece++) { -- cgit v1.2.3