#include "../search.h" #include #ifdef TEST_MOD #include "../bitboard.c" #include "./moves.c" #endif void get_king_moves(moves_t* moves, position_t position) { assert_valid_position(position); bitboard_t friendly_king; int king_square; bitboard_t friendly_pieces; if (position.turn == WHITE_TURN) { friendly_pieces = whites(position); friendly_king = position.bitboards[WHITE_KING]; } else { friendly_pieces = blacks(position); friendly_king = position.bitboards[BLACK_KING]; } king_square = __builtin_ctzll(friendly_king); bitboard_t movement; if (king_square >= 10) { movement = 920078ULL << (king_square - 10); } else { movement = 920078ULL >> -(king_square - 10); } if (friendly_king & BITMASK_FILE_A) { movement &= BITMASK_FILE_A | BITMASK_FILE_B; } else if (friendly_king & BITMASK_FILE_H) { movement &= BITMASK_FILE_G | BITMASK_FILE_H; } movement &= ~friendly_pieces; print_bitboard(movement); while (movement) { int to = __builtin_ctzll(movement); movement &= movement - 1; add_move(moves, king_square, to); } } bool test_empty_board() { int i = 0; while (i++ < 1000000000); return true; } bool test_friendly_pieces() { return false; }