コード例 #1
0
int eval( int alpha, int beta) {
   int opening, endgame;
   int phase;
   int eval;
   material_info_t mat_info[1];
   
   opening = 0;
   endgame = 0;

   // material

   material_get_info(mat_info);

   opening += mat_info->opening;
   endgame += mat_info->endgame;

   // PST

   opening += Opening;
   endgame += Endgame;

   phase = mat_info->phase;
   eval = ((opening * (256 - phase)) + (endgame * phase)) / 256;

   if (COLOUR_IS_BLACK(Turn)) eval = -eval;
   return eval;

}
コード例 #2
0
ファイル: recog.cpp プロジェクト: grefen/CGChess
bool recog_draw( const board_t *board, int ThreadId )
{
	
	material_info_t mat_info[1];

    ASSERT(board != NULL);

    if( board->number[RedRook] + board->number[RedKnight] + board->number[RedCannon] > 1 )
        return false;
	if(board->number[BlackRook] + board->number[BlackKnight] + board->number[BlackCannon] > 1)
		return false;

	if(board->number[RedPawn] > 2 || board->number[BlackPawn] > 2)
		return false;

    // material
     material_get_info(mat_info, board, ThreadId);

	 if(mat_info->recog == MAT_KK)
		 return true;
	 else if(mat_info->recog == MAT_KABKAB)
		 return true;
	 else if(mat_info->recog == MAT_KPKAB || mat_info->recog == MAT_KABKP)
		 return true;
	 else if(mat_info->recog == MAT_KABKR || mat_info->recog == MAT_KRKAB)
		 return true;
	 else if(mat_info->recog == MAT_KNKN)
		 return true;
	 else if(mat_info->recog == MAT_KCKC)
		 return true;
	 else if(mat_info->recog == MAT_KPKP)
		 return true;
	 else if(mat_info->recog == MAT_KRKR)
	 {
        return draw_krkr(board);
	 }

	
	return false;
}
コード例 #3
0
ファイル: recog.cpp プロジェクト: m00natic/neuroGrape
bool recog_draw(const board_t * board, int ThreadId) {

   material_info_t mat_info[1];

   ASSERT(board!=NULL);

   // material

   if (board->piece_nb > 4) return false;

   material_get_info(mat_info,board,ThreadId);

   if ((mat_info->flags & DrawNodeFlag) == 0) return false;

   // recognisers

   if (false) {

   } else if (mat_info->recog == MAT_KK) {

      // KK

      return true;

   } else if (mat_info->recog == MAT_KBK) {

      // KBK (white)

      return true;

   } else if (mat_info->recog == MAT_KKB) {

      // KBK (black)

      return true;

   } else if (mat_info->recog == MAT_KNK) {

      // KNK (white)

      return true;

   } else if (mat_info->recog == MAT_KKN) {

      // KNK (black)

      return true;

   } else if (mat_info->recog == MAT_KPK) {

      // KPK (white)

      int me, opp;
      int wp, wk, bk;

      me = White;
      opp = COLOUR_OPP(me);

      wp = board->pawn[me][0];
      wk = KING_POS(board,me);
      bk = KING_POS(board,opp);

      if (SQUARE_FILE(wp) >= FileE) {
         wp = SQUARE_FILE_MIRROR(wp);
         wk = SQUARE_FILE_MIRROR(wk);
         bk = SQUARE_FILE_MIRROR(bk);
      }

      if (kpk_draw(wp,wk,bk,board->turn)) {
         return true;
      }

   } else if (mat_info->recog == MAT_KKP) {

      // KPK (black)

      int me, opp;
      int wp, wk, bk;

      me = Black;
      opp = COLOUR_OPP(me);

      wp = SQUARE_RANK_MIRROR(board->pawn[me][0]);
      wk = SQUARE_RANK_MIRROR(KING_POS(board,me));
      bk = SQUARE_RANK_MIRROR(KING_POS(board,opp));

      if (SQUARE_FILE(wp) >= FileE) {
         wp = SQUARE_FILE_MIRROR(wp);
         wk = SQUARE_FILE_MIRROR(wk);
         bk = SQUARE_FILE_MIRROR(bk);
      }

      if (kpk_draw(wp,wk,bk,COLOUR_OPP(board->turn))) {
         return true;
      }

   } else if (mat_info->recog == MAT_KBKB) {

      // KBKB

      int wb, bb;

      wb = board->piece[White][1];
      bb = board->piece[Black][1];

      if (SQUARE_COLOUR(wb) == SQUARE_COLOUR(bb)) { // bishops on same colour
         return true;
      }

   } else if (mat_info->recog == MAT_KBPK) {

      // KBPK (white)

      int me, opp;
      int wp, wb, bk;

      me = White;
      opp = COLOUR_OPP(me);

      wp = board->pawn[me][0];
      wb = board->piece[me][1];
      bk = KING_POS(board,opp);

      if (SQUARE_FILE(wp) >= FileE) {
         wp = SQUARE_FILE_MIRROR(wp);
         wb = SQUARE_FILE_MIRROR(wb);
         bk = SQUARE_FILE_MIRROR(bk);
      }

      if (kbpk_draw(wp,wb,bk)) return true;

   } else if (mat_info->recog == MAT_KKBP) {

      // KBPK (black)

      int me, opp;
      int wp, wb, bk;

      me = Black;
      opp = COLOUR_OPP(me);

      wp = SQUARE_RANK_MIRROR(board->pawn[me][0]);
      wb = SQUARE_RANK_MIRROR(board->piece[me][1]);
      bk = SQUARE_RANK_MIRROR(KING_POS(board,opp));

      if (SQUARE_FILE(wp) >= FileE) {
         wp = SQUARE_FILE_MIRROR(wp);
         wb = SQUARE_FILE_MIRROR(wb);
         bk = SQUARE_FILE_MIRROR(bk);
      }

      if (kbpk_draw(wp,wb,bk)) return true;

   } else {

      ASSERT(false);
   }

   return false;
}