19 std::ostringstream os;
21 << (same ?
"=" :
"!") << (promotable ?
"p" :
"-");
26 std::ostringstream os;
28 << (same ?
"=" :
"!");
34 :
Feature(name(d, s)+
"-"+t.name()), direction(d), self(s),
target(t)
44 assert(! diff.
zero());
48 const Piece p = state.pieceAt(cur);
50 return std::make_pair(p, cur);
52 assert(cur.isOnBoard());
54 return std::make_pair(p, cur);
55 return std::make_pair(state.pieceOnBoard(cur), cur);
62 return nextPieceOrEnd(state, start, diff);
69 if (p.second == move.
from())
70 p = nextPieceOrEnd(state, p.second, move.
player(), direction);
76 std::ostringstream os;
84 :
Feature(name(d, s)+
"--"+t2.name()), direction(d), self(s), target2(t2)
92 std::ostringstream os;
100 self(s), attack(a),
target(t)
109 attack = state.findAttackAt<
LANCE>(
alt(state.turn()), move.
to());
114 }
else if (ap ==
BISHOP) {
115 attack = state.findAttackAt<
BISHOP>(
alt(state.turn()), move.
to());
120 }
else if (ap ==
ROOK) {
121 attack = state.findAttackAt<
ROOK>(
alt(state.turn()), move.
to());