3 #ifndef OSL_MOVE_CLASSIFIER_PAWNDROPCHECKMATE_H
4 #define OSL_MOVE_CLASSIFIER_PAWNDROPCHECKMATE_H
11 namespace move_classifier
26 static bool escape7(
const NumEffectState& state,
28 static bool isMember(
const NumEffectState& state,
37 const Piece king = state.template kingPiece<Opponent>();
44 if (! state.hasEffectAt(P, to))
46 if (
King8Info(state.Iking8Info(Opponent)).liberty() != 0)
49 if (EffectUtil::template safeCaptureNotByKing<Opponent>
54 return escape7(state, king_position, to);
60 template <osl::Player P>
72 const Piece p = state.pieceAt(target);
78 if (! state.template hasEffectAt<P>(target, attacker))
80 if (attacker == Piece::EMPTY())
82 assert(attacker.
owner() == P);
89 if (shortOffset.zero())
96 template <osl::Player P>
105 if (canEscape(state, king_position,
UL, to))
107 if (canEscape(state, king_position,
UR, to))
109 if (canEscape(state, king_position,
L, to))
111 if (canEscape(state, king_position,
R, to))
113 if (canEscape(state, king_position,
DL, to))
115 if (canEscape(state, king_position,
D, to))
117 if (canEscape(state, king_position,
DR, to))