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

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

?? epd.c

?? gun C 環(huán)境下編寫(xiě)的
?? C
字號(hào):
/* GNU Chess 5.0 - epd.c - EPD position definition code
   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
*/
/*
 *
 */

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "common.h"

#define EPDCLOSE 1

short ReadEPDFile (const char *file, short op)
/****************************************************************************
 *
 *  Reads in an EPD file.  The first call will read the first EPD line,
 *  the second call will read the 2nd line and so on.   To improve
 *  performance, the file is never closed.  Closing of the file happens
 *  only on 2 conditions:  (i) A ReadEPDFile failed because there is no 
 *  more lines to read.  (ii) A called to ReadEPDFile to explicitly 
 *  request that the file is closed (op = EPDCLOSE);
 *  If op == 2, then we work silently.
 *
 ****************************************************************************/
{
   static FILE *fp = NULL;
   char line[MAXSTR];

   /*  If first time through, must open file  */
   if (fp == NULL)
   {
      fp = fopen (file, "r");
      if (fp == NULL)
      {
         printf ("Error opening file %s\n", file);
         return (false);
      }
   }

   /*  Is this a close request? */
   if (op == EPDCLOSE)   
   { 
      fclose (fp);
      fp = NULL;
      return (false);
   }

next_line:
   /*  Okay, we read in an EPD entry  */
   fgets (line, MAXSTR-1, fp);
   if (!feof(fp)) 
   {
      int ret = ParseEPD (line);

      /* For now just ignore malformed lines */
      if (ret != EPD_SUCCESS) goto next_line;
      if (op != 2)
         printf ("\n%s : Best move = %s\n", id, solution);
      return (true);
   }
   /* finished, must close file */
   else
   { 
      fclose (fp);
      fp = NULL;
      return (false);
   }
}

/*
 * Returns EPD_SUCCESS on success, EPD_ERROR on error. We try to be
 * quite tough on the format. However, as of yet no legality checking
 * is done and the board is not reset on error, this should be done by
 * the caller.
 */

int ParseEPD (char *p)
/**************************************************************************
 *   
 *  Parses an EPD input line.  A few global variables are updated e.g.
 *  current board, side to move, en passant, castling status, etc.
 *
 **************************************************************************/
{
   int r, c, sq;
   char *str_p;

   r = 56;
   c = 0;
   memset (&board, 0, sizeof (board));

   while (p && *p != ' ')
   {
     sq = r + c;
     switch (*p)
     {
        case 'P' :  SETBIT (board.b[white][pawn], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    board.material[white] += ValueP;
		    break;	
        case 'N' :  SETBIT (board.b[white][knight], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    board.material[white] += ValueN;
		    break;	
        case 'B' :  SETBIT (board.b[white][bishop], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    board.material[white] += ValueB;
		    break;	
        case 'R' :  SETBIT (board.b[white][rook], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    board.material[white] += ValueR;
		    break;	
        case 'Q' :  SETBIT (board.b[white][queen], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    board.material[white] += ValueQ;
		    break;	
        case 'K' :  SETBIT (board.b[white][king], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    break;	
        case 'p' :  SETBIT (board.b[black][pawn], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    board.material[black] += ValueP;
		    break;	
        case 'n' :  SETBIT (board.b[black][knight], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    board.material[black] += ValueN;
		    break;	
        case 'b' :  SETBIT (board.b[black][bishop], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    board.material[black] += ValueB;
		    break;	
        case 'r' :  SETBIT (board.b[black][rook], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    board.material[black] += ValueR;
		    break;	
        case 'q' :  SETBIT (board.b[black][queen], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
                    board.material[black] += ValueQ;
		    break;	
        case 'k' :  SETBIT (board.b[black][king], sq);
		    SETBIT (board.blockerr90, r90[sq]);
		    SETBIT (board.blockerr45, r45[sq]);
		    SETBIT (board.blockerr315, r315[sq]);
		    break;	
        case '/' :  r -= 8;
	 	    c = -1;
		    break;
        default  :  break;
     }
     if (isdigit (*p))
        c += (*p - '0');
     else
        c++;

     /* 
      * Special case, a trailing "/" is accepted on the
      * end of the board settings.
      */

     if (r == -8 && p[1] == ' ')
	     r = 0;

     if (r < 0 || c > 8) return EPD_ERROR;
     if (c == 8 && p[1] != '/' && p[1] != ' ') return EPD_ERROR;
     p++;
   }

   board.pmaterial[white] = board.material[white] - 
				nbits(board.b[white][pawn]) * ValueP;
   board.pmaterial[black] = board.material[black] - 
				nbits(board.b[black][pawn]) * ValueP;
   board.king[white] = leadz (board.b[white][king]);
   board.king[black] = leadz (board.b[black][king]);
   UpdateFriends (); 
   UpdateCBoard ();
   UpdateMvboard ();

   /*  Get side to move  */
   if (!++p) return EPD_ERROR;
   if      (*p == 'w') board.side = white; 
   else if (*p == 'b') board.side = black;
   else return EPD_ERROR;

   /* Isn't this one cute? */
   if (!++p || *p != ' ' || !++p) return EPD_ERROR;
  
   /*  Castling status  */
   while (p && *p != ' ') {
      if      (*p == 'K') board.flag |= WKINGCASTLE;
      else if (*p == 'Q') board.flag |= WQUEENCASTLE;
      else if (*p == 'k') board.flag |= BKINGCASTLE;
      else if (*p == 'q') board.flag |= BQUEENCASTLE;
      else if (*p == '-') { p++; break; }
      else return EPD_ERROR;
      p++;
   }
   if (!p || *p != ' ' || !++p) return EPD_ERROR;

   /*
    * En passant square, can only be '-' or [a-h][36]
    * In fact, one could add more sanity checks here.
    */
   if (*p != '-') {
      if (!p[1] || *p < 'a' || *p > 'h' ||
	  !(p[1] == '3' || p[1] == '6')) return EPD_ERROR;
      board.ep = (*p - 'a') + (p[1] - '1')*8;
      p++;
   } else {
      board.ep = -1;
   }

   solution[0] = '\0';
   id[0] = '\0';

   if (!++p) return EPD_SUCCESS;

   /* The opcodes are optional, so we should not generate errors here */

   /*  Read in best move; "bm" operator */
   str_p = strstr(p, "bm");
   if (str_p) sscanf (str_p, "bm %63[^;];", solution); 

   /*  Read in the description; "id" operator */
   str_p = strstr(p, "id");
   if (str_p) sscanf (p, "id %31[^;];", id);

   CalcHashKey ();
   phase = PHASE;

   return EPD_SUCCESS;
}


void LoadEPD (char *p)
/**************************************************************************
 *   
 *  This routine reads in the next or the Nth position in the file.
 *
 **************************************************************************/
{
   char file[MAXSTR];
   int N = 1;

   sscanf (p, "%31s %d ", file, &N);
   if (strcmp (file, "next") == 0)
   {
      ReadEPDFile (file, 0);
   }
   else
   { 
      ReadEPDFile (file, 1);
      while (--N)
      {
         if (ReadEPDFile (file, 2) == false)
         {
	    printf ("File position exceeded\n");
	    return; 
         }
      }
      ReadEPDFile (file, 0);
   }
   ShowBoard ();
   NewPosition ();
}


void SaveEPD (char *p)
/**************************************************************************
 *   
 *  This routine appends the current position in EPD format into a file.
 *
 **************************************************************************/
{
   char file[MAXSTR];
   FILE *fp;
   int r, c, sq, k;
   char c1;

   sscanf (p, "%s ", file);
   fp = fopen (file, "a");
   for (r = A8; r >= A1; r -= 8)
   {
      k = 0;
      for (c = 0; c < 8; c++)
      {
         sq = r + c;
	 if (cboard[sq] == empty)
	    k++;
	 else
	 {
	    if (k) 
	       fprintf (fp, "%1d", k);
	    k = 0;
	    c1 = notation[cboard[sq]];
	    if (BitPosArray[sq] & board.friends[black])
	       c1 = tolower (c1);
	    fprintf (fp, "%c", c1);
	 }
      }
      if (k)
	 fprintf (fp, "%1d", k);
      if (r > A1)
         fprintf (fp, "/");
   }

   /* Print other stuff */
   fprintf (fp, (board.side == white ? " w " : " b "));

   if (board.flag & WKINGCASTLE)
      fprintf (fp, "K");
   if (board.flag & WQUEENCASTLE)
      fprintf (fp, "Q");
   if (board.flag & BKINGCASTLE)
      fprintf (fp, "k");
   if (board.flag & BQUEENCASTLE)
      fprintf (fp, "q");
   if (!(board.flag & (WCASTLE | BCASTLE)))
      fprintf (fp, "-");

   fprintf (fp, " %s", (board.ep > -1 ? algbr[board.ep] : "-"));
   fprintf (fp, " bm 1; id 1;");
   fprintf (fp, "\n");
   fclose (fp);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区免费视频| 波多野结衣中文一区| 国产欧美综合在线观看第十页| 91在线观看美女| 激情图区综合网| 玉米视频成人免费看| 国产欧美日本一区视频| 日韩欧美一区二区视频| 一本色道**综合亚洲精品蜜桃冫| 国产麻豆精品在线| 爽好久久久欧美精品| 1000部国产精品成人观看| 精品久久一区二区| 91精品国产综合久久精品app | 日本韩国欧美一区二区三区| 日本欧美一区二区三区乱码| 亚洲午夜免费福利视频| 欧美国产精品中文字幕| 精品国产乱码久久久久久闺蜜| 欧美偷拍一区二区| 色域天天综合网| av电影天堂一区二区在线| 国产盗摄女厕一区二区三区| 国内精品伊人久久久久影院对白| 日韩成人免费电影| 亚洲一区国产视频| 一区二区三区四区在线| 亚洲黄色片在线观看| 亚洲欧美中日韩| 国产精品二三区| 国产精品色呦呦| 国产精品私人影院| 国产女主播一区| 中文字幕成人在线观看| 国产欧美一区二区精品忘忧草| 久久一区二区三区四区| 久久免费国产精品| 久久综合九色综合97_久久久| 精品对白一区国产伦| 亚洲精品一区二区三区影院 | 久久9热精品视频| 蜜桃视频一区二区三区| 久久精品99国产精品日本| 免费在线看成人av| 麻豆国产一区二区| 久久99精品久久久久久| 国产乱码字幕精品高清av| 国产成人精品亚洲777人妖| 国产iv一区二区三区| 波多野结衣精品在线| 99国产欧美久久久精品| 一本一道波多野结衣一区二区| 色综合色狠狠天天综合色| 欧美午夜在线一二页| 欧美美女一区二区在线观看| 欧美一卡2卡3卡4卡| 久久婷婷国产综合精品青草| 国产精品热久久久久夜色精品三区| 国产精品理伦片| 亚洲伊人伊色伊影伊综合网| 婷婷六月综合网| 国产麻豆午夜三级精品| 成人激情免费网站| 欧美午夜精品电影| 欧美成人三级电影在线| 国产亚洲欧洲997久久综合 | 一本久道久久综合中文字幕| 欧美日韩视频在线第一区 | 99视频在线精品| 欧美自拍丝袜亚洲| 日韩午夜av电影| 国产精品久久久久久户外露出| 亚洲午夜精品久久久久久久久| 老司机免费视频一区二区三区| 成人一区二区在线观看| 欧美天天综合网| 国产日韩欧美综合在线| 一区二区三区免费观看| 经典三级一区二区| 色综合中文字幕国产 | 亚洲天堂2016| 日韩avvvv在线播放| 懂色av中文一区二区三区| 欧美在线观看一二区| 国产亚洲欧美中文| 亚洲成人激情综合网| 丰满亚洲少妇av| 欧美精三区欧美精三区| 中文字幕中文字幕中文字幕亚洲无线| 亚洲超碰97人人做人人爱| 粉嫩av一区二区三区在线播放| 欧美人体做爰大胆视频| 国产精品久久久久久福利一牛影视| 天天综合色天天综合色h| 成人av电影在线网| 制服视频三区第一页精品| 国产精品青草久久| 麻豆91精品91久久久的内涵| 色系网站成人免费| 国产色产综合色产在线视频| 丝袜亚洲精品中文字幕一区| caoporn国产一区二区| 精品久久人人做人人爰| 亚洲超碰97人人做人人爱| 91在线视频官网| 国产午夜精品久久久久久免费视| 日本中文字幕不卡| 在线观看91视频| 日韩美女视频一区二区 | 国产最新精品精品你懂的| 欧美巨大另类极品videosbest| 国产精品美女久久久久久久久 | 国产·精品毛片| 精品久久久网站| 日产国产高清一区二区三区| 欧美性生活久久| 樱花影视一区二区| 波波电影院一区二区三区| 国产偷国产偷精品高清尤物| 精品亚洲欧美一区| 日韩一区二区中文字幕| 天天影视涩香欲综合网| 欧美视频一区二区三区| 亚洲精品国产一区二区精华液 | 国产精品一区二区久久不卡| 日韩欧美激情四射| 日本欧美一区二区三区| 7777精品伊人久久久大香线蕉经典版下载 | 97精品国产97久久久久久久久久久久| 精品国偷自产国产一区| 久久精品久久久精品美女| 欧美精品在线观看一区二区| 午夜日韩在线电影| 欧美年轻男男videosbes| 亚洲国产精品嫩草影院| 欧美美女黄视频| 亚洲成人动漫精品| 欧美精品免费视频| 日本不卡不码高清免费观看| 91精品国产综合久久精品性色| 日韩av电影天堂| 日韩精品资源二区在线| 激情久久久久久久久久久久久久久久| 日韩精品综合一本久道在线视频| 麻豆免费看一区二区三区| 精品欧美久久久| 粉嫩绯色av一区二区在线观看| 国产精品美女久久久久久2018| bt7086福利一区国产| 亚洲免费大片在线观看| 欧美日韩一级片网站| 日韩精品91亚洲二区在线观看| 91精品国产综合久久久久| 麻豆91小视频| 国产精品女同一区二区三区| www.色综合.com| 一区二区三区自拍| 91精品蜜臀在线一区尤物| 韩国欧美一区二区| 中文字幕中文字幕在线一区 | 3751色影院一区二区三区| 久久国产精品99久久人人澡| 日本一区二区免费在线| 91麻豆精品视频| 天堂va蜜桃一区二区三区漫画版 | 一级日本不卡的影视| 91精品国产品国语在线不卡| 久久99国产精品久久99| 一区二区中文视频| 在线播放/欧美激情| 国产自产v一区二区三区c| 亚洲欧美日本在线| 欧美一级片免费看| 丁香激情综合国产| 亚洲国产精品久久一线不卡| 2020国产成人综合网| 99久久免费国产| 免费在线看成人av| 亚洲欧洲韩国日本视频| 91麻豆精品国产自产在线| 国产福利91精品一区二区三区| 亚洲综合偷拍欧美一区色| 精品国产凹凸成av人导航| 色婷婷av一区二区三区gif | 国产ts人妖一区二区| 天天色综合天天| 国产精品麻豆视频| 日韩女同互慰一区二区| 91丨porny丨户外露出| 免费成人av资源网| 亚洲美女视频在线观看| 久久久不卡网国产精品一区| 欧美综合欧美视频| 不卡一区在线观看| 紧缚奴在线一区二区三区| 亚洲综合免费观看高清在线观看| 久久精品视频免费| 欧美一区日韩一区| 日本电影欧美片| 成人听书哪个软件好|