00001 #ifndef _GENERATE_ADD_EFFECT8_DEFENSE_H
00002 #define _GENERATE_ADD_EFFECT8_DEFENSE_H
00003 #include "osl/move_generator/pieceOnBoard.h"
00004 #include "osl/move_generator/addEffect_.h"
00005 #include "osl/move_action/store.h"
00006 #include "osl/centering3x3.h"
00007 #include "osl/state/numEffectState.h"
00008
00009 namespace osl
00010 {
00011 namespace move_generator
00012 {
00018 template <Player P>
00019 struct AddEffect8Defense
00020 {
00021 static void generateTo(const NumEffectState& state,
00022 Position p,
00023 move_action::Store action)
00024 {
00025 if (!p.isOnBoard()) return;
00026 GenerateAddEffect<false>::generate<NumEffectState>(P, state, p, action);
00027 }
00028
00029 static void generate(const NumEffectState& state, move_action::Store& action)
00030 {
00031
00032 const Position king = state.template getKingPosition<P>();
00033 const Position center = Centering3x3::adjustCenter(king);
00034
00035 generateTo(state, center, action);
00036 generateTo(state,
00037 center + Board_Table.getOffsetForBlack(UL),
00038 action);
00039 generateTo(state,
00040 center + Board_Table.getOffsetForBlack(U),
00041 action);
00042 generateTo(state,
00043 center + Board_Table.getOffsetForBlack(UR),
00044 action);
00045 generateTo(state,
00046 center + Board_Table.getOffsetForBlack(L),
00047 action);
00048 generateTo(state,
00049 center + Board_Table.getOffsetForBlack(R),
00050 action);
00051 generateTo(state,
00052 center + Board_Table.getOffsetForBlack(DL),
00053 action);
00054 generateTo(state,
00055 center + Board_Table.getOffsetForBlack(D),
00056 action);
00057 generateTo(state,
00058 center + Board_Table.getOffsetForBlack(DR),
00059 action);
00060 action.moves->unique();
00061 }
00062 };
00063 }
00064 }
00065
00066 #endif
00067
00068
00069
00070