13 #include "move_legal.h"
20 static bool move_is_legal_debug (int move, const board_t * board);
26 bool move_is_pseudo(int move, const board_t * board) {
30 ASSERT(move_is_ok(move));
31 ASSERT(board_is_ok(board));
33 gen_moves(list,board);
35 return list_contain(list,move);
40 bool pseudo_is_legal(int move, const board_t * board) {
44 ASSERT(move_is_ok(move));
45 ASSERT(board_is_ok(board));
47 ASSERT(move_is_pseudo(move,board));
49 board_copy(new_board,board);
50 move_do(new_board,move);
52 return !is_in_check(new_board,colour_opp(new_board->turn));
57 bool move_is_legal(int move, const board_t * board) {
61 ASSERT(move_is_ok(move));
62 ASSERT(board_is_ok(board));
64 legal = move_is_pseudo(move,board) && pseudo_is_legal(move,board);
65 ASSERT(legal==move_is_legal_debug(move,board));
72 void filter_legal(list_t * list, const board_t * board) {
77 ASSERT(list_is_ok(list));
78 ASSERT(board_is_ok(board));
82 for (i = 0; i < list_size(list); i++) {
84 ASSERT(pos>=0&&pos<=i);
86 move = list_move(list,i);
87 value = list_value(list,i);
89 if (pseudo_is_legal(move,board)) {
90 list->move[pos] = move;
91 list->value[pos] = value;
96 ASSERT(pos>=0&&pos<=list_size(list));
100 // move_is_legal_debug()
102 static bool move_is_legal_debug(int move, const board_t * board) {
106 ASSERT(move_is_ok(move));
107 ASSERT(board_is_ok(board));
109 gen_legal_moves(list,board);
111 return list_contain(list,move);
114 // end of move_legal.cpp