7struct osl::eval::See::FindEffectMore
14 template<Player P,Ptype Type>
22FindEffectMore::store(Piece p)
24 direct->push_back(std::make_pair(p.ptypeO(), p.square()));
28template <osl::Player P>
35 store_t op_pieces_store(&op_pieces, effect_to);
37 if (op_pieces.
empty())
42 store_t my_pieces_store(&my_pieces, effect_to);
48 FindEffectMore action = { &my_pieces, &my_pieces_more, effect_to, &state };
54 if (op_pieces.
size() <= my_pieces.
size())
56 my_pieces_more.
clear();
58 for (
size_t i=0; i<op_pieces.
size(); ++i) {
64template <osl::Player P>
74 store_t op_pieces_store(&op_pieces, to);
76 if (op_pieces.
empty())
85 store_t my_pieces_store(&my_pieces, to);
94 FindEffectMore action = { &my_pieces, &my_pieces_more, to, &state };
100 if (op_pieces.
size() < my_pieces.
size())
102 my_pieces_more.
clear();
104 for (
size_t i=0; i<op_pieces.
size(); ++i) {
110template <osl::Player P>
126 bool op_deleted=
false, my_deleted=
false;
127 for (i=0;i<op_pieces.
size();i++,c++)
131 Square from=op_pieces[i].second;
135 assert(p.
owner()==Opponent);
139 assert(attacker.
owner()==P);
141 if(attacker_sq != move_from){
143 for(;j<my_pieces.
size();j++)
if(my_pieces[j].second==attacker_sq)
break;
145 if(j==my_pieces.
size() || op_pieces.
size()<=j+1 ){
146 for(
size_t k=i;k<op_pieces.
size()-1;k++)
147 op_pieces[k]=op_pieces[k+1];
152 std::pair<PtypeO,Square> v=op_pieces[i];
153 for(
size_t k=i;k<=j;k++)
154 op_pieces[k]=op_pieces[k+1];
168 ptypeO = op_pieces[i].first;
171 || op_pieces[i].second.canPromote<Opponent>());
181 if (i>=my_pieces.
size()){
185 Square from=my_pieces[i].second;
188 assert(p.
owner()==P);
193 assert(attacker.
owner()==Opponent);
196 for(;j<op_pieces.
size();j++)
if(op_pieces[j].second==attacker_sq)
break;
198 if(j==op_pieces.
size() || my_pieces.
size()<=j ){
199 for(
size_t k=i;k<my_pieces.
size()-1;k++)
200 my_pieces[k]=my_pieces[k+1];
205 std::pair<PtypeO,Square> v=my_pieces[i];
206 for(
size_t k=i;k<j;k++)
207 my_pieces[k]=my_pieces[k+1];
217 ptypeO=my_pieces[i].first;
220 || my_pieces[i].second.canPromote<P>());
228 for (
int j=i-1;j>=0;j--)
236template <osl::Player P>
256 if (op_pieces.
empty())
258 return val +
computeValue<P>(state, move, my_pieces, op_pieces, my_pin, op_pin, table);
291 if (candidate.
owner() != attack)
void push_back(const T &e)
PtypeO ptypeO() const
移動後のPtype, i.e., 成る手だった場合成った後
const Square from() const
bool pinnedCanMoveTo(Piece p, Square to) const
pinされた駒pがtoに動けるか?
void forEachEffect(const PieceMask &pieces, Square sq, Action &action) const
int countEffect(Player player, Square target) const
利きの数を数える.
bool isAlmostValidMove(Move move) const
合法手かどうかを簡単に検査する.局面に依存するチェックのみ. ルール上指せない手である可能性がある場合は,isValidMove を用いる.
Piece pinAttacker(Piece pinned) const
Pのpinされた駒から,そのpinの原因となっている長い利きを持つ駒を得る.
const Square square() const
void sort()
駒の価値の小さい順に並び替える
Piece nextPiece(Square cur, Offset diff) const
diff方向にあるPiece を求める.
const Piece pieceOnBoard(Square sq) const
const Piece pieceAt(Square sq) const
bool isPieceStand() const
int captureValue(PtypeO ptypeO) const
ownerのptypeOがcaptureされた時の評価値の増減
int promoteValue(PtypeO ptypeO) const
ptypeOにpromoteした時の評価値の増減
const PtypeEvalTable Ptype_Eval_Table
const PtypeTable Ptype_Table
bool canPromote(Ptype ptype)
ptypeがpromote可能な型かどうかのチェック promote済みの場合はfalseを返す
const BoardTable Board_Table
Offset32Base< 8, 9 > Offset32
PtypeO
Player + Ptype [-15, 15] PtypeO の O は Owner の O.
constexpr Player alt(Player player)
PtypeO newPtypeO(Player player, Ptype ptype)
Ptype promote(Ptype ptype)
promote可能なptypeに対して,promote後の型を返す promote不可のptypeを与えてはいけない.
void doAction(Piece p, Square)
PtypeOSquareVector * direct
void doActionPtype(Piece p)
const NumEffectState * state
PtypeOSquareVector * more
static void findEffectPiecesAfterMove(const NumEffectState &state, Move move, PtypeOSquareVector &my_pieces, PtypeOSquareVector &op_pieces)
static int seeInternal(const NumEffectState &state, Move move, const PieceMask &my_pin, const PieceMask &op_pin, const PtypeEvalTable &table)
static void findEffectPieces(const NumEffectState &state, Square effect_to, PtypeOSquareVector &my_pieces, PtypeOSquareVector &op_pieces)
static int see(const NumEffectState &state, Move move, const PieceMask &my_pin=PieceMask(), const PieceMask &op_pin=PieceMask(), const PtypeEvalTable *table=0)
static int computeValue(const NumEffectState &state, Move move, PtypeOSquareVector &my_pieces, PtypeOSquareVector &op_pieces, const PieceMask &my_pin, const PieceMask &op_pin, const PtypeEvalTable &table)
PtypeOSquareVector をもとに取り返し値を計算する
static void findAdditionalPieces(const NumEffectState &state, Player attack, Square target, Square direct_attack_from, PtypeOSquareVector &out)