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