00001 #ifndef _NUM_SIMPLE_EFFECT_TCC
00002 #define _NUM_SIMPLE_EFFECT_TCC
00003
00004 #include "osl/effect/numSimpleEffect.h"
00005 #include "osl/effect_util/pin.h"
00006 #include "osl/checkmate/king8Info.h"
00007 #include "osl/pieceTable.h"
00008 #include "osl/record/csa.h"
00009 #include <iostream>
00010
00011 template<osl::effect::NumBitmapEffect::Op OP,bool UC>
00012 void osl::effect::
00013 NumSimpleEffectTable::doEffect(const SimpleState& state,PtypeO ptypeo,Position pos,int num)
00014 {
00015 switch(ptypeo){
00016 case NEW_PTYPEO(WHITE,PAWN): doEffectBy<WHITE,PAWN,OP,UC>(state,pos,num); break;
00017 case NEW_PTYPEO(WHITE,LANCE): doEffectBy<WHITE,LANCE,OP,UC>(state,pos,num); break;
00018 case NEW_PTYPEO(WHITE,KNIGHT): doEffectBy<WHITE,KNIGHT,OP,UC>(state,pos,num); break;
00019 case NEW_PTYPEO(WHITE,SILVER): doEffectBy<WHITE,SILVER,OP,UC>(state,pos,num); break;
00020 case NEW_PTYPEO(WHITE,PPAWN):
00021 case NEW_PTYPEO(WHITE,PLANCE):
00022 case NEW_PTYPEO(WHITE,PKNIGHT):
00023 case NEW_PTYPEO(WHITE,PSILVER):
00024 case NEW_PTYPEO(WHITE,GOLD): doEffectBy<WHITE,GOLD,OP,UC>(state,pos,num); break;
00025 case NEW_PTYPEO(WHITE,BISHOP): doEffectBy<WHITE,BISHOP,OP,UC>(state,pos,num); break;
00026 case NEW_PTYPEO(WHITE,PBISHOP): doEffectBy<WHITE,PBISHOP,OP,UC>(state,pos,num); break;
00027 case NEW_PTYPEO(WHITE,ROOK): doEffectBy<WHITE,ROOK,OP,UC>(state,pos,num); break;
00028 case NEW_PTYPEO(WHITE,PROOK): doEffectBy<WHITE,PROOK,OP,UC>(state,pos,num); break;
00029 case NEW_PTYPEO(WHITE,KING): doEffectBy<WHITE,KING,OP,UC>(state,pos,num); break;
00030 case NEW_PTYPEO(BLACK,PAWN): doEffectBy<BLACK,PAWN,OP,UC>(state,pos,num); break;
00031 case NEW_PTYPEO(BLACK,LANCE): doEffectBy<BLACK,LANCE,OP,UC>(state,pos,num); break;
00032 case NEW_PTYPEO(BLACK,KNIGHT): doEffectBy<BLACK,KNIGHT,OP,UC>(state,pos,num); break;
00033 case NEW_PTYPEO(BLACK,SILVER): doEffectBy<BLACK,SILVER,OP,UC>(state,pos,num); break;
00034 case NEW_PTYPEO(BLACK,PPAWN):
00035 case NEW_PTYPEO(BLACK,PLANCE):
00036 case NEW_PTYPEO(BLACK,PKNIGHT):
00037 case NEW_PTYPEO(BLACK,PSILVER):
00038 case NEW_PTYPEO(BLACK,GOLD): doEffectBy<BLACK,GOLD,OP,UC>(state,pos,num); break;
00039 case NEW_PTYPEO(BLACK,BISHOP): doEffectBy<BLACK,BISHOP,OP,UC>(state,pos,num); break;
00040 case NEW_PTYPEO(BLACK,PBISHOP): doEffectBy<BLACK,PBISHOP,OP,UC>(state,pos,num); break;
00041 case NEW_PTYPEO(BLACK,ROOK): doEffectBy<BLACK,ROOK,OP,UC>(state,pos,num); break;
00042 case NEW_PTYPEO(BLACK,PROOK): doEffectBy<BLACK,PROOK,OP,UC>(state,pos,num); break;
00043 case NEW_PTYPEO(BLACK,KING): doEffectBy<BLACK,KING,OP,UC>(state,pos,num); break;
00044 default: assert(0);
00045 }
00046 return;
00047 }
00048
00049 template<osl::Player P, osl::Ptype T, osl::effect::NumBitmapEffect::Op OP,bool UC>
00050 void osl::effect::
00051 NumSimpleEffectTable::doEffectBy(const SimpleState& state,Position pos,int num)
00052 {
00053 if(UC){
00054 if(T==LANCE || T==BISHOP || T==PBISHOP || T==ROOK || T==PROOK)
00055 setChangedPieces(NumBitmapEffect::makeLongEffect<P>(num));
00056 else
00057 setChangedPieces(NumBitmapEffect::makeEffect<P>(num));
00058 }
00059 doEffectShort<P,T,UL,OP,UC>(state,pos,num);
00060 doEffectShort<P,T,U,OP,UC>(state,pos,num);
00061 doEffectShort<P,T,UR,OP,UC>(state,pos,num);
00062 doEffectShort<P,T,L,OP,UC>(state,pos,num);
00063 doEffectShort<P,T,R,OP,UC>(state,pos,num);
00064 doEffectShort<P,T,DL,OP,UC>(state,pos,num);
00065 doEffectShort<P,T,D,OP,UC>(state,pos,num);
00066 doEffectShort<P,T,DR,OP,UC>(state,pos,num);
00067 doEffectShort<P,T,UUL,OP,UC>(state,pos,num);
00068 doEffectShort<P,T,UUR,OP,UC>(state,pos,num);
00069 doEffectLong<P,T,LONG_UL,OP,UC>(state,pos,num);
00070 doEffectLong<P,T,LONG_U,OP,UC>(state,pos,num);
00071 doEffectLong<P,T,LONG_UR,OP,UC>(state,pos,num);
00072 doEffectLong<P,T,LONG_L,OP,UC>(state,pos,num);
00073 doEffectLong<P,T,LONG_R,OP,UC>(state,pos,num);
00074 doEffectLong<P,T,LONG_DL,OP,UC>(state,pos,num);
00075 doEffectLong<P,T,LONG_D,OP,UC>(state,pos,num);
00076 doEffectLong<P,T,LONG_DR,OP,UC>(state,pos,num);
00077 }
00078
00079 #endif
00080
00081
00082
00083