2 #ifndef PROGRESS_EXPERIMENTAL_NEW_PROGRESS_H
3 #define PROGRESS_EXPERIMENTAL_NEW_PROGRESS_H
65 template <Player Owner>
68 template <Player Attack>
73 static void progressOne(
const NumEffectState &state,
74 int &attack,
int &defense);
84 const int x_diff = std::abs(king.
x() - target.
x());
85 const int y_diff = (P ==
BLACK ? king.
y() - target.
y() :
86 target.
y() - king.
y()) + 2;
87 return x_diff * 5 + y_diff;
92 int target_x = (king.
x() > 5 ? 10 - king.
x() : king.
x());
93 int x_diff = king.
x() - target.
x();
94 if (P ==
BLACK && king.
x() >= 6)
98 else if (P ==
WHITE && king.
x() >= 5)
102 const int y_diff = (P ==
BLACK ? king.
y() - target.
y() :
103 target.
y() - king.
y()) + 2;
104 return ((x_diff + 4) * 5 + y_diff) * 5 + target_x - 1;
109 const int x_diff = std::abs(king.
x() - target.
x());
110 const int y_diff = (P ==
BLACK ? king.
y() - target.
y() :
111 target.
y() - king.
y()) + 2;
112 const int king_y = (P ==
BLACK ? king.
y() : 10 - king.
y());
113 return (x_diff * 5 + y_diff) * 9 + king_y - 1;
118 assert(0 <= promoted && promoted <= 4);
119 return promoted + 5 * (silver + 5 * (gold + 5 * (bishop + 3 *
rook)));
124 assert(0 <= promoted && promoted <= 4);
126 5 * (promoted + 5 * (silver + 5 * (gold + 5 * (bishop + 3 *
rook))));
131 assert(0 <= promoted && promoted <= 4);
133 9 * (promoted + 5 * (silver + 5 * (gold + 5 * (bishop + 3 *
rook))));
139 const int x_diff = std::abs(king.
x() - target.
x());
140 const int y_diff = (P ==
BLACK ? king.
y() - target.
y() :
141 target.
y() - king.
y()) + 2;
142 return x_diff * 5 + y_diff +
std::min(8, count) * 25;
149 const int king_y = (P ==
BLACK ? king.
y() : 10 - king.
y());
150 const int x_diff = std::abs(king.
x() - target.
x());
151 const int y_diff = (P ==
BLACK ? king.
y() - target.
y() :
152 target.
y() - king.
y()) + 2;
153 return king_y - 1 + 9 * (x_diff * 5 + y_diff +
std::min(8, count) * 25);
159 const int king_x = (king.
x() > 5 ? 10 - king.
x() : king.
x());
160 int x_diff = king.
x() - target.
x();
161 if ((P ==
BLACK && (king.
x() > 5)) ||
162 (P ==
WHITE && (king.
x() >= 5)))
164 const int y_diff = (P ==
BLACK ? king.
y() - target.
y() :
165 target.
y() - king.
y()) + 2;
166 return king_x - 1 + 5 * (x_diff + 4 +
167 9 * (y_diff + 5 *
std::min(8, count)));
173 const int x = std::abs(pos.
x() - king.
x());
174 const int y = (king.
y() - pos.
y()) *
183 return indexRelative<BLACK>(king, piece.
ptype(),
188 return indexRelative<WHITE>(king, piece.
ptype(),
214 void updateSub(
const NumEffectState &new_state,
Move last_move);
215 void update(
const NumEffectState &new_state,
Move last_move){
216 if(new_state.turn()==
BLACK)
217 updateSub<WHITE>(new_state,last_move);
219 updateSub<BLACK>(new_state,last_move);
277 static bool setUp(
const char *filename);
282 bool operator==(
const NewProgressData& l,
const NewProgressData& r);
288 using ml::NewProgress;
290 using progress::NewProgress;
293 #endif // PROGRESS_EXPERIMENTAL_NEW_PROGRESS_H