00001 #include "osl/eval/pieceEval.h" 00002 #include "osl/eval/pieceEval.tcc" 00003 #include "osl/eval/evalTraits.h" 00004 #include "osl/state/numEffectState.h" 00005 #include "osl/pieceTable.h" 00006 #include <iostream> 00007 namespace osl 00008 { 00009 // explicit template instantiation 00010 template int PieceEval::computeDiffAfterMove<NumEffectState, BLACK> 00011 (const NumEffectState&, Move); 00012 template int PieceEval::computeDiffAfterMove<NumEffectState, WHITE> 00013 (const NumEffectState&, Move); 00014 } 00015 00016 osl::PieceEval::PieceEval(const SimpleState& state) 00017 { 00018 int ret=0; 00019 for (int num=0;num<Piece::SIZE;num++) { 00020 if (state.standMask(BLACK).test(num)) 00021 { 00022 ret+=Ptype_Eval_Table.value(newPtypeO(BLACK,Piece_Table.getPtypeOf(num))); 00023 } 00024 else if (state.standMask(WHITE).test(num)) 00025 { 00026 ret+=Ptype_Eval_Table.value(newPtypeO(WHITE,Piece_Table.getPtypeOf(num))); 00027 } 00028 else{ 00029 assert(state.isOnBoard(num)); 00030 Piece p=state.getPieceOf(num); 00031 ret+=Ptype_Eval_Table.value(p.ptypeO()); 00032 } 00033 } 00034 val=ret; 00035 } 00036 00037 osl::eval::PtypeEvalTable::PtypeEvalTable() 00038 { 00039 init(); 00040 } 00041 osl::eval::PtypeEvalTable::~PtypeEvalTable() 00042 { 00043 } 00044 00045 void osl::eval::PtypeEvalTable::init() 00046 { 00047 ptypeO2Val[PTYPE_EMPTY-PTYPEO_MIN]=0; 00048 ptypeO2Val[PTYPE_EDGE-PTYPEO_MIN]=0; 00049 ptypeO2Val[PAWN-PTYPEO_MIN]=PtypeEvalTraits<PAWN>::val; 00050 ptypeO2Val[PPAWN-PTYPEO_MIN]=PtypeEvalTraits<PPAWN>::val; 00051 ptypeO2Val[LANCE-PTYPEO_MIN]=PtypeEvalTraits<LANCE>::val; 00052 ptypeO2Val[PLANCE-PTYPEO_MIN]=PtypeEvalTraits<PLANCE>::val; 00053 ptypeO2Val[KNIGHT-PTYPEO_MIN]=PtypeEvalTraits<KNIGHT>::val; 00054 ptypeO2Val[PKNIGHT-PTYPEO_MIN]=PtypeEvalTraits<PKNIGHT>::val; 00055 ptypeO2Val[SILVER-PTYPEO_MIN]=PtypeEvalTraits<SILVER>::val; 00056 ptypeO2Val[PSILVER-PTYPEO_MIN]=PtypeEvalTraits<PSILVER>::val; 00057 ptypeO2Val[GOLD-PTYPEO_MIN]=PtypeEvalTraits<GOLD>::val; 00058 ptypeO2Val[KING-PTYPEO_MIN]=PtypeEvalTraits<KING>::val; 00059 ptypeO2Val[BISHOP-PTYPEO_MIN]=PtypeEvalTraits<BISHOP>::val; 00060 ptypeO2Val[PBISHOP-PTYPEO_MIN]=PtypeEvalTraits<PBISHOP>::val; 00061 ptypeO2Val[ROOK-PTYPEO_MIN]=PtypeEvalTraits<ROOK>::val; 00062 ptypeO2Val[PROOK-PTYPEO_MIN]=PtypeEvalTraits<PROOK>::val; 00063 for(int i=PTYPE_MIN;i<=PTYPE_MAX;i++) 00064 { 00065 Ptype ptype=static_cast<Ptype>(i); 00066 ptypeO2Val[newPtypeO(WHITE,ptype)-PTYPEO_MIN]= 00067 -ptypeO2Val[newPtypeO(BLACK,ptype)-PTYPEO_MIN]; 00068 } 00069 for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++) 00070 { 00071 PtypeO ptypeO=static_cast<PtypeO>(i); 00072 PtypeO basicPtypeO=unpromote(ptypeO); 00073 // note: value() depends on ptypeO2Val 00074 promoteVal[i-PTYPEO_MIN]=Ptype_Eval_Table.value(ptypeO)- 00075 Ptype_Eval_Table.value(basicPtypeO); 00076 } 00077 // EMPTYcapture 00078 captureVal[0]=0; 00079 for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++) 00080 { 00081 PtypeO ptypeO=static_cast<PtypeO>(i); 00082 // note: value() depends on ptypeO2Val 00083 if(isPiece(ptypeO)) 00084 captureVal[i-PTYPEO_MIN]=Ptype_Eval_Table.value(captured(ptypeO))- 00085 Ptype_Eval_Table.value(ptypeO); 00086 else 00087 captureVal[i-PTYPEO_MIN]=0; 00088 } 00089 } 00090 00091 // ;;; Local Variables: 00092 // ;;; mode:c++ 00093 // ;;; c-basic-offset:2 00094 // ;;; End: