diff options
Diffstat (limited to 'gnu/games/chess/uxdsp.c')
-rw-r--r-- | gnu/games/chess/uxdsp.c | 936 |
1 files changed, 0 insertions, 936 deletions
diff --git a/gnu/games/chess/uxdsp.c b/gnu/games/chess/uxdsp.c deleted file mode 100644 index 0973b693e0b..00000000000 --- a/gnu/games/chess/uxdsp.c +++ /dev/null @@ -1,936 +0,0 @@ -/* - ALPHA interface for CHESS - - Revision: 4-25-88 - - Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc. - Copyright (c) 1988 John Stanback - - This file is part of CHESS. - - CHESS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY. No author or distributor - accepts responsibility to anyone for the consequences of using it - or for whether it serves any particular purpose or works at all, - unless he says so in writing. Refer to the CHESS General Public - License for full details. - - Everyone is granted permission to copy, modify and redistribute - CHESS, but only under the conditions described in the - CHESS General Public License. A copy of this license is - supposed to have been given to you along with CHESS so you - can know your rights and responsibilities. It should be in a - file named COPYING. Among other things, the copyright notice - and this notice must be preserved on all copies. -*/ - -#ifndef lint -static char rcsid[] = "$Id: uxdsp.c,v 1.2 1996/06/02 19:51:42 tholo Exp $"; -#endif /* not lint */ - -#include <stdio.h> -#include <ctype.h> -#include <sys/param.h> -#include <sys/times.h> -#include <sys/file.h> -#include <curses.h> -#include <signal.h> -#include "gnuchess.h" -#ifdef NEWMOVE -#include "move.h" -#endif -#include "pathnames.h" - -struct tms tmbuf1,tmbuf2; -void TerminateSearch(),Die(); - -#define scanz fflush(stdout),scanw -#define printz printw - - -Initialize() -{ - signal(SIGINT,Die); signal(SIGQUIT,Die); - initscr(); - crmode(); -} - - -ExitChess() -{ - nocrmode(); - endwin(); - exit(0); -} - - -void -Die() -{ -char s[80]; - signal(SIGINT,SIG_IGN); - signal(SIGQUIT,SIG_IGN); - ShowMessage("Abort? "); - scanz("%s",s); - if (strcmp(s,"yes") == 0) ExitChess(); - signal(SIGINT,Die); signal(SIGQUIT,Die); -} - - -void -TerminateSearch() -{ - signal(SIGINT,SIG_IGN); - signal(SIGQUIT,SIG_IGN); - timeo = true; - bothsides = false; - signal(SIGINT,Die); signal(SIGQUIT,Die); -} - - -InputCommand() - -/* - Process the users command. If easy mode is OFF (the computer is - thinking on opponents time) and the program is out of book, then make - the 'hint' move on the board and call SelectMove() to find a response. - The user terminates the search by entering ^C (quit siqnal) before - entering a command. If the opponent does not make the hint move, then - set Sdepth to zero. -*/ - -{ -short ok,i,tmp; -long cnt,rate,t1,t2; -unsigned short mv; -char s[80]; - - ok = quit = false; - player = opponent; - ShowSidetomove(); - ft = 0; - if (hint > 0 && !easy && Book == NULL) - { - fflush(stdout); - time0 = time((long *)0); - algbr(hint>>8,hint & 0xFF,false); - strcpy(s,mvstr1); - tmp = epsquare; - if (VerifyMove(s,1,&mv)) - { - PromptForMove(); - SelectMove(computer,2); - VerifyMove(mvstr1,2,&mv); - if (Sdepth > 0) Sdepth--; - } - ft = time((time_t *)0) - time0; - epsquare = tmp; - } - - signal(SIGINT,Die); signal(SIGQUIT,Die); - while (!(ok || quit)) - { - PromptForMove(); - scanz("%s",s); - player = opponent; - ok = VerifyMove(s,0,&mv); - if (ok && mv != hint) - { - Sdepth = 0; - ft = 0; - } - - if (strcmp(s,"bd") == 0) - { - ClrScreen(); - UpdateDisplay(0,0,1,0); - } - if (strcmp(s,"quit") == 0) quit = true; - if (strcmp(s,"post") == 0) post = !post; - if (strcmp(s,"edit") == 0) EditBoard(); - if (strcmp(s,"go") == 0) ok = true; - if (strcmp(s,"help") == 0) help(); - if (strcmp(s,"force") == 0) force = !force; - if (strcmp(s,"book") == 0) Book = NULL; - if (strcmp(s,"undo") == 0 && GameCnt >= 0) Undo(); - if (strcmp(s,"new") == 0) NewGame(); - if (strcmp(s,"list") == 0) ListGame(); - if (strcmp(s,"level") == 0) SelectLevel(); - if (strcmp(s,"hash") == 0) hashflag = !hashflag; - if (strcmp(s,"beep") == 0) beepit = !beepit; - if (strcmp(s,"Awindow") == 0) ChangeAlphaWindow(); - if (strcmp(s,"Bwindow") == 0) ChangeBetaWindow(); - if (strcmp(s,"hint") == 0) GiveHint(); - if (strcmp(s,"both") == 0) - { - bothsides = !bothsides; - Sdepth = 0; - SelectMove(opponent,1); - ok = true; - } - if (strcmp(s,"reverse") == 0) - { - reverse = !reverse; - ClrScreen(); - UpdateDisplay(0,0,1,0); - } - if (strcmp(s,"switch") == 0) - { - computer = otherside[computer]; - opponent = otherside[opponent]; - force = false; - Sdepth = 0; - ok = true; - } - if (strcmp(s,"white") == 0) - { - computer = white; opponent = black; - ok = true; force = false; - Sdepth = 0; - } - if (strcmp(s,"black") == 0) - { - computer = black; opponent = white; - ok = true; force = false; - Sdepth = 0; - } - if (strcmp(s,"remove") == 0 && GameCnt >= 1) - { - Undo(); Undo(); - } - if (strcmp(s,"get") == 0) GetGame(); - if (strcmp(s,"save") == 0) SaveGame(); - if (strcmp(s,"depth") == 0) ChangeSearchDepth(); - if (strcmp(s,"random") == 0) dither = 6; - if (strcmp(s,"easy") == 0) easy = !easy; - if (strcmp(s,"contempt") == 0) SetContempt(); - if (strcmp(s,"xwndw") == 0) ChangeXwindow(); - if (strcmp(s,"test") == 0) - { - t1 = time(0); - cnt = 0; - for (i = 0; i < 10000; i++) - { - MoveList(opponent,2); - cnt += TrPnt[3] - TrPnt[2]; - } - t2 = time(0); - rate = cnt / (t2-t1); - gotoXY(50,24); - printz("cnt= %ld rate= %ld",cnt,rate); - ClrEoln(); - } - if (strcmp(s,"p") == 0) ShowPostnValues(); - if (strcmp(s,"debug") == 0) DoDebug(); - } - - ClearMessage(); - ElapsedTime(1); - if (force) - { - computer = opponent; opponent = otherside[computer]; - } - (void) times(&tmbuf1); - signal(SIGINT,TerminateSearch); signal(SIGQUIT,TerminateSearch); -} - - -EditBoard() - -/* - Set up a board position. Pieces are entered by typing the piece - followed by the location. For example, Nf3 will place a knight on - square f3. -*/ - -{ -short a,r,c,sq; -char s[80]; - - ClrScreen(); - UpdateDisplay(0,0,1,0); - gotoXY(50,2); printz(". Exit to main"); - gotoXY(50,3); printz("# Clear board"); - gotoXY(49,5); printz("Enter piece & location: "); - a = white; - do - { - gotoXY(73,5); ClrEoln(); scanz("%s",s); - if (s[0] == '#') - { - for (sq = 0; sq < 64; sq++) - { - board[sq] = no_piece; color[sq] = neutral; - } - UpdateDisplay(0,0,1,0); - } - if (s[0] == 'c' || s[0] == 'C') a = otherside[a]; - c = s[1]-'a'; r = s[2]-'1'; - if ((c >= 0) && (c < 8) && (r >= 0) && (r < 8)) - { - sq = locn[r][c]; - color[sq] = a; - if (s[0] == 'p') board[sq] = pawn; - else if (s[0] == 'n') board[sq] = knight; - else if (s[0] == 'b') board[sq] = bishop; - else if (s[0] == 'r') board[sq] = rook; - else if (s[0] == 'q') board[sq] = queen; - else if (s[0] == 'k') board[sq] = king; - else { board[sq] = no_piece; color[sq] = neutral; } - DrawPiece(sq); - } - } - while (s[0] != '.'); - if (board[4] != king) kingmoved[white] = 10; - if (board[60] != king) kingmoved[black] = 10; - GameCnt = -1; Game50 = 0; Sdepth = 0; - InitializeStats(); - ClrScreen(); - UpdateDisplay(0,0,1,0); -} - - -help() -{ - ClrScreen(); - gotoXY(28,1); printz("CHESS command summary"); - gotoXY(1,3); printz("g1f3 move from g1 to f3"); - gotoXY(1,4); printz("nf3 move knight to f3"); - gotoXY(1,5); printz("o-o castle king side"); - gotoXY(1,6); printz("o-o-o castle queen side"); - gotoXY(1,7); printz("edit edit board"); - gotoXY(1,8); printz("switch sides with computer"); - gotoXY(1,9); printz("white computer plays white"); - gotoXY(1,10); printz("black computer plays black"); - gotoXY(1,11); printz("reverse board display"); - gotoXY(1,12); printz("both computer match"); - gotoXY(1,13); printz("random randomize play"); - gotoXY(1,14); printz("undo undo last move"); - gotoXY(42,3); printz("level change level"); - gotoXY(42,4); printz("depth set search depth"); - gotoXY(42,5); printz("post principle variation"); - gotoXY(42,6); printz("hint suggest a move"); - gotoXY(42,7); printz("bd redraw board"); - gotoXY(42,8); printz("force enter game moves"); - gotoXY(42,9); printz("list game to chess.lst"); - gotoXY(42,10); printz("save game to file"); - gotoXY(42,11); printz("get game from file"); - gotoXY(42,12); printz("new start new game"); - gotoXY(42,13); printz("quit exit CHESS"); - gotoXY(10,21); printz("Computer: "); - if (computer == white) printz("WHITE"); else printz("BLACK"); - gotoXY(10,22); printz("Opponent: "); - if (opponent == white) printz("WHITE"); else printz("BLACK"); - gotoXY(10,23); printz("Level: %ld",Level," sec."); - gotoXY(10,24); printz("Easy mode: "); - if (easy) printz("ON"); else printz("OFF"); - gotoXY(40,21); printz("Depth: %d",MaxSearchDepth); - gotoXY(40,22); printz("Random: "); - if (dither) printz("ON"); else printz("OFF"); - gotoXY(40,23); printz("Transposition table: "); - if (hashflag) printz("ON"); else printz("OFF"); - refresh(); - while (getchar() != 27); - ClrScreen(); - UpdateDisplay(0,0,1,0); -} - - -ShowDepth(ch) -char ch; -{ - gotoXY(50,4); printz("Depth= %d%c ",Sdepth,ch); ClrEoln(); -} - - -ShowResults(score,bstline,ch) -short score; -unsigned short bstline[]; -char ch; -{ -short d,e,ply; - if (post && player == computer) - { - e = lpost; - gotoXY(50,5); printz("Score= %d",score); ClrEoln(); - d = 8; gotoXY(50,d); ClrEoln(); - for (ply = 1; bstline[ply] > 0; ply++) - { - algbr(bstline[ply] >> 8,bstline[ply] & 0xFF,false); - if (ply == 5 || ply == 9 || ply == 13 || ply == 17) - { - gotoXY(50,++d); ClrEoln(); - } - printz("%5s ",mvstr1); - } - ClrEoln(); - lpost = d; - while (++d <= e) - { - gotoXY(50,d); ClrEoln(); - } - } -} - - -SearchStartStuff(side) -short side; -{ -short i; - signal(SIGINT,TerminateSearch); signal(SIGQUIT,TerminateSearch); - if (player == computer) - for (i = 5; i < 14; i++) - { - gotoXY(50,i); ClrEoln(); - } -} - - -OutputMove() -{ - if (root->flags & epmask) UpdateDisplay(0,0,1,0); - else UpdateDisplay(root->f,root->t,0,root->flags & cstlmask); - gotoXY(50,17); printz("My move is: %s",mvstr1); - if (beepit) putchar(7); - ClrEoln(); - - gotoXY(50,24); - if (root->flags & draw) printz("Draw game!"); - else if (root->score == -9999) printz("opponent mates!"); - else if (root->score == 9998) printz("computer mates!"); - else if (root->score < -9000) printz("opponent will soon mate!"); - else if (root->score > 9000) printz("computer will soon mate!"); - ClrEoln(); - - if (post) - { - gotoXY(50,22); printz("Nodes= %6ld",NodeCnt); ClrEoln(); - gotoXY(50,23); printz("Nodes/Sec= %4ld",evrate); ClrEoln(); - } -} - - -ElapsedTime(iop) - -/* - Determine the time that has passed since the search was started. If - the elapsed time exceeds the target (ResponseTime+ExtraTime) then set - timeout to true which will terminate the search. -*/ - -short iop; -{ - et = time((time_t *)0) - time0; - if (et < 0) et = 0; - ETnodes += 50; - if (et > et0 || iop == 1) - { - if (et > ResponseTime+ExtraTime && Sdepth > 1) timeo = true; - et0 = et; - if (iop == 1) - { - time0 = time((time_t *)0); et0 = 0; - } - (void) times(&tmbuf2); - cputimer = 100*(tmbuf2.tms_utime - tmbuf1.tms_utime) / HZ; - if (cputimer > 0) evrate = (100*NodeCnt)/(cputimer+100*ft); - else evrate = 0; - ETnodes = NodeCnt + 50; - UpdateClocks(); - } -} - - -UpdateClocks() -{ -short m,s; - m = et/60; s = (et - 60*m); - if (TCflag) - { - m = (TimeControl.clock[player] - et) / 60; - s = TimeControl.clock[player] - et - 60*m; - } - if (m < 0) m = 0; - if (s < 0) s = 0; - if (player == white) - if (reverse) gotoXY(20,2); else gotoXY(20,23); - else - if (reverse) gotoXY(20,23); else gotoXY(20,2); - printz("%d:%2d ",m,s); - if (post) - { - gotoXY(50,22); printz("Nodes= %6ld",NodeCnt); - gotoXY(50,23); printz("Nodes/Sec= %4ld",evrate); - } - refresh(); -} - - - -SetTimeControl() -{ - if (TCflag) - { - TimeControl.moves[white] = TimeControl.moves[black] = TCmoves; - TimeControl.clock[white] = TimeControl.clock[black] = 60*(long)TCminutes; - } - else - { - TimeControl.moves[white] = TimeControl.moves[black] = 0; - TimeControl.clock[white] = TimeControl.clock[black] = 0; - Level = 60*(long)TCminutes; - } - et = 0; - ElapsedTime(1); -} - - -gotoXY(x,y) -short x,y; -{ - move(y-1,x-1); -} - - -ClrScreen() -{ - clear(); refresh(); -} - - -ClrEoln() -{ - clrtoeol(); refresh(); -} - - -DrawPiece(sq) -short sq; -{ -short r,c; char x; - if (reverse) r = 7-row[sq]; else r = row[sq]; - if (reverse) c = 7-column[sq]; else c = column[sq]; - if (color[sq] == black) x = '*'; else x = ' '; - gotoXY(5+5*c,5+2*(7-r)); printz("%c%c ",x,pxx[board[sq]]); -} - - -UpdateDisplay(f,t,flag,iscastle) -short f,t,flag,iscastle; -{ -short i,l,z; - if (flag) - { - gotoXY(56,2); printz("CHESS"); - i = 3; - gotoXY(3,++i); - printz("|----|----|----|----|----|----|----|----|"); - while (i<19) - { - gotoXY(1,++i); - if (reverse) z = (i/2)-1; else z = 10-(i/2); - printz("%d | | | | | | | | |",z); - gotoXY(3,++i); - if (i < 19) - printz("+----+----+----+----+----+----+----+----+"); - } - printz("|----|----|----|----|----|----|----|----|"); - gotoXY(3,21); - if (reverse) printz(" h g f e d c b a"); - else printz(" a b c d e f g h"); - if (reverse) gotoXY(5,23); else gotoXY(5,2); - if (computer == black) printz("Computer"); else printz("Human "); - if (reverse) gotoXY(5,2); else gotoXY(5,23); - if (computer == white) printz("Computer"); else printz("Human "); - for (l = 0; l < 64; l++) DrawPiece(l); - } - else - { - DrawPiece(f); DrawPiece(t); - if (iscastle) - if (t > f) - { DrawPiece(f+3); DrawPiece(t-1); } - else - { DrawPiece(f-4); DrawPiece(t+1); } - } - refresh(); -} - - -GetOpenings() - -/* - Read in the Opening Book file and parse the algebraic notation for a - move into an unsigned integer format indicating the from and to - square. Create a linked list of opening lines of play, with - entry->next pointing to the next line and entry->move pointing to a - chunk of memory containing the moves. More Opening lines of up to 256 - half moves may be added to gnuchess.book. -*/ - -{ -FILE *fd; -int c,i,j,side; -struct BookEntry *entry; -unsigned short mv,*mp,tmp[100]; - - if ((fd = fopen(_PATH_CHESSBOOK,"r")) != NULL) - { - Book = NULL; - i = 0; side = white; - while ((c = parse(fd,&mv,side)) >= 0) - if (c == 1) - { - tmp[++i] = mv; - side = otherside[side]; - } - else if (c == 0 && i > 0) - { - entry = (struct BookEntry *)malloc(sizeof(struct BookEntry)); - mp = (unsigned short *)malloc((i+1)*sizeof(unsigned short)); - entry->mv = mp; - entry->next = Book; - Book = entry; - for (j = 1; j <= i; j++) *(mp++) = tmp[j]; - *mp = 0; - i = 0; side = white; - } - fclose(fd); - } - else - { - fprintf(stderr, "\nchess: can't read %s.\n", _PATH_CHESSBOOK); - exit(1); - } -} - - -int parse(fd,mv,side) -FILE *fd; -unsigned short *mv; -short side; -{ -int c,i,r1,r2,c1,c2; -char s[100]; - while ((c = getc(fd)) == ' '); - i = 0; s[0] = c; - while (c != ' ' && c != '\n' && c != EOF) s[++i] = c = getc(fd); - s[++i] = '\0'; - if (c == EOF) return(-1); - if (s[0] == '!' || i < 3) - { - while (c != '\n' && c != EOF) c = getc(fd); - return(0); - } - if (s[4] == 'o') - if (side == black) *mv = 0x3C3A; else *mv = 0x0402; - else if (s[0] == 'o') - if (side == black) *mv = 0x3C3E; else *mv = 0x0406; - else - { - c1 = s[0] - 'a'; r1 = s[1] - '1'; - c2 = s[2] - 'a'; r2 = s[3] - '1'; - *mv = (locn[r1][c1]<<8) + locn[r2][c2]; - } - return(1); -} - - -GetGame() -{ -FILE *fd; -char fname[40]; -int c; -short sq; -unsigned short m; - - ShowMessage("File name: "); - scanz("%s",fname); - if (fname[0] == '\0') strcpy(fname,"chess.000"); - if ((fd = fopen(fname,"r")) != NULL) - { - fscanf(fd,"%hd%hd%hd",&computer,&opponent,&Game50); - fscanf(fd,"%hd%hd%hd%hd", - &castld[white],&castld[black], - &kingmoved[white],&kingmoved[black]); - fscanf(fd,"%hd%hd",&TCflag,&OperatorTime); - fscanf(fd,"%ld%ld%hd%hd", - &TimeControl.clock[white],&TimeControl.clock[black], - &TimeControl.moves[white],&TimeControl.moves[black]); - for (sq = 0; sq < 64; sq++) - { - fscanf(fd,"%hd",&m); - board[sq] = (m >> 8); color[sq] = (m & 0xFF); - if (color[sq] == 0) color[sq] = neutral; else --color[sq]; - } - GameCnt = -1; c = '?'; - while (c != EOF) - { - ++GameCnt; - c = fscanf(fd,"%hd%hd%hd%ld%hd%hd%hd",&GameList[GameCnt].gmove, - &GameList[GameCnt].score,&GameList[GameCnt].depth, - &GameList[GameCnt].nodes,&GameList[GameCnt].time, - &GameList[GameCnt].piece,&GameList[GameCnt].color); - if (GameList[GameCnt].color == 0) GameList[GameCnt].color = neutral; - else --GameList[GameCnt].color; - } - GameCnt--; - if (TimeControl.clock[white] > 0) TCflag = true; - computer--; opponent--; - } - fclose(fd); - InitializeStats(); - UpdateDisplay(0,0,1,0); - Sdepth = 0; -} - - -SaveGame() -{ -FILE *fd; -char fname[40]; -short sq,i,c; - - ShowMessage("File name: "); - scanz("%s",fname); - - if (fname[0] == '\0' || access(fname,W_OK) == -1) strcpy(fname,"chess.000"); - fd = fopen(fname,"w"); - fprintf(fd,"%d %d %d\n",computer+1,opponent+1,Game50); - fprintf(fd,"%d %d %d %d\n", - castld[white],castld[black],kingmoved[white],kingmoved[black]); - fprintf(fd,"%d %d\n",TCflag,OperatorTime); - fprintf(fd,"%ld %ld %d %d\n", - TimeControl.clock[white],TimeControl.clock[black], - TimeControl.moves[white],TimeControl.moves[black]); - for (sq = 0; sq < 64; sq++) - { - if (color[sq] == neutral) c = 0; else c = color[sq]+1; - fprintf(fd,"%d\n",256*board[sq] + c); - } - for (i = 0; i <= GameCnt; i++) - { - if (GameList[i].color == neutral) c = 0; - else c = GameList[i].color + 1; - fprintf(fd,"%d %d %d %ld %d %d %d\n", - GameList[i].gmove,GameList[i].score,GameList[i].depth, - GameList[i].nodes,GameList[i].time, - GameList[i].piece,c); - } - fclose(fd); -} - - -ListGame() -{ -FILE *fd; -short i,f,t; - fd = fopen("chess.lst","w"); - fprintf(fd,"\n"); - fprintf(fd," score depth nodes time "); - fprintf(fd," score depth nodes time\n"); - for (i = 0; i <= GameCnt; i++) - { - f = GameList[i].gmove>>8; t = (GameList[i].gmove & 0xFF); - algbr(f,t,false); - if ((i % 2) == 0) fprintf(fd,"\n"); else fprintf(fd," "); - fprintf(fd,"%5s %5d %2d %6ld %5d",mvstr1, - GameList[i].score,GameList[i].depth, - GameList[i].nodes,GameList[i].time); - } - fprintf(fd,"\n\n"); - fclose(fd); -} - - -Undo() - -/* - Undo the most recent half-move. -*/ - -{ -short f,t; - f = GameList[GameCnt].gmove>>8; - t = GameList[GameCnt].gmove & 0xFF; - if (board[t] == king && distance(t,f) > 1) - castle(GameList[GameCnt].color,f,t,2); - else - { - board[f] = board[t]; color[f] = color[t]; - board[t] = GameList[GameCnt].piece; - color[t] = GameList[GameCnt].color; - if (board[f] == king) --kingmoved[color[f]]; - } - if (TCflag) ++TimeControl.moves[color[f]]; - GameCnt--; mate = false; Sdepth = 0; - UpdateDisplay(0,0,1,0); - InitializeStats(); -} - - -ShowMessage(s) -char *s; -{ - gotoXY(50,24); printz("%s",s); ClrEoln(); -} - -ClearMessage() -{ - gotoXY(50,24); ClrEoln(); -} - -ShowSidetomove() -{ - gotoXY(50,14); - if (player == white) printz("%2d: WHITE",1+(GameCnt+1)/2); - else printz("%2d: BLACK",1+(GameCnt+1)/2); - ClrEoln(); -} - -PromptForMove() -{ - gotoXY(50,19); printz("Your move is? "); ClrEoln(); -} - -ShowCurrentMove(pnt,f,t) -short pnt,f,t; -{ - algbr(f,t,false); - gotoXY(50,7); printz("(%2d) %4s",pnt,mvstr1); -} - -ChangeAlphaWindow() -{ - ShowMessage("window: "); - scanz("%hd",&Awindow); -} - -ChangeBetaWindow() -{ - ShowMessage("window: "); - scanz("%hd",&Bwindow); -} - -GiveHint() -{ -char s[40]; - algbr((short)(hint>>8),(short)(hint & 0xFF),false); - strcpy(s,"try "); - strcat(s,mvstr1); - ShowMessage(s); -} - -ChangeSearchDepth() -{ - ShowMessage("depth= "); - scanz("%hd",&MaxSearchDepth); -} - -SetContempt() -{ - ShowMessage("contempt= "); - scanz("%hd",&contempt); -} - -ChangeXwindow() -{ - ShowMessage("xwndw= "); - scanz("%hd",&xwndw); -} - - -SelectLevel() -{ - ClrScreen(); - gotoXY(32,2); printz("CHESS"); - gotoXY(20,4); printz(" 1. 60 moves in 5 minutes"); - gotoXY(20,5); printz(" 2. 60 moves in 15 minutes"); - gotoXY(20,6); printz(" 3. 60 moves in 30 minutes"); - gotoXY(20,7); printz(" 4. 40 moves in 30 minutes"); - gotoXY(20,8); printz(" 5. 40 moves in 60 minutes"); - gotoXY(20,9); printz(" 6. 40 moves in 120 minutes"); - gotoXY(20,10); printz(" 7. 40 moves in 240 minutes"); - gotoXY(20,11); printz(" 8. 1 move in 15 minutes"); - gotoXY(20,12); printz(" 9. 1 move in 60 minutes"); - gotoXY(20,13); printz("10. 1 move in 600 minutes"); - - OperatorTime = 0; TCmoves = 60; TCminutes = 5; - - gotoXY(20,17); printz("Enter Level: "); - refresh(); - scanz("%ld",&Level); - switch (Level) - { - case 1 : TCmoves = 60; TCminutes = 5; break; - case 2 : TCmoves = 60; TCminutes = 15; break; - case 3 : TCmoves = 60; TCminutes = 30; break; - case 4 : TCmoves = 40; TCminutes = 30; break; - case 5 : TCmoves = 40; TCminutes = 60; break; - case 6 : TCmoves = 40; TCminutes = 120; break; - case 7 : TCmoves = 40; TCminutes = 240; break; - case 8 : TCmoves = 1; TCminutes = 15; break; - case 9 : TCmoves = 1; TCminutes = 60; break; - case 10 : TCmoves = 1; TCminutes = 600; break; - } - - TCflag = (TCmoves > 1); - SetTimeControl(); - ClrScreen(); - UpdateDisplay(0,0,1,0); -} - - -ShowPostnValues() -{ -short i,r,c; - ExaminePosition(); - for (i = 0; i < 64; i++) - { - if (reverse) r = 7-row[i]; else r = row[i]; - if (reverse) c = 7-column[i]; else c = column[i]; - gotoXY(4+5*c,5+2*(7-r)); - c1 = color[i]; c2 = otherside[c1]; - PC1 = PawnCnt[c1]; PC2 = PawnCnt[c2]; - atk1 = atak[c1]; atk2 = atak[c2]; - if (color[i] == neutral) printz(" "); - else printz("%3d ",SqValue(i,opponent)); - } - ScorePosition(opponent,&i); - gotoXY(50,24); - printz("Score= %d",i); ClrEoln(); -} - - -DoDebug() -{ -short k,p,i,r,c,tp,tc; -char s[40]; - ExaminePosition(); - ShowMessage("Enter piece: "); - scanz("%s",s); - if (s[0] == 'w') k = white; else k = black; - if (s[1] == 'p') p = pawn; - else if (s[1] == 'n') p = knight; - else if (s[1] == 'b') p = bishop; - else if (s[1] == 'r') p = rook; - else if (s[1] == 'q') p = queen; - else if (s[1] == 'k') p = king; - else p = no_piece; - for (i = 0; i < 64; i++) - { - if (reverse) r = 7-row[i]; else r = row[i]; - if (reverse) c = 7-column[i]; else c = column[i]; - gotoXY(4+5*c,5+2*(7-r)); - tp = board[i]; tc = color[i]; - board[i] = p; color[i] = k; - c1 = k; c2 = otherside[c1]; - PC1 = PawnCnt[c1]; PC2 = PawnCnt[c2]; - atk1 = atak[c1]; atk2 = atak[c2]; - printz("%3d ",SqValue(i,opponent)); - board[i] = tp; color[i] = tc; - } - ScorePosition(opponent,&i); - gotoXY(50,24); - printz("Score= %d",i); ClrEoln(); -} |