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

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

?? evaluate.cpp

?? 《C++Builder程序設(shè)計(jì)范例--中國(guó)象棋》配書盤自述文件
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
#include <stdio.h>
#include "Cdefines.h"
#include "Global.h"

#undef max
#undef min
#define max(a, b)  (((a) > (b)) ? (a) : (b))
#define min(a, b)  (((a) < (b)) ? (a) : (b))

#define     TOLERANCE           9   /*容忍值*/
#define     EXCHANGEVALUE      32

MAXTYPE RootValue;
BOARDTYPE ChessBoard[0x99];
extern int DirectionTab[];

extern MAXTYPE MainEvaluat;

bool  OnlyKnOrPa;
int RookActive, KnightActive, GunnerActive, KingActive;  //車馬炮王的活動(dòng)性

typedef unsigned char FILETYPE;  /*  列數(shù)  */
typedef unsigned char RANKTYPE;  /*  行數(shù)  */
typedef unsigned char SETOFFILE;

/*
 *  本模塊的全局變量
 */

int PieceValue[8] = {0, 0x1000, 0x900, 0x450, 0x400, 0x200, 0x200, 0x100};

const char distanR[10] = { 0, 2, 3, 3, 3, 3, 3, 3, 3, 3 };
const char distanL[9] = { 3, 3, 3, 1, 0, 1, 3, 3, 3 };
const char distanCR[10] = { 3, 2, 1, 0, 0, 0, 0, 1, 2, 3 };
const char distanCL[9] = { 3, 2, 1, 0, 0, 0, 1, 2, 3 };

const char pawnrank[10] = {0, 0, 0, 0, 2, 4, 8, 20, 15, 2};
const char pawnfilefactor[9] = {0, 0, 2, 4, 5, 4, 2, 0, 0};


int totalmaterial, pawntotalmaterial, material;
  /*  子力級(jí)別。開局、中局子力比較重要,殘局時(shí)子力作用減小  */
int materiallevel;
const unsigned char squarerankvalue[10] = { 0, 0, 0, 0, 0, 1, 1, 2, 4, 4};
COLORTYPE tempcolor;
int temp, temp2;  /*  臨時(shí)變量  */

/*車位置值表*/
const int rookposvalu[10][9] = { {-26,128,76, 180,154,180,76, 128,-26},
				 {102,52, 102,204,102,204,102,52, 102},
				 {52, 102,76, 180,154,180,76, 102,52},
				 {76, 128,102,180,180,180,102,128,76},
				 {154,204,180,256,256,256,180,204,154},
				 {154,180,154,230,230,230,154,180,154},
				 {154,230,204,282,282,282,204,230,154},
				 {154,154,154,230,230,230,154,154,154},
				 {204,256,230,308,332,308,230,256,204},
                                 {180,180,154,230,204,230,154,180,180}};

 /*馬位置值表*/
const int knightposvalu[10][9] = { {0,  -52,0,  0,  0,  0,  0,  -52,0},
				   {0,  26, 52, 52, -26,52, 52, 26, 0},
				   {52, 26, 102,102,52, 102,102,26, 52},
				   {26, 76, 102,76, 128,76, 102,76, 26},
				   {52, 154,204,180,154,180,204,154,52},
				   {76, 204,180,230,204,230,180,204,76},
				   {102,308,230,308,256,308,230,308,102},
				   {154,180,204,256,230,256,204,180,154},
				   {52, 128,358,204,102,204,358,128,52},
                                   {52, 102,204,154,52, 154,204,102,52}};

 /*炮位置值表*/
const int gunposvalu[10][9] = { {0,  0,  26, 76,  76,  76,  26, 0,  0},
				{0,  26, 52, 76,  76,  76,  52, 26, 0},
				{52, 0,  102,76,  128, 76,  102,0,  52},
				{0,  0,  0,  26,  52,  26,  0,  0,  0},
				{-26,0,  52, 26,  76,  26,  52, 0,  -26},
				{0,  0,  0,  26,  102, 26,  0,  0,  0},
				{0,  0,  -26,52,  128, 52,  -26,0,  0},
				{26, 26, 0,  -128,-102,-128,0,  26, 26},
				{26, 26, 0,  -52, -180,-52, 0,  26, 26},
                                {76, 52, 0,  -128,-154,-128,0,  52, 76} };

