addEffect8Defense.h
Go to the documentation of this file.
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/addEffectWithEffect.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                              Square p,
00023                              move_action::Store& action)
00024       {
00025         if (!p.isOnBoard()) return;
00026         GenerateAddEffectWithEffect::generate<false>(P, state, p, action);
00027       }
00028 
00029       static void generate(const NumEffectState& state, MoveVector& moves)
00030       {
00031         const Square king =  state.template kingSquare<P>();
00032         const Square center = Centering3x3::adjustCenter(king);
00033         {
00034         move_action::Store action(moves);
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         }
00061         moves.unique();
00062       }
00063     };
00064   }
00065 } // namespace osl
00066 
00067 #endif /* _GENERATE_ADD_EFFECT8_DEFENSE_H */
00068 // ;;; Local Variables:
00069 // ;;; mode:c++
00070 // ;;; c-basic-offset:2
00071 // ;;; End:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines