亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? eval.c

?? gun C 環(huán)境下編寫的
?? C
?? 第 1 頁 / 共 3 頁
字號:

    	 /* Bishop defended by own pawn */
	 if (MoveArray[ptype[xside]][sq] & board.b[side][pawn])
            s1 += OUTPOSTBISHOP;
      }

      /*  Fianchetto bishop */
      if (side == white)
      {
         if (board.king[side] >= F1 && board.king[side] <= H1 && sq == G2)
	    s1 += FIANCHETTO;
         if (board.king[side] >= A1 && board.king[side] <= C1 && sq == B2)
	    s1 += FIANCHETTO;
      }
      else if (side == black)
      {
         if (board.king[side] >= F8 && board.king[side] <= H8 && sq == G7)
	    s1 += FIANCHETTO;
         if (board.king[side] >= A8 && board.king[side] <= C8 && sq == B7)
	    s1 += FIANCHETTO;
      }

      /* Attack on weak opponent pawns */
      if (BishopAttack(sq) & weaked[xside])
         s1 += ATAKWEAKPAWN;

      s += s1;
   }

   /* Doubled bishops */
   if (n > 1)            
      s += DOUBLEDBISHOPS;

   return (s);

}


int BishopTrapped (short side)
/****************************************************************************
 *
 *  Check for bishops trapped at A2/H2/A7/H7
 *
 ****************************************************************************/
{
   int s = 0;

   /* Don't waste time */
   if (board.b[side][bishop] == NULLBITBOARD)
     return (0); 

   if (side == white)
   {
      if ((board.b[white][bishop] & BitPosArray[A7]) &&
	  (board.b[black][pawn] & BitPosArray[B6]) && SwapOff(MOVE(A7,B6)) < 0)
         s += BISHOPTRAPPED;
      if ((board.b[white][bishop] & BitPosArray[H7]) &&
	  (board.b[black][pawn] & BitPosArray[G6]) && SwapOff(MOVE(H7,G6)) < 0)
         s += BISHOPTRAPPED;
   }
   else
   {
      if ((board.b[black][bishop] & BitPosArray[A2]) &&
	  (board.b[white][pawn] & BitPosArray[B3]) && SwapOff(MOVE(A2,B3)) < 0)
         s += BISHOPTRAPPED;
      if ((board.b[black][bishop] & BitPosArray[H2]) &&
	  (board.b[white][pawn] & BitPosArray[G3]) && SwapOff(MOVE(H2,G3)) < 0)
         s += BISHOPTRAPPED;
   }

   return (s);
}

int ScoreR (short side)
/****************************************************************************
 *
 *  1.  rook on 7th rank and Enemy king on 8th rank or pawns on 7th rank.
 *  2.  rook on open/half-open file.
 *  3.  rook in front/behind passed pawns (pawn >= 5th rank)
 *
 ****************************************************************************/
{
   int s, s1, sq, xside, fyle, EnemyKing;
   BitBoard c;

   if (board.b[side][rook] == NULLBITBOARD)
      return (0);
   s = s1 = 0;
   c = board.b[side][rook];
   xside = side ^ 1;
   EnemyKing = board.king[xside];

   if ( c & pinned )
   {
	s += PINNEDROOK * nbits(c & pinned);
   }

   while (c)
   {
      sq = leadz (c);
      CLEARBIT (c, sq);

      /* Control */
      s1 = CTL(sq,rook,side);

      fyle = ROW(sq);
      if (PHASE < 7)
      {
         if (!(board.b[side][pawn] & FileBit[fyle]))
         {
	    if (fyle == 5 && ROW(board.king[xside])>=E_FILE)
	      s1 += ROOKLIBERATED;
            s1 += ROOKHALFFILE;
            if (!(board.b[xside][pawn] & FileBit[fyle]))
               s1 += ROOKOPENFILE;
         }
      }

      if (phase > 6 && (FileBit[fyle] & passed[white] & brank58[white]))
      {
	 if (nbits (Ray[sq][7] & passed[white]) == 1)
	    s1 += ROOKBEHINDPP;
	 else if (Ray[sq][4] & passed[white])
            s1 += ROOKINFRONTPP;
      }
      if (FileBit[fyle] & passed[black] & brank58[black])
      {
	 if (nbits (Ray[sq][4] & passed[black]) == 1)
	    s1 += ROOKBEHINDPP;
	 else if (Ray[sq][7] & passed[black])
            s1 += ROOKINFRONTPP;
      }

      /* Attack on weak opponent pawns */
      if (RookAttack(sq) & weaked[xside])
         s1 += ATAKWEAKPAWN;

      /* Rook on 7th rank */
      if (RANK (sq) == rank7[side] && (RANK (EnemyKing) == rank8[side] ||
	  board.b[xside][pawn] & RankBit[RANK(sq)]))
         s1 += ROOK7RANK;

      s += s1;
   }

   return (s);
}

