diff options
| author | Aargh Rai <aargh.rai+git@gmail.com> | 2026-07-16 15:30:08 +0530 |
|---|---|---|
| committer | Aargh Rai <aargh.rai+git@gmail.com> | 2026-07-18 14:03:55 +0530 |
| commit | f1c6f59ae02a9d9db50171a69032dc2409a0e6c6 (patch) | |
| tree | 3c5d358f62a4d5925e8b768bcc3e79e9a7c9cf2c /src/engine/moves/queen.c | |
| parent | 1a52152852ff29c727673fc80e8bf8eca5ed6365 (diff) | |
magic bitboards via AI
Diffstat (limited to 'src/engine/moves/queen.c')
| -rw-r--r-- | src/engine/moves/queen.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/src/engine/moves/queen.c b/src/engine/moves/queen.c index 3e0b8ef..bd3f564 100644 --- a/src/engine/moves/queen.c +++ b/src/engine/moves/queen.c @@ -16,17 +16,18 @@ void get_queen_moves(moves_t* moves, position_t position) { enemy_pieces = whites(position); friendly_queens = position.bitboards[BLACK_QUEEN]; } - - __forloop_rook_moves_gen( - moves, - friendly_queens, - friendly_pieces, - enemy_pieces - ); - __forloop_bishop_moves_gen( - moves, - friendly_queens, - friendly_pieces, - enemy_pieces - ); + + bitboard_t all_occupied = friendly_pieces | enemy_pieces; + bitboard_t queens = friendly_queens; + while (queens) { + int from = __builtin_ctzll(queens); + queens &= queens - 1; + bitboard_t attacks = (get_rook_attacks(from, all_occupied) | + get_bishop_attacks(from, all_occupied)) & ~friendly_pieces; + while (attacks) { + int to = __builtin_ctzll(attacks); + attacks &= attacks - 1; + add_move(moves, from, to, .flags = ((enemy_pieces >> to) & 1) ? MOVE_CAPTURE : 0); + } + } } |
