00001 /* legalMoves.cc 00002 */ 00003 #include "osl/move_generator/legalMoves.h" 00004 #include "osl/move_classifier/moveAdaptor.h" 00005 #include "osl/move_classifier/pawnDropCheckmate.h" 00006 #include "osl/move_classifier/safeMove.h" 00007 #include "osl/move_generator/allMoves.h" 00008 #include "osl/move_generator/escape_.h" 00009 #include "osl/container/moveVector.h" 00010 #include "osl/effect_util/effectUtil.h" 00011 00012 void osl::move_generator:: 00013 LegalMoves::generate(const NumEffectState& state, MoveVector& moves) 00014 { 00015 if (EffectUtil::isKingInCheck(state.getTurn(), state)) 00016 { 00017 // ꤬äƤɤΤߤ 00018 GenerateEscapeKing::generate(state, moves); 00019 } 00020 else 00021 { 00022 // ǤʤƤμ 00023 MoveVector all_moves; 00024 GenerateAllMoves::generate(state.getTurn(), state, all_moves); 00025 // λؼϡ̤ȴäꡤͤβǽΤ 00026 // ǧɬ 00027 using namespace osl::move_classifier; 00028 for (unsigned int i=0; i<all_moves.size(); ++i) 00029 { 00030 const Move m = all_moves[i]; 00031 if (m.isDrop() 00032 || PlayerMoveAdaptor<SafeMove>::isMember(state, m)) 00033 { 00034 if (! PlayerMoveAdaptor<PawnDropCheckmate>::isMember(state, m)) 00035 { 00036 moves.push_back(m); 00037 } 00038 } 00039 } 00040 } 00041 } 00042