6 #include "osl/move_generator/escape.h"
10 #include "osl/move_classifier/check.h"
12 #include "osl/move_generator/addEffect.h"
18 #include "osl/move_generator/captureEffectToAroundKing8.h"
19 #include "osl/move_generator/addEffect8Defense.h"
37 GetAllDefenseMoves::GetAllDefenseMoves(
bool verbose)
38 : NtesukiDefenseMoveGenerator(verbose) {}
39 GetAllDefenseMoves::~GetAllDefenseMoves() {}
42 generate(
const NumEffectState& state,
43 NtesukiMoveList&
moves,
44 const Square& last_to)
46 assert (state.turn() == P);
47 MoveVector move_candidates;
49 moves = NtesukiMoveList(state, move_candidates);
51 template void GetAllDefenseMoves::generate<BLACK>(
const NumEffectState& state,
52 NtesukiMoveList&
moves,
53 const Square& last_to);
54 template void GetAllDefenseMoves::generate<WHITE>(
const NumEffectState& state,
55 NtesukiMoveList&
moves,
56 const Square& last_to);
73 GetDefenseMoves::GetDefenseMoves(
bool verbose)
74 : NtesukiDefenseMoveGenerator(verbose) {}
75 GetDefenseMoves::~GetDefenseMoves(){}
78 generate(
const NumEffectState& state,
79 NtesukiMoveList& moves,
80 const Square& last_to)
82 MoveVector move_candidates;
84 const Square pos = state.template kingSquare<P>();
85 const bool check = state.hasEffectAt(PlayerTraits<P>::opponent, pos);
90 moves = NtesukiMoveList(state, move_candidates);
94 typedef move_action::Store action_t;
95 assert (state.turn() == P);
97 move_action::Store store_candidates(move_candidates);
100 generate(static_cast<const SimpleState &>(state),
103 generate(static_cast<const SimpleState &>(state),
108 generate(state.turn(), state, last_to, store_candidates);
110 MoveVector move_safe;
111 using namespace osl::move_classifier;
112 for (
unsigned int i = 0; i < move_candidates.size(); ++i)
114 const Move m = move_candidates[i];
118 move_safe.push_back(m);
122 move_action::Store store_safe(move_safe);
127 generate(static_cast<const SimpleState &>(state),
130 moves = NtesukiMoveList(state, move_safe);
132 template void GetDefenseMoves::generate<BLACK>(
const NumEffectState& state,
133 NtesukiMoveList&
moves,
134 const Square& last_to);
135 template void GetDefenseMoves::generate<WHITE>(
const NumEffectState& state,
136 NtesukiMoveList&
moves,
137 const Square& last_to);