00001 
00002 
00003 #include "osl/effect_util/pin.h"
00004 
00005 osl::PieceMask osl::effect_util::
00006 Pin::makeNaive(const SimpleState& state, Position target, 
00007                Player defense)
00008 {
00009   assert(target.isOnBoard());
00010   PieceMask result;
00011   findDirection<UL>(state, target, defense, result);
00012   findDirection<U>(state, target, defense, result);
00013   findDirection<UR>(state, target, defense, result);
00014   findDirection<L>(state, target, defense, result);
00015   findDirection<R>(state, target, defense, result);
00016   findDirection<DL>(state, target, defense, result);
00017   findDirection<D>(state, target, defense, result);
00018   findDirection<DR>(state, target, defense, result);
00019   return result;
00020 }
00021 
00022 osl::PieceMask osl::effect_util::
00023 Pin::makeByPiece(const NumEffectState& state, Position target, 
00024                  Player defense)
00025 {
00026   assert(target.isOnBoard());
00027   const Player attack = alt(defense);
00028   PieceMask result;
00029   
00030   findDirection<U>(state, target, defense, result);
00031   
00032   findPtype<ROOK>(state, target, attack, defense, result);
00033   findPtype<BISHOP>(state, target, attack, defense, result);
00034   return result;
00035 }
00036 
00037 osl::PieceMask osl::effect_util::
00038 Pin::makeByPieceKing(const NumEffectState& state, Position target, 
00039                      Player defense)
00040 {
00041   assert(target.isOnBoard());
00042   const Player attack = alt(defense);
00043   PieceMask result;
00044   
00045   if(defense==BLACK){
00046     findLance<BLACK>(state, target, result);
00047   }
00048   else{
00049     findLance<WHITE>(state, target, result);
00050   }
00051   
00052   findPtype<ROOK>(state, target, attack, defense, result);
00053   findPtype<BISHOP>(state, target, attack, defense, result);
00054   return result;
00055 }
00056 
00057 
00058 
00059 
00060 
00061