28 if (
state->hasChangedEffects())
33 ?
state->kingPiece(turn) :
state->findThreatenedPiece(turn);
43 if (
state->pieceAt(knight_attack).isEmpty()
95 for (
size_t i=0; i<
bookmove.size(); ++i)
106 if (
state->inCheck())
108 for (
int i=0; i<40; ++i) {
116 if (long_effect[0].none() || long_effect[1].none())
continue;
119 attack_piece[0] =
state->findLongAttackAt(p,
U);
120 attack_piece[1] =
state->findLongAttackAt(p,
D);
122 && attack_piece[0].owner() != attack_piece[1].owner()) {
130 attack_piece[0] =
state->findLongAttackAt(p,
L);
131 attack_piece[1] =
state->findLongAttackAt(p,
R);
133 && attack_piece[0].owner() != attack_piece[1].owner()) {
141 attack_piece[0] =
state->findLongAttackAt(p,
UL);
142 attack_piece[1] =
state->findLongAttackAt(p,
DR);
144 && attack_piece[0].owner() != attack_piece[1].owner()) {
148 attack_piece[0] =
state->findLongAttackAt(p,
UR);
149 attack_piece[1] =
state->findLongAttackAt(p,
DL);
151 && attack_piece[0].owner() != attack_piece[1].owner()) {
163 const unsigned int spaces = king8info.
spaces();
164 if (spaces == 0 || (spaces & (spaces-1)))
168 assert(
state.pieceAt(sq).isEmpty());
169 if (
state.countEffect(king, sq) != 2 || !
state.hasEffectAt(
alt(king), sq))
172 drop_candidate &= 0xff00;
173 drop_candidate += spaces;
176 while(drop_ptype.
any()){
178 if (
state.hasPieceOnStand(
alt(king),ptype))
179 return std::make_pair(
state.findCheapAttack(king, sq), sq);
189 &
state->effectedMask(owner) &
state->effectedMask(
alt(owner));
190 while (attacked.
any()) {
193 const int d =
state->countEffect(owner, p.
square());
203 directions &= directions-1;
209 assert(
state->hasEffectByPiece(support, target));
210 if (
state->countEffect(owner, target)
211 <=
state->countEffect(
alt(owner), target)+1
212 -
state->hasEffectByPiece(attack_p, target)
255 for (
int x=1; x<=9; ++x) {
256 for (
int y=1; y<=9; ++y) {
257 const Square position(x,y);
static const BookInMemory & instance(const std::string &filename="")
PtypeO ptypeO() const
移動後のPtype, i.e., 成る手だった場合成った後
bool isNormal() const
INVALID でも PASS でもない.
static bool hasEffect(const NumEffectState &state, PtypeO ptypeo, Square from, Square target)
ptypeo の駒がfromからtargetの8近傍に直接の利きを持つか
const Square square() const
bool isOnBoardByOwner() const
piece がプレイヤーPの持ち物でかつボード上にある駒の場合は true.
static const Piece EMPTY()
unsigned int index() const
深さ固定で,その深さまで depth first searchで読む詰将棋.
const ProofDisproof hasCheckmateMoveOfTurn(int depth, Move &best_move)
unsigned int libertyDropMask() const
0-15bit
unsigned int spaces() const
証明数(proof number)と反証数(disproof number).
bool isCheckmateSuccess() const
static const GeneralMask makeDirect(mask_int_t value)
int takeOneBit()
non-zeroのmaskのsetされているビットをLSBから探し,その番号を返す 副作用としてmaskの対応するビットをクリアする
static void updateCache(StateInfo &)
static void updateCache(StateInfo &info)
const ImmediateCheckmateTable Immediate_Checkmate_Table
GeneralMask< mask_int_t > mask_t
bool operator==(const PinnedGeneral &l, const PinnedGeneral &r)
const PtypeTable Ptype_Table
Ptype unpromote(Ptype ptype)
ptypeがpromote後の型の時に,promote前の型を返す. promoteしていない型の時はそのまま返す
const BoardTable Board_Table
constexpr bool isPiece(Ptype ptype)
ptypeが空白やEDGEでないかのチェック
bool isMajor(Ptype ptype)
constexpr Player alt(Player player)
static const uint64_t indexMask
static SendOff8 find(const NumEffectState &state, Square king_position, Square8 &out)
static int bsf(Integer mask)
void updatePinnedGenerals(Player owner)
CArray< Move, 2 > bookmove
static std::pair< Piece, Square > findCheckmateDefender(const NumEffectState &state, Player king)
CArray< Piece, 2 > threatened
unsigned int possible_threatmate_ptype
const NumEffectState * state
CArray2d< bool, 40, 2 > attack_shadow
PieceVector king8_long_pieces
const MoveStack * history
static Move findShortThreatmate(const NumEffectState &, Move last_move)
CArray< bool, 2 > move_candidate_exists
CArray< pinned_gs_t, 2 > exchange_pins
BoardMask changed_effects
CArray< std::pair< Piece, Square >, 2 > checkmate_defender
CArray< pattern_square_t, Square::SIZE > pattern_cache
void makePinOfLongPieces()
King8Info king8Info(Player pl) const
PieceMask last_add_effect
CArray< PieceMask, 2 > pin
CArray2d< long_attack_t, 40, 8 > long_attack_cache
PieceVector pin_by_opposing_sliders