⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.h

📁 一款运行在linux上的象棋游戏。用GTK/GNOME环境下用GLADE开发。
💻 H
📖 第 1 页 / 共 2 页
字号:
/* GNU Chess 5.0 - common.h - common symbolic definitions   Copyright (c) 1999-2002 Free Software Foundation, Inc.   GNU Chess is based on the two research programs    Cobalt by Chua Kong-Sian and Gazebo by Stuart Cracraft.   GNU Chess is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2, or (at your option)   any later version.   GNU Chess is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with GNU Chess; see the file COPYING.  If not, write to   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.   Contact Info:      bug-gnu-chess@gnu.org     cracraft@ai.mit.edu, cracraft@stanfordalumni.org, cracraft@earthlink.net*/#ifndef COMMON_H#define COMMON_H#include <config.h>#ifndef __GNUC__# define __attribute__(x)#endif/* * Include "uint64_t" and similar types using the ac_need_stdint_h ac macro */#include "GCint.h"#include <stdio.h>#include <sys/types.h> /*   * Define time structures to get timeval for Timer   */#include <sys/time.h> /*  * Define macro for declaring 64bit constants for compilers not using ULL  */#ifdef _MSC_VER   #define ULL(x) ((uint64_t)(x))#else   #define ULL(x) x ## ULL#endif/* * BitBoard is a key data type.  It is a 64-bit value, in which each * bit represents a square on the board as defined by "enum Square". * Thus, bit position 0 represents a fact about square a1, and bit * position 63 represents a fact about square h8.  For example, the * bitboard representing "white rook" positions will have a bit set * for every position occupied on the board by a white rook. */typedef uint64_t BitBoard;typedef uint64_t HashType;typedef uint32_t KeyType;/* * Board represents an entire board's state, and is structured to * simplify analysis: */typedef struct {   BitBoard b[2][7];      /* piece/pawn positions by side (0=white, 1=black)                             and then by piece (1=pawn..6=king). For example,                             b[white][knight] has bits set for every board                             position occupied by a White Knight. */   BitBoard friends[2];   /* Friendly (this side's) pieces */   BitBoard blocker;   BitBoard blockerr90;   /* rotated 90 degrees */   BitBoard blockerr45;   /* rotated 45 degrees */   BitBoard blockerr315;  /* rotated 315 degrees */   short ep;              /* Location of en passant square */   short flag;            /* Flags related to castle privileges */   short side;            /* Color of side on move: 0=white, 1=black */   short material[2];     /* Total material by side not inc. king */   short pmaterial[2];    /* Total pawn material by side not inc. king */   short castled[2];      /* True (1) if side is castled */   short king[2];         /* Location of king 0 - a1 .. 63 - h8 */} Board; /* leaf describes a leaf-level analysis result */typedef struct{   int move;   /* the move that produced this particular board */   int score;  /* the scored value of this leaf */} leaf;/* * GameRec records an individual move made in the game; an entire * Game is a set of GameRec's: */#define SANSZ 8 /* longest move is "exf8=Q+" so 7+1 */typedef struct{   int move;    /* The actual move made; this is NOT the move count! */   short epsq;  /* en passant square */   short bflag; /* Flags for castle privs, see Board.flag */   short Game50; /* The last value of GameCnt (a count of half-moves)                    that castled, captured, or moved a pawn */   short mvboard;   float et;     /* elapsed time */   HashType hashkey;   HashType phashkey;   char SANmv[SANSZ];  /* The move in SAN notation */   char *comments;} GameRec;typedef struct{   HashType key;    /* Full 64 bit hash */   int move;        /* Best move */   int score;       /* Estimated score, may be lower or upper bound */   uint8_t flag;    /* Is this alpha, beta, quiescent or exact? */   uint8_t depth;   /* Search depth */} HashSlot;   typedef struct{   KeyType pkey;     BitBoard passed;   BitBoard weaked;   int score;   int phase;} PawnSlot;/*  MACRO definitions */#ifndef MAX#define MAX(a,b)     ((a) > (b) ? (a) : (b))#endif#ifndef MIN#define MIN(a,b)     ((a) < (b) ? (a) : (b))#endif#define SET(a,b)                     \  do {                               \    (a) |= (b);                      \    dbg_printf("Set   0x%x\n", (b)); \  } while (0)#define CLEAR(a,b)                   \  do {                               \    (a) &= ~(b);                     \    dbg_printf("Clear 0x%x\n", (b)); \  } while (0)/* Draw score can be used to penalise draws if desired */#define	DRAWSCORE   0 #define MATERIAL     (board.material[side] - board.material[1^side])#define PHASE	     (8 - (board.material[white]+board.material[black]) / 1150)#define KEY(a)	     (a >> 32) /*  Attack MACROS */#define BishopAttack(sq) \	(Bishop45Atak[sq][(board.blockerr45 >> Shift45[sq]) & Mask45[sq]] | \	 Bishop315Atak[sq][(board.blockerr315 >> Shift315[sq]) & Mask315[sq]])#define RookAttack(sq)	\	(Rook00Atak[sq][(board.blocker >> Shift00[sq]) & 0xFF] | \         Rook90Atak[sq][(board.blockerr90 >> Shift90[sq]) & 0xFF])#define QueenAttack(sq)	\	(BishopAttack(sq) | RookAttack(sq))/*  Some bit macros  *//* * gcc 2.95.4 completely screws up the macros with lookup tables  * with -O2 on PPC, maybe this check has to be refined. (I don't know * whether other architectures also suffer from this gcc bug.) However, * with gcc 3.0, the lookup tables are _much_ faster than this direct * calculation. */#if defined(__GNUC__) && defined(__PPC__) && __GNUC__ < 3#  define SETBIT(b,i)   ((b) |=  ((ULL(1)<<63)>>(i)))#  define CLEARBIT(b,i) ((b) &= ~((ULL(1)<<63)>>(i)))#else#  define SETBIT(b,i)   ((b) |= BitPosArray[i])#  define CLEARBIT(b,i) ((b) &= NotBitPosArray[i])#endif#define RANK(i) ((i) >> 3)#define ROW(i) ((i) & 7)#define trailz(b) (leadz ((b) & ((~b) + 1)))/* Move Descriptions (moves) are represented internally as integers. * The lowest 6 bits define the destination ("TO") square, and * the next lowest 6 bits define the source ("FROM") square, * using the values defined by "enum Square" (0=a1, 63=h8). * Upper bits are used to identify other move information such as * a promotion (and to what), a capture (and of what), * CASTLING moves, and ENPASSANT moves; see the "constants for * move description" below for more information on these upper bits. */#define PROMOTEPIECE(a) ((a >> 12) & 0x0007)#define CAPTUREPIECE(a) ((a >> 15) & 0x0007)#define TOSQ(a)         ((a) & 0x003F)#define FROMSQ(a)       ((a >> 6) & 0x003F)#define MOVE(a,b)       (((a) << 6) | (b))/* constants for move description */#define KNIGHTPRM     0x00002000#define BISHOPPRM     0x00003000 #define ROOKPRM       0x00004000#define QUEENPRM      0x00005000#define PROMOTION     0x00007000#define PAWNCAP       0x00008000#define KNIGHTCAP     0x00010000 #define BISHOPCAP     0x00018000#define ROOKCAP       0x00020000 #define QUEENCAP      0x00028000 #define CAPTURE       0x00038000 #define NULLMOVE      0x00100000 #define CASTLING      0x00200000 #define ENPASSANT     0x00400000#define MOVEMASK      (CASTLING | ENPASSANT | PROMOTION | 0x0FFF)#define white  0#define black  1#define false  0#define true   1#define ks 0#define qs 1#define INFINITY  32767#define MATE	  32767#define MATESCORE(a)	((a) > MATE-255  || (a) < -MATE+255)/* constants for Board */#define WKINGCASTLE   0x0001#define WQUEENCASTLE  0x0002#define BKINGCASTLE   0x0004#define BQUEENCASTLE  0x0008#define WCASTLE	      (WKINGCASTLE | WQUEENCASTLE)#define BCASTLE	      (BKINGCASTLE | BQUEENCASTLE)/* Material values */#define ValueP   100	#define ValueN   350#define ValueB   350#define ValueR   550#define ValueQ   1100#define ValueK   2000/*  Some special BitBoards  */#define NULLBITBOARD  ( ULL(0x0000000000000000))#define WHITESQUARES  ( ULL(0x55AA55AA55AA55AA))#define BLACKSQUARES  ( ULL(0xAA55AA55AA55AA55))#define CENTRESQUARES ( ULL(0x0000001818000000))#define COMPUTERHALF  ( ULL(0xFFFFFFFF00000000))#define OPPONENTHALF  ( ULL(0x00000000FFFFFFFF))/*  Game flags */#define QUIT    0x0001#define TESTT   0x0002#define THINK   0x0004#define MANUAL  0x0008#define TIMEOUT 0x0010#define SPARE1  0x0020#define ENDED   0x0040#define USEHASH 0x0080#define SOLVE   0x0100#define USENULL 0x0200#define XBOARD  0x0400#define TIMECTL 0x0800#define POST    0x1000#define PONDER  0x2000 /* We are in pondering (during search) */#define HARD    0x4000 /* Pondering is turned on */#define ANALYZE 0x8000 /* In ANALYZE mode *//*  Node types  */ #define PV  0#define ALL 1#define CUT 2/*  Transposition table flags  */#define EXACTSCORE  1#define LOWERBOUND  2#define UPPERBOUND  3#define POORDRAFT   4#define QUIESCENT   5#define STICKY      8/*  Book modes */#define BOOKOFF 0#define BOOKRAND 1#define BOOKBEST 2#define BOOKWORST 3#define BOOKPREFER 4/*  The various phases during move selection  */#define PICKHASH    1#define PICKGEN1    2#define PICKCAPT    3#define PICKKILL1   4#define PICKKILL2   5#define PICKGEN2    6#define PICKHIST    7#define PICKREST    8#define PICKCOUNTER 9#define MAXTREEDEPTH  2000#define MAXPLYDEPTH   65#define MAXGAMEDEPTH  600/*    Smaller HASHSLOT defaults 20011017 to improve blitz play   and make it easier to run on old machines*/#define HASHSLOTS 1024 #define PAWNSLOTS 512extern short distance[64][64];extern short taxicab[64][64];extern unsigned char lzArray[65536];extern short Shift00[64];extern short Shift90[64];extern short Shift45[64];extern short Shift315[64];extern BitBoard DistMap[64][8];extern BitBoard BitPosArray[64];extern BitBoard NotBitPosArray[64];extern BitBoard MoveArray[8][64];extern BitBoard Ray[64][8];extern BitBoard FromToRay[64][64];extern BitBoard RankBit[8];extern BitBoard FileBit[8];extern BitBoard Ataks[2][7];extern BitBoard PassedPawnMask[2][64];extern BitBoard IsolaniMask[8];extern BitBoard SquarePawnMask[2][64];extern BitBoard Rook00Atak[64][256]; extern BitBoard Rook90Atak[64][256]; extern BitBoard Bishop45Atak[64][256];extern BitBoard Bishop315Atak[64][256];extern BitBoard pinned;extern BitBoard rings[4];extern BitBoard boxes[2];extern BitBoard stonewall[2];extern BitBoard pieces[2];extern BitBoard mask_kr_trapped_w[3];extern BitBoard mask_kr_trapped_b[3];extern BitBoard mask_qr_trapped_w[3];extern BitBoard mask_qr_trapped_b[3];extern BitBoard boardhalf[2];extern BitBoard boardside[2];extern short directions[64][64];extern unsigned char BitCount[65536];extern leaf Tree[MAXTREEDEPTH];extern leaf *TreePtr[MAXPLYDEPTH];extern int RootPV;extern GameRec Game[MAXGAMEDEPTH];extern int RealGameCnt;extern short RealSide;extern int GameCnt;extern int computer;extern unsigned int flags;extern unsigned int preanalyze_flags;extern Board board;extern int cboard[64];extern int Mvboard[64];extern HashType hashcode[2][7][64];extern HashType ephash[64];extern HashType WKCastlehash;extern HashType WQCastlehash;extern HashType BKCastlehash;extern HashType BQCastlehash;extern HashType Sidehash;extern HashType HashKey;extern HashType PawnHashKey;extern HashSlot *HashTab[2];extern PawnSlot *PawnTab[2];extern int Idepth;extern int SxDec;extern int Game50;extern int lazyscore[2];extern int maxposnscore[2];extern int rootscore;extern int lastrootscore;extern unsigned long GenCnt;extern unsigned long NodeCnt;extern unsigned long QuiesCnt;extern unsigned long EvalCnt;extern unsigned long EvalCall;extern unsigned long ChkExtCnt;extern unsigned long OneRepCnt;extern unsigned long RcpExtCnt;extern unsigned long PawnExtCnt;extern unsigned long HorzExtCnt;extern unsigned long ThrtExtCnt;extern unsigned long KingExtCnt;extern unsigned long NullCutCnt;extern unsigned long FutlCutCnt;extern unsigned long RazrCutCnt;extern unsigned long TotalGetHashCnt;extern unsigned long GoodGetHashCnt;extern unsigned long TotalPutHashCnt;extern unsigned long CollHashCnt;extern unsigned long TotalPawnHashCnt;extern unsigned long GoodPawnHashCnt;extern unsigned long RepeatCnt;extern unsigned HashSize;extern unsigned long TTHashMask;extern unsigned long PHashMask;extern int slider[8];extern int Value[7];extern char SANmv[SANSZ];extern unsigned long history[2][4096];extern int killer1[MAXPLYDEPTH];extern int killer2[MAXPLYDEPTH];extern int ChkCnt[MAXPLYDEPTH];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -