void SEARCHER::do_move(const int& move) { int from = m_from(move),to = m_to(move),sq; /*remove captured piece*/ if(m_capture(move)) { if(is_ep(move)) { sq = to - pawn_dir[player]; } else { sq = to; } pcRemove(m_capture(move),sq); board[sq] = empty; } /*move piece*/ if(m_promote(move)) { board[to] = m_promote(move); board[from] = empty; pcAdd(m_promote(move),to); pcRemove(COMBINE(player,pawn),from); } else { board[to] = board[from]; board[from] = empty; pcSwap(from,to); } /*move castle*/ if(is_castle(move)) { int fromc,toc; if(to > from) { fromc = to + RR; toc = to + LL; } else { fromc = to + 2*LL; toc = to + RR; } board[toc] = board[fromc]; board[fromc] = empty; pcSwap(fromc,toc); } /*update current state*/ epsquare = 0; fifty++; if(DECOMB(player,m_piece(move)) == pawn) { fifty = 0; if(to - from == (2 * pawn_dir[player])) { epsquare = ((to + from) >> 1); }
void print_move(const int& move) { char f[6],t[6]; sq_str(m_from(move),f); sq_str(m_to(move),t); print("%s %s %c %c %c ep = %d",f,t,piece_name[m_piece(move)], piece_name[m_capture(move)],piece_name[m_promote(move)],is_ep(move)); }