00001 #ifndef _GENERATE_CAPTURE_EFFECT_TO_AROUND_KING8_H
00002 #define _GENERATE_CAPTURE_EFFECT_TO_AROUND_KING8_H
00003 #include "osl/move_generator/pieceOnBoard.h"
00004 #include "osl/move_action/captureFrom.h"
00005 #include "osl/centering3x3.h"
00006 #include "osl/state/numEffectState.h"
00007
00008 namespace osl
00009 {
00010 namespace move_generator
00011 {
00018 template <Player P>
00019 struct CaptureEffectToAroundKing8
00020 {
00021 template <class Action>
00022 static void generateTo(const NumEffectState& state,
00023 Position p,
00024 Action& action)
00025 {
00026 typedef move_action::CaptureFrom<P, NumEffectState, Action>
00027 capture_action;
00028 capture_action capture(state, action);
00029
00030 if (!p.isOnBoard()) return;
00031 assert(p.isOnBoard());
00032
00033 state.template forEachEffect<PlayerTraits<P>::opponent,
00034 capture_action>(p, capture);
00035 }
00036
00037 template <class Action>
00038 static void generate(const NumEffectState& state, Action& action)
00039 {
00040 const Position position_king =
00041 Centering3x3::adjustCenter(state.template getKingPosition<P>());
00042 generateTo(state,
00043 position_king,
00044 action);
00045 generateTo(state,
00046 position_king + Board_Table.getOffsetForBlack(UL),
00047 action);
00048 generateTo(state,
00049 position_king + Board_Table.getOffsetForBlack(U),
00050 action);
00051 generateTo(state,
00052 position_king + Board_Table.getOffsetForBlack(UR),
00053 action);
00054 generateTo(state,
00055 position_king + Board_Table.getOffsetForBlack(L),
00056 action);
00057 generateTo(state,
00058 position_king + Board_Table.getOffsetForBlack(R),
00059 action);
00060 generateTo(state,
00061 position_king + Board_Table.getOffsetForBlack(DL),
00062 action);
00063 generateTo(state,
00064 position_king + Board_Table.getOffsetForBlack(D),
00065 action);
00066 generateTo(state,
00067 position_king + Board_Table.getOffsetForBlack(DR),
00068 action);
00069 action.moves->unique();
00070 }
00071
00072 };
00073 }
00074 }
00075
00076 #endif
00077
00078
00079
00080