/*兵位置值表*/
const int pawnposvalu[10][9] = {  {0,  0,  0,  0,   0,   0,   0,  0,  0},
				  {0,  0,  0,  0,   0,   0,   0,  0,  0},
				  {0,  0,  0,  0,   0,   0,   0,  0,  0},
				  {0,  0,  -26,0,   52,  0,   -26,0,  0},
				  {26, 0,  102,0,   102, 0,   102,0,  26},
				  {76, 154,230,230, 256, 230, 230,154,76},
				  {128,256,384,435, 512, 435, 384,256,128},
				  {180,332,538,768, 1024,768, 538,332,180},
				  {230,460,716,1024,1536,1024,716,460,230},
				  {0,  38, 76, 115, 154, 115, 76, 38, 0} };

int i,j;


/*
 *  計(jì)算兵結(jié)構(gòu)值,此處實(shí)際上沒有定義
 */

static int pawnstrval(DEPTHTYPE depth, COLORTYPE color)
{
    return 0;    
}


/*
 *  計(jì)算棋子位置值
 */

inline int PiecePosVal(PIECETYPE piece, COLORTYPE color, SQUARETYPE square)
{
    return (PieceValue[piece] + PVTable[color][piece][square]);
}


short mating;  /*  進(jìn)行子力交換時(shí)要用到  */

/*
 *  計(jì)算棋子值表,后面的靜態(tài)估價(jià)函數(shù)需要
 */

void CalcPVTable(void)
{
    typedef SETOFFILE PAWNTABTYPE[9];


    /*  存儲(chǔ)棋子的攻擊性  */
    char attackvalue[2][0x99];
    /*  棋子的控位功能值  */
    int pvcontrol[2][6][0x99];

    COLORTYPE losingcolor;     /*  子力交換時(shí)吃虧的一方  */
    int posval;                /*  棋子位置值  */
    int attval;                /*  棋格的攻擊值  */
    FILETYPE line;             /*  棋子的列數(shù)  */
    RANKTYPE rank;             /*  棋子的行數(shù)  */
    char dist, kingdist;       /*  到棋盤中心的距離,離王的距離 */
    short direct;              /*  指示直接攻擊  */
    int cnt;                   /*  攻擊值變量  */
    COLORTYPE color, oppcolor; /*  己方和對(duì)方  */
    PIECETYPE piececount;
    SQUARETYPE square;

    SQUARETYPE asquare;
    COLORTYPE acolor;
    PIECETYPE apiece;

    DIRTYPE dir;               /*  棋子可移動(dòng)的方向(左、右、前、后) */
    EDGESQUARETYPE sq;
    int colortemp, piecetemp;           /*  臨時(shí)變量  */

    material = pawntotalmaterial = totalmaterial = mating = 0;

    for (square = 0; square < 0x99; square++)
	if (((square>>4)<10) && ((square % 16)<9) && ((square | 0xff)>=0))
            if (ChessBoard[square].piece != empty)
                if (ChessBoard[square].piece != king)
                {
                    temp = PieceValue[ChessBoard[square].piece];
                    totalmaterial += temp;
                    if (ChessBoard[square].piece == pawn)
                        pawntotalmaterial += PieceValue[pawn];
                    if (ChessBoard[square].color == red) temp = -temp;
                    material -= temp;
                }
    materiallevel = max(0, totalmaterial - 0x2000) / 0x100;

    /*  根據(jù)物質(zhì)力量來確定是否進(jìn)行子力交換  */
    if (material < 0)
        losingcolor = red;
    else
        losingcolor = black;
    mating = ((totalmaterial - abs(material)) / 2 <= PieceValue[gunner] * 2)
	&& (abs(material) >= PieceValue[rook] - PieceValue[gunner]);
    /*  計(jì)算攻擊值 */
    for (rank = 0; rank < 10; rank++)
	for (line = 0; line < 9; line++)
        {
            square = (rank << 4) + line;
	    attval = max(0, 9 - 3 * (distanCR[rank] + distanCL[line]));
		    /*  占據(jù)中心的重要性 */
                    /*  棋子所在行數(shù)的重要性  */
    /*
    在C++ Builder中枚舉常量加一個(gè)常數(shù),不能成為后一個(gè)常量。
     只得采用整數(shù)間接來達(dá)到目的。
    */
             for (colortemp = 0; colortemp <= 1; colortemp++)
            {
                { if (colortemp==0)
                  color = red;
                  if (colortemp==1)
                    color = black;
                }
	        attackvalue[color][square] = char(((squarerankvalue[rank] * 3 *
			(materiallevel + 8)) >> 5) + attval);
		 square = (((0xa0 - square) / 16) << 4 )+ line;
		 if ((square ==0xa0)||(square == 0x90)||(square == 0x80)||
		(square == 0x70)||(square == 0x60)||(square == 0x50)||
		 (square == 0x40) || (square == 0x30)||(square == 0x20) ||
		  (square == 0x10)||(square == 0x0))
	           {
	            square -= 0x10;
	           }
	          else
		   {
	            square = square;
	           }
	    }
        }
     /*
    在C++ Builder中枚舉常量加一個(gè)常數(shù),不能成為后一個(gè)常量。
     只得采用整數(shù)間接來達(dá)到目的。
    */
  for (colortemp = 0; colortemp <= 1; colortemp++)
    {
      {
      if (colortemp==0)
       color=red;
        if (colortemp ==1)
          color = black;
      }
       	oppcolor = (COLORTYPE)(1 - color);
	  if ( materiallevel > 0)
	    /*  計(jì)算圍繞對(duì)方王的四個(gè)位置的重要性  */
     	for (dir = 0; dir < 4; dir++)
        {
            sq = PieceTable[oppcolor][0].isquare + DirectionTab[dir];
	      if (((square>>4)<10) && ((square % 16)<9) && ((square | 0xff)>=0))
		attackvalue[color][sq] += char(((12 * (materiallevel + 8)) >> 5));
        }
    }

    /*  計(jì)算棋子的局面控制值  */
    /*
    在C++ Builder中枚舉常量加一個(gè)常數(shù),不能成為后一個(gè)常量。
     只得采用整數(shù)間接來達(dá)到目的。
    */
    for (square = 0; square <= 0x98; square++)
       if (((square>>4)<10) && ((square % 16)<9) && ((square | 0xff)>=0))
         for (colortemp = 0; colortemp <= 1; colortemp++)
          {
             {
              if (colortemp==0)
                  color = red;
                  if (colortemp==1)
                    color = black;
              }
		 piececount = rook;
		 pvcontrol[color][piececount][square] = 0;
	  }
    /*
    在C++ Builder中枚舉常量加一個(gè)常數(shù),不能成為后一個(gè)常量。
     只得采用整數(shù)間接來達(dá)到目的。
    */
       for (square = 0; square <= 0x98; square++)
       if (((square>>4)<10) && ((square % 16)<9) && ((square | 0xff)>=0))
           for (colortemp = 0; colortemp <= 1; colortemp++)
            {
             {
              if (colortemp==0)
                  color = red;
                  if (colortemp==1)
                    color = black;
              }
             	for (dir = 3; dir > 0; dir--)
                {
                        piececount = rook;
                /* 計(jì)算棋子每個(gè)方位的攻擊性。己方對(duì)對(duì)方同樣棋子的攻擊,算是正常攻擊;
                對(duì)不是同樣棋子的攻擊,算是半個(gè)攻擊。
                 */
                   cnt = 0;
                    sq = square;
                    direct = 1;
                    do
                    {
                        sq += DirectionTab[dir];
	      		if (((sq >>4)>10) || ((sq % 16)>9)
			   || ((sq | 0xff)<0)) goto TEN;
                        temp = attackvalue[color][sq];
                        if (direct)
                            cnt += temp;
                        else
                            cnt += (temp >> 1);
                        if (ChessBoard[sq].piece != empty)
                            if ((ChessBoard[sq].piece != piececount))
                            direct = 0;
                   } while (ChessBoard[sq].piece != pawn);
  TEN:           pvcontrol[color][piececount][square] += (cnt >> 2);
                }
            }

    /*  逐個(gè)計(jì)算棋子表 */
    /*
    在C++ Builder中枚舉常量加一個(gè)常數(shù),不能成為后一個(gè)常量。
     只得采用整數(shù)間接來達(dá)到目的。
    */
    for (square = 0; square <= 0x98; square++)
       if (((square>>4)<10) && ((square % 16)<9) && ((square | 0xff)>=0))
      {
       	for (colortemp = 0; colortemp <= 1; colortemp++)
           {
              {
               if (colortemp==0)
                  color = red;
                  if (colortemp==1)
                    color = black;
              }
         
	    line = FILETYPE(square % 16);
	    rank = RANKTYPE(square >> 4);
	    if (color == black) rank = RANKTYPE(9 - rank);
	    dist = char(distanR[rank] + distanL[line]);
            if ((rank<=9) && (line<=8))
	     kingdist = char(abs((square >> 4) - (PieceTable[oppcolor][0].isquare
	    	   >> 4)) + ((square - PieceTable[oppcolor][0].isquare) % 16));
      /*
    在C++ Builder中枚舉常量加一個(gè)常數(shù),不能成為后一個(gè)常量。
     只得采用整數(shù)間接來達(dá)到目的。
    */
            for (piecetemp = 0; piecetemp <= 6; piecetemp++)
     {
       {
       if (piecetemp==0)
        piececount=king;
          if (piecetemp==1)
            piececount=rook;
             if (piecetemp==2)
              piececount=gunner;
               if (piecetemp==3)
                piececount=knight;
                 if (piecetemp==4)
                  piececount=assist;
                    if(piecetemp==5)
                     piececount=bishop;
                      if (piecetemp==6)
                        piececount=pawn;

        }

                posval = 0;        /*  根據(jù)棋格的位置計(jì)算棋子位置值  */
	    	if (mating)
                {
                    if (piececount == king)
			if (color == losingcolor)  /*  子力交換估算  */
			{
                            posval = 128 - 16 * distanR[rank]
                                - 12 * distanL[line];
                            if (distanR[rank] == 3)
                                posval -= 16;
                        }
                       else
			{
                            posval = 128 - 4 * kingdist;
                            if ((distanR[rank] >= 2) || (distanL[line] == 3))
                                posval -= 16;
                        }
                }
                else
                {
	       	    temp = pvcontrol[color][rook][square];
                    /*  正常估價(jià)函數(shù)  */
                    switch (piececount)
                    {
                        case king :
			    if (materiallevel <= 0) posval = -2 * dist;
                            break;
	    		case assist :
                        case bishop:
			    posval = temp >> 2;
                            break;
                        case rook :
                            posval = temp;
                            break;
                        case gunner :
                            posval = temp>>1;
                            break;
                        case knight :
                            cnt = 0;
                            for (dir = 0; dir < 8; dir++)
                            {
                                sq = square + KnightDir[dir];
			 if (((square>>4)<10) && ((square % 16)<9) && ((square | 0xff)>=0))
                                    cnt += attackvalue[color][sq];
                            }
                            posval = (cnt >> 1) - dist * 3;
                            break;
                        case pawn :
			    posval = pawnrank[rank] +
			    pawnfilefactor[line] * (rank + 2) - 12;

	     	    }
                }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲精品石原莉奈 | 午夜日韩在线观看| 91蜜桃婷婷狠狠久久综合9色| 国产片一区二区| 成人少妇影院yyyy| 亚洲欧美日韩成人高清在线一区| caoporn国产一区二区| 亚洲人成人一区二区在线观看| 99国产精品视频免费观看| 亚洲欧美国产毛片在线| 欧美私人免费视频| 日韩**一区毛片| 精品国产青草久久久久福利| 国产成人免费在线| 国产精品国产三级国产普通话蜜臀 | 美女网站色91| 久久影院视频免费| 99久久久久久| 午夜精品久久一牛影视| 精品少妇一区二区三区在线播放 | 国产成人综合在线观看| 国产精品电影一区二区三区| 91亚洲国产成人精品一区二三| 亚洲一区免费视频| 精品国产免费视频| 97久久超碰国产精品| 午夜电影一区二区三区| 久久久久久一二三区| 色婷婷综合久久久久中文 | 欧美三级欧美一级| 经典一区二区三区| 亚洲欧洲综合另类| 日韩欧美一区在线观看| 成人福利视频网站| 午夜精品在线看| 国产天堂亚洲国产碰碰| 在线观看免费视频综合| 国内成人免费视频| 亚洲高清视频中文字幕| 亚洲精品在线电影| 欧美性大战xxxxx久久久| 韩国精品久久久| 亚洲制服丝袜在线| 精品无人码麻豆乱码1区2区 | 欧美三区在线视频| 国产大片一区二区| 五月婷婷欧美视频| 国产精品二三区| 日韩亚洲欧美在线| 欧美性三三影院| 丁香桃色午夜亚洲一区二区三区| 亚洲一卡二卡三卡四卡| 久久综合久久鬼色中文字| 欧美调教femdomvk| 91在线视频18| 国产高清不卡一区| 日韩成人伦理电影在线观看| 亚洲免费三区一区二区| 久久久久9999亚洲精品| 日韩一级二级三级精品视频| 色久综合一二码| 国产成人免费视频网站| 久久精品国产99| 亚洲超碰精品一区二区| 亚洲欧洲av一区二区三区久久| 日韩精品中文字幕一区二区三区| 欧美在线免费播放| 91蝌蚪porny| 成人性生交大片免费| 精品一区二区av| 裸体歌舞表演一区二区| 性做久久久久久| 亚洲伊人色欲综合网| 亚洲欧美电影一区二区| 中文字幕日韩精品一区| 国产精品久久久99| 国产欧美日韩卡一| 中文字幕av不卡| 国产欧美综合在线观看第十页| 2020日本不卡一区二区视频| 日韩欧美一级片| 精品国产乱码久久久久久影片| 日韩午夜激情视频| 精品久久久久一区| 精品国内片67194| 久久综合九色综合欧美就去吻| 欧美一级淫片007| 日韩精品在线看片z| 肉丝袜脚交视频一区二区| 亚洲夂夂婷婷色拍ww47| 亚洲一区二区五区| 午夜欧美在线一二页| 日本少妇一区二区| 久久 天天综合| 国产成人午夜片在线观看高清观看| 国产综合久久久久久鬼色 | 一区二区三区在线视频观看58| 国产精品久久综合| 亚洲欧美国产高清| 三级久久三级久久| 国产自产视频一区二区三区| 成人丝袜18视频在线观看| 北岛玲一区二区三区四区| 色猫猫国产区一区二在线视频| 欧美色图在线观看| 日韩精品一区在线观看| 日本一区二区三级电影在线观看| 18欧美亚洲精品| 亚洲福利一区二区| 国内精品视频一区二区三区八戒| 国产成人精品aa毛片| 色婷婷激情综合| 欧美一区二区三区视频在线| 久久精品视频免费观看| 亚洲精品亚洲人成人网在线播放| 欧美色图第一页| 精品播放一区二区| 亚洲视频狠狠干| 免费成人av在线| av在线不卡网| 日韩午夜精品电影| 亚洲欧美国产高清| 久久国产精品72免费观看| www.66久久| 91精品在线免费| 亚洲欧洲美洲综合色网| 日韩国产高清在线| 99热99精品| 精品日产卡一卡二卡麻豆| 国产精品精品国产色婷婷| 日韩av成人高清| 91丨porny丨中文| 欧美mv和日韩mv的网站| 亚洲一区在线观看视频| 国产成人免费av在线| 欧美美女bb生活片| 日韩毛片高清在线播放| 精品在线免费观看| 欧美日韩高清一区二区三区| 国产亚洲欧美中文| 麻豆国产一区二区| 在线视频一区二区三区| 中文在线一区二区| 蜜臀精品一区二区三区在线观看| 91日韩在线专区| 国产三级三级三级精品8ⅰ区| 日韩国产精品久久久| 在线观看视频欧美| 国产精品美女视频| 国产激情一区二区三区桃花岛亚洲| 欧美精品 日韩| 春色校园综合激情亚洲| 日韩欧美的一区| 日韩精品三区四区| 欧美视频中文字幕| 一区二区三区精品视频在线| 不卡视频在线观看| 国产丝袜美腿一区二区三区| 老司机午夜精品| 日韩午夜电影在线观看| 亚洲成人黄色影院| 欧美三级三级三级| 亚洲国产欧美在线| 一本到一区二区三区| 亚洲天堂av老司机| av在线一区二区三区| 中文字幕日本不卡| 91欧美激情一区二区三区成人| 欧美国产精品中文字幕| 国产精品99久久久久久久vr| 久久伊99综合婷婷久久伊| 久久99精品视频| 精品剧情v国产在线观看在线| 美女mm1313爽爽久久久蜜臀| 日韩亚洲欧美一区二区三区| 日韩二区在线观看| 精品嫩草影院久久| 国产精品主播直播| 中文一区在线播放| 91亚洲精品久久久蜜桃| 亚洲精品成人天堂一二三| 91成人免费网站| 亚洲成人先锋电影| 欧美一区二区播放| 久久99精品久久久| 国产亚洲精品超碰| 99久久久久久99| 一区二区三区欧美视频| 欧美日韩国产免费一区二区| 首页国产丝袜综合| 精品入口麻豆88视频| 国产一区二区三区av电影| 亚洲国产高清在线| 在线观看免费亚洲| 人妖欧美一区二区| 国产农村妇女精品| 色久综合一二码| 美女视频网站久久| 中文字幕精品一区二区精品绿巨人 | 91丨九色丨蝌蚪丨老版|