mate_weak_or
以下、Bonanza v6 の mate_weak_or() の一部を掲載。
if ( turn ) { if ( IsDiscoverWK( from, to ) ) { return 0; } pc = -BOARD[from]; pc_cap = BOARD[to]; MOVE_CURR = ( To2Move(to) | From2Move(from) | Piece2Move(pc) | Cap2Move(pc_cap) ); if ( ( pc == bishop || pc == rook ) && ( to > I4 || from > I4 ) ) { MOVE_CURR |= FLAG_PROMO; } } else { if ( IsDiscoverBK( from, to ) ) { return 0; } pc = BOARD[from]; pc_cap = -BOARD[to]; MOVE_CURR = ( To2Move(to) | From2Move(from) | Piece2Move(pc) | Cap2Move(pc_cap) ); if ( ( pc == bishop || pc == rook ) && ( to < A6 || from < A6 ) ) { MOVE_CURR |= FLAG_PROMO; } } MakeMove( turn, MOVE_CURR, ply ); if ( I2From(MOVE_LAST) < nsquare ) { if ( InCheck(turn) ) { UnMakeMove( turn, MOVE_CURR, ply ); return 0; } flag = 1; } else { assert( ! InCheck(turn) ); flag = 2; }
IsDiscoverWK, IsDiscoverBK マクロで pin チェックしてから、
MakeMove で手を進めているのに、どうして手を進めた後に
InCheck で自玉に王手が掛かっているか調べているのか分からん……