diff options
| author | Aargh Rai <aargh.rai+git@gmail.com> | 2026-05-27 18:02:44 +0530 |
|---|---|---|
| committer | Aargh Rai <aargh.rai+git@gmail.com> | 2026-05-27 18:02:44 +0530 |
| commit | 2c2a70b69869f149c0407a62f1bf4c39899027a7 (patch) | |
| tree | 9c3d194c32e82039fe6e0da9fbaf2e86aeef0a59 /src/engine/moves/knight.c | |
| parent | 58b2c8b6e2041e63c46b579eccc141d21801e985 (diff) | |
restructing
Diffstat (limited to 'src/engine/moves/knight.c')
| -rw-r--r-- | src/engine/moves/knight.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/engine/moves/knight.c b/src/engine/moves/knight.c new file mode 100644 index 0000000..c48b48e --- /dev/null +++ b/src/engine/moves/knight.c @@ -0,0 +1,101 @@ +#include "../moves.h" + +bitboard_t knight_moves[64] = { + 132096ULL, + 329728ULL, + 659712ULL, + 659712ULL >> 1, + 659712ULL >> 2, + 659712ULL >> 3, + 10489856ULL, + 4202496ULL, + + 33816580ULL, + 84410376ULL, + 168886289ULL, + 168886289ULL >> 1, + 168886289ULL >> 2, + 168886289ULL >> 3, + 2685403152ULL, + 1075839008ULL, + + 8657044482ULL, + 21609056261ULL, + 43234889994ULL, + 43234889994ULL >> 1, + 43234889994ULL >> 2, + 43234889994ULL >> 3, + 687463207072ULL, + 275414786112ULL, + + 8657044482ULL >> 8, + 21609056261ULL >> 8, + 43234889994ULL >> 8, + 43234889994ULL >> (8 + 1), + 43234889994ULL >> (8 + 2), + 43234889994ULL >> (8 + 3), + 687463207072ULL >> 8, + 275414786112ULL >> 8, + + 8657044482ULL >> 16, + 21609056261ULL >> 16, + 43234889994ULL >> 16, + 43234889994ULL >> (16 + 1), + 43234889994ULL >> (16 + 2), + 43234889994ULL >> (16 + 3), + 687463207072ULL >> 16, + 275414786112ULL >> 16, + + 8657044482ULL >> 24, + 21609056261ULL >> 24, + 43234889994ULL >> 24, + 43234889994ULL >> (24 + 1), + 43234889994ULL >> (24 + 2), + 43234889994ULL >> (24 + 3), + 687463207072ULL >> 24, + 275414786112ULL >> 24, + + 288234782788157440ULL, + 576469569871282176ULL, + 1224997833292120064ULL, + 1224997833292120064ULL >> 1, + 1224997833292120064ULL >> 2, + 1224997833292120064ULL >> 3, + 1152939783987658752ULL, + 2305878468463689728ULL, + + 1128098930098176ULL, + 2257297371824128ULL, + 4796069720358912ULL, + 4796069720358912ULL >> 1, + 4796069720358912ULL >> 2, + 4796069720358912ULL >> 3, + 4679521487814656ULL, + 9077567998918656ULL, +}; + +void get_knight_moves(moves_t* moves, position_t position) { + assert_valid_position(position); + + bitboard_t friendly_knights; + bitboard_t friendly_pieces; + if (position.turn == WHITE_TURN) { + friendly_pieces = whites(position); + friendly_knights = position.bitboards[WHITE_KNIGHT]; + } else { + friendly_pieces = blacks(position); + friendly_knights = position.bitboards[BLACK_KNIGHT]; + } + + while (friendly_knights) { + int from = __builtin_ctzll(friendly_knights); + friendly_knights &= friendly_knights - 1; + bitboard_t ATTACK_MASK = knight_moves[from]; + ATTACK_MASK &= ~friendly_pieces; + while (ATTACK_MASK) { + int to = __builtin_ctzll(ATTACK_MASK); + ATTACK_MASK &= ATTACK_MASK - 1; + add_move(moves, from, to); + } + } +} |
