16 for (
int x=1; x<=9; ++x) {
17 for (
int y=1; y<=9; ++y) {
18 const Square position(x,y);
43 std::pair<Ptype,Ptype> pair;
47 int effect9 = classifyEffect9(state, turn, position);
48 cache[cur++] = basic + pair.first;
49 cache[cur++] = basic + AttackBase + pair.second;
50 cache[cur++] = basic + EffectBase + effect9;
57 cache[cur++] = basic + AttackBase +
PTYPE_EDGE;
59 assert(basic + EffectBase + effect9 < PatternCacheSize);
60 int op_king_distance = abs(kings[
alt(turn)].x()-position.
x())
61 + abs(kings[
alt(turn)].y()-position.
y());
62 if (op_king_distance == 0)
66 if (op_king_distance < OpKingSize)
67 cache[cur++] = basic + OpKingBase + op_king_distance;
68 int my_king_distance = abs(kings[turn].x()-position.
x())
69 + abs(kings[turn].y()-position.
y());
70 if (my_king_distance == 0)
74 if (my_king_distance < MyKingSize)
75 cache[cur++] = basic + MyKingBase + my_king_distance;
78 cache[cur++] = basic + PromotionBase;
80 cache[cur++] = basic + PromotionBase + 1;
84 cache[cur++] = basic + PinOpenBase + (target.
owner() == turn);
86 cache[cur++] = basic + PinOpenBase + 2 + (target.
owner() ==
alt(turn));
90 cache[cur++] = basic + LastToBase;
91 for (
int i=1; i<4; ++i) {
95 cache[cur++] = basic + LastToBase + i;
102 cache[cur++] = basic + LastEffectChangedBase;
105 cache[cur++] = basic + LastEffectChangedBase + ptype_index;
117 i<PtypeTraits<LANCE>::indexLimit; ++i) {
122 makeLongAttackOne(info, p, d);
125 i<PtypeTraits<BISHOP>::indexLimit; ++i) {
129 makeLongAttackOne(info, p,
UL);
130 makeLongAttackOne(info, p,
UR);
131 makeLongAttackOne(info, p,
DL);
132 makeLongAttackOne(info, p,
DR);
135 i<PtypeTraits<ROOK>::indexLimit; ++i) {
139 makeLongAttackOne(info, p,
L);
140 makeLongAttackOne(info, p,
R);
141 makeLongAttackOne(info, p,
U);
142 makeLongAttackOne(info, p,
D);
157 Square attack_to2 = attack_to;
174 attacked =
alt(attacked);
175 int index = (longAttackIndex(attacking)*
PTYPEO_SIZE
195 if (threat_at == attack_to
198 piece.
square(), attack_to)))