8 return canDeclareWin<BLACK>(state);
10 return canDeclareWin<WHITE>(state);
13 template <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);
77 template <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 isOnBoardByOwner() const
piece がプレイヤーPの持ち物でかつボード上にある駒の場合は true.
bool hasEffectAt(Square target) const
対象とするマスにあるプレイヤーの利きがあるかどうか.
bool isMajor(Ptype ptype)
constexpr Player alt(Player player)
static bool canDeclareWin(const NumEffectState &state)
int countPiecesOnStand(Player pl, Ptype ptype) const
持駒の枚数を数える
int y() const
将棋としてのY座標を返す.
const Piece pieceOnBoard(Square sq) const
Square kingSquare() const