8 return canDeclareWin<BLACK>(state);
10 return canDeclareWin<WHITE>(state);
13template <osl::Player Turn>
18 assert(Turn == state.
turn());
29 const int y = myKingSquare.
y();
30 const int enemyCampMin = (Turn==
BLACK) ? 1 : 7;
31 const int enemyCampMax = enemyCampMin + 2;
33 if( (y < enemyCampMin) || (y > enemyCampMax) )
42 for (
int i = enemyCampMin; i <= enemyCampMax; i++)
43 for (
int j=1; j<=9; j++){
47 onEnemyCamp += 1 + 4 *
isMajor(pieceOnEnemyCamp.
ptype());
63 if ( onEnemyCamp + onStand < 27 + (Turn==
BLACK) )
72 return canDeclareWin<BLACK>(state, distance);
74 return canDeclareWin<WHITE>(state, distance);
77template <osl::Player Turn>
88 assert(Turn == state.
turn());
100 const int y = myKingSquare.
y();
101 const int enemyCampMin = (Turn==
BLACK) ? 1 : 7;
102 const int enemyCampMax = enemyCampMin + 2;
104 if( (y < enemyCampMin) || (y > enemyCampMax) )
111 int onEnemyCamp = -1;
113 for (
int i = enemyCampMin; i <= enemyCampMax; i++)
114 for (
int j=1; j<=9; j++){
118 onEnemyCamp += 1 + 4 *
isMajor(pieceOnEnemyCamp.
ptype());
131 if ( onEnemyCamp + onStand < 27 + (Turn==
BLACK) )
134 if (countPiece < 11) {
135 drops = 11 - countPiece;
148 template bool osl::enter_king::EnterKing::canDeclareWin<BLACK>(
const NumEffectState&);
149 template bool osl::enter_king::EnterKing::canDeclareWin<WHITE>(
const NumEffectState&);
150 template bool osl::enter_king::EnterKing::canDeclareWin<BLACK>(
const NumEffectState&,
int &drops);
151 template bool osl::enter_king::EnterKing::canDeclareWin<WHITE>(
const NumEffectState&,
int &drops);
bool hasEffectAt(Square target) const
対象とするマスにあるプレイヤーの利きがあるかどうか.
bool isOnBoardByOwner() const
piece がプレイヤーPの持ち物でかつボード上にある駒の場合は true.
const Piece pieceOnBoard(Square sq) const
Square kingSquare() const
int countPiecesOnStand(Player pl, Ptype ptype) const
持駒の枚数を数える
int y() const
将棋としてのY座標を返す.
bool isMajor(Ptype ptype)
constexpr Player alt(Player player)
static bool canDeclareWin(const NumEffectState &state)