Go to the documentation of this file.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
00010 template int PieceEval::computeDiffAfterMove<BLACK>
00011 (const NumEffectState&, Move);
00012 template int PieceEval::computeDiffAfterMove<WHITE>
00013 (const NumEffectState&, Move);
00014 }
00015
00016 osl::PieceEval::PieceEval(const NumEffectState& 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.pieceOf(num);
00031 ret+=Ptype_Eval_Table.value(p.ptypeO());
00032 }
00033 }
00034 val=ret;
00035 }
00036
00037 osl::eval::PtypeEvalTable::PtypeEvalTable()
00038 {
00039 const CArray<int, PTYPE_SIZE> values = {{
00040 0, 0,
00041 PtypeEvalTraits<PPAWN>::val, PtypeEvalTraits<PLANCE>::val,
00042 PtypeEvalTraits<PKNIGHT>::val, PtypeEvalTraits<PSILVER>::val,
00043 PtypeEvalTraits<PBISHOP>::val, PtypeEvalTraits<PROOK>::val,
00044
00045 PtypeEvalTraits<KING>::val, PtypeEvalTraits<GOLD>::val,
00046
00047 PtypeEvalTraits<PAWN>::val, PtypeEvalTraits<LANCE>::val,
00048 PtypeEvalTraits<KNIGHT>::val, PtypeEvalTraits<SILVER>::val,
00049 PtypeEvalTraits<BISHOP>::val, PtypeEvalTraits<ROOK>::val,
00050 }};
00051 reset(values);
00052 }
00053 osl::eval::PtypeEvalTable::~PtypeEvalTable()
00054 {
00055 }
00056
00057 void osl::eval::PtypeEvalTable::reset(const CArray<int,PTYPE_SIZE>& values)
00058 {
00059 ptypeO2Val.fill(0);
00060 std::copy(values.begin(), values.end(), ptypeO2Val.begin()+16);
00061 for(int i=PTYPE_MIN;i<=PTYPE_MAX;i++)
00062 {
00063 Ptype ptype=static_cast<Ptype>(i);
00064 ptypeO2Val[newPtypeO(WHITE,ptype)-PTYPEO_MIN]=
00065 -ptypeO2Val[newPtypeO(BLACK,ptype)-PTYPEO_MIN];
00066 }
00067 for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++)
00068 {
00069 PtypeO ptypeO=static_cast<PtypeO>(i);
00070 PtypeO basicPtypeO=unpromote(ptypeO);
00071
00072 promoteVal[i-PTYPEO_MIN]=this->value(ptypeO)-this->value(basicPtypeO);
00073 }
00074
00075 captureVal[0]=0;
00076 for(int i=PTYPEO_MIN;i<=PTYPEO_MAX;i++)
00077 {
00078 PtypeO ptypeO=static_cast<PtypeO>(i);
00079
00080 if(isPiece(ptypeO))
00081 captureVal[i-PTYPEO_MIN]=this->value(captured(ptypeO))-
00082 this->value(ptypeO);
00083 else
00084 captureVal[i-PTYPEO_MIN]=0;
00085 }
00086 }
00087
00088
00089
00090
00091
00092