int DoubleQR7 (short side)
/***************************************************************************
 *
 *  This code just check to see if there is a QQ or QR or RR combo on the
 *  7th rank.  This is very strong and given quite a big bonus.  This 
 *  routine is called by the lazy section.
 *
 ***************************************************************************/
{
   int xside;

   xside = 1^side;
   if (nbits ((board.b[side][queen]|board.b[side][rook]) & brank7[side]) > 1
      && ((board.b[xside][king] & brank8[side]) || 
	  (board.b[xside][pawn] & brank7[side])))

      return (ROOKS7RANK);
   else
      return (0);
}

int ScoreQ (short side)
/***************************************************************************
 *
 *  1. queen centralization.
 *  2. king tropism.
 *  3. Bonus if opponent king is exposed.
 *
 ***************************************************************************/
{
   int xside;
   int s, s1, sq, EnemyKing;
   BitBoard c;
   
   s = s1 = 0;

   /* Try to keep our queen on the board for attacking purposes. */
   if (board.b[side][queen] == NULLBITBOARD) {
       if (side == computer) {
         s += QUEEN_NOT_PRESENT;
       }
       return(s);
    }                                                                           

   xside = 1 ^ side;
   c = board.b[side][queen];
   EnemyKing = board.king[xside];

   if ( c & pinned )
   {
	s += PINNEDQUEEN * nbits(c & pinned);
   }

   while (c)
   {
      sq = leadz (c);
      CLEARBIT (c, sq);

      /* Control */
      s1 = CTL(sq,queen,side);

      if (distance[sq][EnemyKing] <= 2)
         s1 += QUEENNEARKING;

      /* Attack on weak opponent pawns */
      if (QueenAttack(sq) & weaked[xside])
         s1 += ATAKWEAKPAWN;

      s += s1;
   }

   return (s);
}


static const int KingSq[64] =
{
   24, 24, 24, 16, 16,  0, 32, 32,
   24, 20, 16, 12, 12, 16, 20, 24,
   16, 12,  8,  4,  4,  8, 12, 16,
   12,  8,  4,  0,  0,  4,  8, 12,
   12,  8,  4,  0,  0,  4,  8, 12,
   16, 12,  8,  4,  4,  8, 12, 16,
   24, 20, 16, 12, 12, 16, 20, 24,
   24, 24, 24, 16, 16,  0, 32, 32
};

static const int EndingKing[64] =
{
   0,  6, 12, 18, 18, 12,  6,  0,
   6, 12, 18, 24, 24, 18, 12,  6,
  12, 18, 24, 32, 32, 24, 18, 12,
  18, 24, 32, 48, 48, 32, 24, 18,
  18, 24, 32, 48, 48, 32, 24, 18,
  12, 18, 24, 32, 32, 24, 18, 12,
   6, 12, 18, 24, 24, 18, 12,  6,
   0,  6, 12, 18, 18, 12,  6,  0
};

static const int pawncover[9] = { -60, -30, 0, 5, 30, 30, 30, 30, 30 };
static const int factor[9] = { 7, 8, 8, 7, 6, 5, 4, 2, 0, };

int ScoreK (short side)
/***************************************************************************
 *
 *  1.  king in the corner. ?? SRW 2002-08-02 Unclear if implemented
 *  2.  pawns around king.
 *  3.  king on open file.
 *  4.  Uncastled king.
 *  5.  Open rook file via Ng5 or Bxh7 sac.
 *  6.  No major or minor piece in the king's quadrant.
 *
 ***************************************************************************/
{
   int xside;
   int s, sq, sq1, n, n1, n2, file, fsq, rank;
   BitBoard b, x;

   s = 0;
   xside = 1^side;
   sq = board.king[side];
   file = ROW (sq);
   rank = RANK (sq);
   KingSafety[side] = 0;
   if (!ENDING)
   { 

      s += ((6 - phase) * KingSq[sq] + phase * EndingKing[sq]) / 6;

      /* After castling kingside, reward having all 3 pawns in front but not if
	 there is a threatening pawn. This permits the freeing move F3/F6. */
	 
      if (side == white)
        n = nbits (MoveArray[king][sq] & board.b[side][pawn] & RankBit[rank+1]);
      else
        n = nbits (MoveArray[king][sq] & board.b[side][pawn] & RankBit[rank-1]);
      s += pawncover[n];

      /* Penalize compromised wing pawn formations prior to castle. */
      if (!board.castled[side]) {
        n = -1;
        if (side == white) {
          /* King on original square and unmoved */
	  if (sq == 4 && Mvboard[sq] == 0) {
	    /* Kingside - rook on original square and unmoved. */
	    if ( (board.b[side][rook] & BitPosArray[H1])!=NULLBITBOARD &&
		 Mvboard[H1] == 0)
                   n = nbits (MoveArray[king][G1] & 
			      board.b[side][pawn] & RankBit[rank+1]);
	    /* Queenside */
	    if ( (board.b[side][rook] & BitPosArray[A1])!=NULLBITBOARD &&
		 Mvboard[A1] == 0)
                   n = nbits (MoveArray[king][C1] & 
			      board.b[side][pawn] & RankBit[rank+1]);
          }
   	} else {
	  if (sq == 60 && Mvboard[sq] == 0) {
	    /* Kingside */
	    if ( (board.b[side][rook] & BitPosArray[H8])!=NULLBITBOARD &&
		 Mvboard[H8] == 0)
                   n = nbits (MoveArray[king][G8] & 
			      board.b[side][pawn] & RankBit[rank-1]);
	    /* Queenside */
	    if ( (board.b[side][rook] & BitPosArray[A8])!=NULLBITBOARD &&
		 Mvboard[A8] == 0)
                   n = nbits (MoveArray[king][C8] & 
			      board.b[side][pawn] & RankBit[rank-1]);
          }
	}
        
	/* Penalize breaking the wing pawn formations prior to castle */
	if (n != -1) s += pawncover[n];
      }

      if (side == computer && file >= F_FILE && 
		!(FileBit[G_FILE] & board.b[side][pawn]))
      {
         if (side == white && cboard[F2] == pawn)
            s += GOPEN;
         else if (side == black && cboard[F7] == pawn)
            s += GOPEN;
      }

      /* No friendly pawns on this king file */
      if (!(FileBit[file] & board.b[side][pawn]))
         s += KINGOPENFILE;

      /* No enemy pawns on this king file */
      if (!(FileBit[file] & board.b[xside][pawn]))
         s += KINGOPENFILE1;

      switch (file)
      {
         case A_FILE :
         case E_FILE :
         case F_FILE :
	 case G_FILE : if (!(FileBit[file+1] & board.b[side][pawn]))
		          s += KINGOPENFILE;
		       if (!(FileBit[file+1] & board.b[xside][pawn]))
		          s += KINGOPENFILE1;
	               break;
         case H_FILE :
         case D_FILE :
         case C_FILE :
	 case B_FILE : if (!(FileBit[file-1] & board.b[side][pawn]))
		          s += KINGOPENFILE;
		       if (!(FileBit[file-1] & board.b[xside][pawn]))
		          s += KINGOPENFILE1;
	               break;
	 default :
	               break;
      }

      if (board.castled[side]) {
        if (side == white) {
          if (file > E_FILE) {
            if (!(BitPosArray[F2] & board.b[side][pawn]) ||
                !(BitPosArray[G2] & board.b[side][pawn]) ||
                !(BitPosArray[H2] & board.b[side][pawn]) )
                s += RUPTURE;
          } else if (file < E_FILE) {
            if (!(BitPosArray[A2] & board.b[side][pawn]) ||
                !(BitPosArray[B2] & board.b[side][pawn]) ||
                !(BitPosArray[C2] & board.b[side][pawn]) )
                s += RUPTURE;
          }
        } else {
          if (file > E_FILE) {
            if (!(BitPosArray[F7] & board.b[side][pawn]) ||
                !(BitPosArray[G7] & board.b[side][pawn]) ||
                !(BitPosArray[H7] & board.b[side][pawn]) )
                s += RUPTURE;
          } else if (file < E_FILE) {
            if (!(BitPosArray[A7] & board.b[side][pawn]) ||
                !(BitPosArray[B7] & board.b[side][pawn]) ||
                !(BitPosArray[C7] & board.b[side][pawn]) )
                s += RUPTURE;
	  }
	}
      }
      if (side == computer) {

	/* Stock piece sacrifice on h file */

	if (file >= E_FILE && board.b[xside][queen] && board.b[xside][rook] &&
	    !((board.b[side][pawn]|board.b[xside][pawn]) & FileBit[7]))
         s += HOPEN;
	
	/* King trapping rook */
        if (side == white) {
	  if (file > E_FILE) {
	    if (board.b[side][rook]&mask_kr_trapped_w[H_FILE-file]) {
		s += ROOKTRAPPED;
	    }
	  } else if (file < D_FILE) {
	    if (board.b[side][rook]&mask_qr_trapped_w[file]) {
		s += ROOKTRAPPED;
	    }
	  }
	} else {
	  if (file > E_FILE) {
	    if (board.b[side][rook]&mask_kr_trapped_b[H_FILE-file]) {
		s += ROOKTRAPPED;
	    }
	  } else if (file < D_FILE) {
	    if (board.b[side][rook]&mask_qr_trapped_b[file]) {
		s += ROOKTRAPPED;
	    }
	  }
	}
      }

      /* Don't give fianchetto target for advanced pawns */
      if (file > E_FILE && ROW(board.king[xside]) < D_FILE) {
         if (side == white) fsq = G3; else fsq = G6;
	 if ((BitPosArray[fsq] & board.b[side][pawn]) != NULLBITBOARD)
            if (((BitPosArray[F4]|BitPosArray[H4]|
	         BitPosArray[F5]|BitPosArray[H5])
	      & board.b[xside][pawn]) != NULLBITBOARD) 
	        s += FIANCHETTO_TARGET;	
      }
      if (file < E_FILE && ROW(board.king[xside]) > E_FILE) {
         if (side == white) fsq = B3; else fsq = B6;
	 if ((BitPosArray[fsq] & board.b[side][pawn]) != NULLBITBOARD)
            if (((BitPosArray[A4]|BitPosArray[C4]|
	         BitPosArray[A5]|BitPosArray[C5])
	      & board.b[xside][pawn]) != NULLBITBOARD) 
	        s += FIANCHETTO_TARGET;	
      }

      /* No major/minor piece in king's quadrant */
      /* First identify the quadrant */
      x = boardhalf[side] & boardside[file<=D_FILE];
      /* Now identify the number of non-pawn enemy in quadrant */
      n1 = nbits(x & (board.friends[xside]));
      if (n1 > 0) {
        /* Now identify the number of non-pawn friends in quadrant */
        n2 = nbits(x & (board.friends[side] & ~board.b[side][pawn] & 
	 	~board.b[side][king]));
        if (n1 > n2)
	  s += (n1 - n2) * KING_DEFENDER_DEFICIT;
      }
      
      KingSafety[side] = s;
      s = (s * factor[phase]) / 8;
   }
   else
   {
      s += EndingKing[sq];
      s += CTL(sq,king,side);
      b = (board.b[white][pawn] | board.b[black][pawn]);
      while (b)
      {
         sq1 = leadz (b);
         CLEARBIT (b, sq1);
	 if (BitPosArray[sq1] & board.b[white][pawn])
            s -= distance[sq][sq1+8] * 10 - 5;
	 else if (BitPosArray[sq1] & board.b[white][pawn])
            s -= distance[sq][sq1-8] * 10 - 5;
         else
	    s -= distance[sq][sq1] - 5;
      }

      /* Attack on weak opponent pawns */
      if (MoveArray[king][sq] & weaked[xside])
         s += ATAKWEAKPAWN * 2;

   }

    if (phase >= 4) {
      /* Weak back rank */
      if (side == white) {
        if (sq < A2) 
	  if (!(MoveArray[king][sq] & (~board.b[side][pawn] & RankBit[1]))) 
	    s += KING_BACK_RANK_WEAK;
      } else {
	if (sq > H7) 
	  if (!(MoveArray[king][sq] & (~board.b[side][pawn] & RankBit[6]))) 
	    s += KING_BACK_RANK_WEAK;
      }
   }

   return (s);
}


int LoneKing (int side, int loser)
/**************************************************************************
 *
 *  One side has a lonely king and the other has no pawns, but enough
 *  mating material.  We give an additional bonus of 150 points for the 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亚洲一区二区三区妖精 | 日本一不卡视频| 欧美色网站导航| 亚洲18色成人| 欧美一级日韩免费不卡| 国产在线播放一区三区四| 精品国产凹凸成av人网站| 高清成人在线观看| 国产精品超碰97尤物18| 欧美主播一区二区三区美女| 天堂va蜜桃一区二区三区漫画版| 日韩精品中文字幕在线不卡尤物 | 综合久久综合久久| 欧美影院午夜播放| 美女久久久精品| 国产偷v国产偷v亚洲高清| caoporen国产精品视频| 亚洲国产日日夜夜| 久久综合色之久久综合| 91免费观看视频在线| 日日夜夜一区二区| 国产日韩一级二级三级| 欧美专区日韩专区| 国产一级精品在线| 一区二区国产视频| 久久久久久久综合色一本| 色视频一区二区| 麻豆精品一区二区综合av| 国产精品嫩草影院av蜜臀| 欧美在线色视频| 高清在线成人网| 日本在线播放一区二区三区| 国产精品传媒在线| 日韩一区二区三区精品视频| 99久久99久久久精品齐齐| 麻豆成人免费电影| 一二三四区精品视频| 欧美精品一区二区在线观看| 色国产精品一区在线观看| 韩日av一区二区| 亚洲国产精品久久久男人的天堂| 久久色成人在线| 欧美日韩视频一区二区| 成人av综合在线| 久热成人在线视频| 亚洲午夜久久久久久久久电影院| 久久久久久免费| 制服丝袜在线91| 一本久道久久综合中文字幕| 国产一区欧美日韩| 视频一区二区国产| 亚洲色欲色欲www| 欧美精品一区二区三| 欧美日韩在线不卡| 色婷婷久久99综合精品jk白丝 | 久久99精品国产麻豆婷婷洗澡| 国产欧美综合色| 日韩一区二区三区免费观看| 欧美亚洲综合另类| 91同城在线观看| 成人网页在线观看| 粉嫩aⅴ一区二区三区四区| 免费观看91视频大全| 亚洲444eee在线观看| 夜夜精品视频一区二区| 亚洲三级电影网站| 亚洲男人的天堂在线aⅴ视频| 国产精品卡一卡二| 中文字幕av一区二区三区免费看 | 国产精品毛片a∨一区二区三区| 欧美成人欧美edvon| 91精品国产麻豆国产自产在线 | 美女mm1313爽爽久久久蜜臀| 亚洲bdsm女犯bdsm网站| 亚洲午夜日本在线观看| 亚洲国产精品一区二区久久恐怖片| 亚洲精品欧美在线| 亚洲一区二区av在线| 亚洲在线观看免费| 一区二区三区不卡视频| 亚洲成人精品影院| 日本欧美加勒比视频| 麻豆专区一区二区三区四区五区| 久久99久久精品| 丁香天五香天堂综合| 99久久久久久| 欧美日免费三级在线| 欧美剧情片在线观看| 日韩欧美在线影院| 久久理论电影网| 亚洲欧美在线高清| 亚洲一区二区综合| 日本sm残虐另类| 国产一区二区三区av电影 | 一道本成人在线| 欧美日韩一区二区三区在线看 | 久久久久久一级片| 亚洲天天做日日做天天谢日日欢| 一区二区三区久久| 日韩精品乱码免费| 国产精一品亚洲二区在线视频| av网站免费线看精品| 精品视频一区三区九区| 欧美刺激脚交jootjob| 国产精品视频一二三| 一级女性全黄久久生活片免费| 青青国产91久久久久久| 国产精品一区三区| 欧美亚洲动漫另类| 欧美精品一区视频| 亚洲精品中文字幕乱码三区| 麻豆成人免费电影| av电影在线观看完整版一区二区| 欧美视频在线一区二区三区| 精品久久99ma| 亚洲精品日韩专区silk| 激情综合网天天干| 欧洲一区在线观看| 国产亚洲美州欧州综合国| 亚洲一区二区视频| 欧美日韩亚洲国产综合| 国产欧美久久久精品影院| 亚洲综合丁香婷婷六月香| 久久不见久久见中文字幕免费| 91香蕉视频mp4| 久久精品日产第一区二区三区高清版 | 一本久久a久久免费精品不卡| 日韩欧美的一区| 伊人色综合久久天天人手人婷| 激情综合色综合久久| 欧美日韩在线播放| 国产精品蜜臀在线观看| 精品在线播放午夜| 欧美三级中文字幕在线观看| 中文字幕欧美日本乱码一线二线| 日本女优在线视频一区二区| 91欧美激情一区二区三区成人| 欧美videossexotv100| 亚洲电影在线播放| 成人18视频日本| 久久―日本道色综合久久| 午夜不卡在线视频| 91亚洲午夜精品久久久久久| 国产色综合久久| 麻豆成人久久精品二区三区红 | 另类小说综合欧美亚洲| 欧美色图第一页| 亚洲视频精选在线| 成人的网站免费观看| 精品国内二区三区| 久久99精品国产.久久久久久| 777欧美精品| 香蕉乱码成人久久天堂爱免费| 色欧美乱欧美15图片| 中文字幕日韩欧美一区二区三区| 国产精品1区2区3区在线观看| 欧美一区二区三区电影| 亚洲电影一区二区三区| 欧美色精品在线视频| 亚洲va韩国va欧美va精品| 91看片淫黄大片一级在线观看| 国产精品九色蝌蚪自拍| 成人福利在线看| 欧美国产日韩一二三区| 国产成人精品免费看| 久久久不卡网国产精品一区| 国产二区国产一区在线观看| 国产婷婷一区二区| 成人免费视频一区| 综合分类小说区另类春色亚洲小说欧美| 成人毛片视频在线观看| 亚洲欧洲99久久| 色94色欧美sute亚洲线路二| 91欧美激情一区二区三区成人| 日韩理论片在线| 欧美在线一区二区三区| 天天色综合天天| 欧美电影免费观看完整版| 激情成人综合网| 中文字幕av一区二区三区 | 欧美性生活一区| 日韩制服丝袜先锋影音| 日韩三级精品电影久久久| 紧缚捆绑精品一区二区| 国产午夜精品一区二区三区视频| 国产成人免费视频网站| 亚洲视频中文字幕| 欧美日韩精品一区二区天天拍小说| 亚洲444eee在线观看| 精品国产伦一区二区三区免费| 国产精品白丝av| 亚洲码国产岛国毛片在线| 91精品国模一区二区三区| 国产在线麻豆精品观看| 久久久精品欧美丰满| 成人精品电影在线观看| ●精品国产综合乱码久久久久| 91精品1区2区| 久久精品国产亚洲高清剧情介绍 | 亚洲人成在线播放网站岛国 |