3#ifndef OSL_MOVE_CLASSIFIER_PAWNDROPCHECKMATE_H
4#define OSL_MOVE_CLASSIFIER_PAWNDROPCHECKMATE_H
37 const Piece king = state.template kingPiece<Opponent>();
53 return escape7(state, king_position, to);
59template <osl::Player P>
70 = kingSquare +
Board_Table.getOffset(Opponent, dir);
77 if (! state.template hasEffectAt<P>(target, attacker))
81 assert(attacker.
owner() == P);
88 if (shortOffset.
zero())
95template <osl::Player P>
bool hasEffectAt(Square target) const
対象とするマスにあるプレイヤーの利きがあるかどうか.
Piece safeCaptureNotByKing(Square target, Piece king) const
玉の素抜きなしに合法手でtargetに移動可能かを判定
uint64_t Iking8Info(Player king) const
const Square square() const
bool isOnBoardByOwner() const
piece がプレイヤーPの持ち物でかつボード上にある駒の場合は true.
static const Piece EMPTY()
const Piece pieceAt(Square sq) const
bool isPieceStand() const
bool isEdge() const
onBoardから8近傍のオフセットを足した点がedgeかどうかの判定 そこそこ速くなった.
unsigned int liberty() const
8-15 bit 目を 0-7bitにshiftして返す
long long v2di __attribute__((vector_size(16)))
const BoardTable Board_Table
Offset32Base< 8, 9 > Offset32
const PtypeO PTYPEO_EDGE __attribute__((unused))
constexpr Player alt(Player player)
static bool canEscape(const NumEffectState &state, Square kingSquare, Direction dir, Square dropAt)
kingSquare に居る alt(P)の玉が dir 方向に逃げられるか.
static bool escape7(const NumEffectState &state, Square kingSquare, Square to)
王が前以外に移動可能か
static bool isMember(const NumEffectState &state, Ptype ptype, Square from, Square to)