Author: Bas Hamstra
Date: 16:11:09 09/19/99
Go up one level in this thread
On September 19, 1999 at 18:06:20, Nicolas Carrasco wrote:
>Dear Guys,
>
>I have changed TSCP main.c file in order to be Winboard compatible, it can play
>: HUMAN-TSCP and TSCP-HUMAN, but can“t play ANY-engine VS TSCP and TSCP VS
>ANY-engine.
>
>Do u know why?
I'm not sure. If you can play comp vs human and vice versa in Winboard normally
I think it should be able to do comp-comp too. Did you start Winboard with the
right parameters? -fcp and -scp for FirstChessProgram and SecondChessProgam?
(it's a while ago, but doesn't Winboard require this format for a move:
"1. e2e4" ? That's not what it looks like in the posted code)
Regards,
Bas Hamstra.
>Please take a look:
>
>/////////////////////////////MODIFIED VERSION OF ORIGINAL main.c TSCP//////////
>#include <stdio.h>
>#include <stdlib.h>
>#include <string.h>
>#include "defs.h"
>#include "data.h"
>#include "protos.h"
>
>
>/* main is basically an infinite loop that either calls
> think() when it's the computer's turn to move or prompts
> the user for a command (and deciphers it). */
>
>void main(void)
>{
> int i,computer_side,from,to;
> char s[256];
> BOOL found;
>
> setbuf(stdout, NULL);
> setbuf(stdin, NULL);
>
> printf("\n");
> printf("Tom Kerrigan's Simple Chess Program (TSCP)\n");
> printf("version 1.3, 11/11/98\n");
> printf("\n");
> printf("'help' displays a list of commands.\n");
> printf("\n");
> init();
> gen();
> computer_side=EMPTY;
> for(;;) {
> if(side==computer_side) { /* computer's turn */
> think();
> makemove(pv[0][0].b);
>
> printf("move
>%c%c%c%c\n",FILE(pv[0][0].b.from)+'a',8-RANK(pv[0][0].b.from)+'0',FILE(pv[0][0].b.to)+'a',8-RANK(pv[0][0].b.to)+'0');
> ply=0;
> gen();
> continue;
> }
>
> /* get user input */
> printf("tscp> ");
> scanf("%s",s);
> if(!strcmp(s,"quit")) {
> printf("Share and enjoy!\n");
> exit(0);
> }
> if(!strcmp(s,"black")) {
> computer_side=LIGHT;
> continue;
> }
> if(!strcmp(s,"white")) {
> computer_side=DARK;
> continue;
> }
> if(!strcmp(s,"new")) {
> computer_side=EMPTY;
> init();
> continue;
> }
> if(!strcmp(s,"d")) {
> print_board();
> continue;
> }
> if(!strcmp(s,"help")) {
> printf("white - oponent to move, TSCP is black\n");
> printf("black - oponent to move, TSCP is white\n");
> printf("new - starts a new game\n");
> printf("d - display the board\n");
> printf("quit - exit the program\n");
> printf("Enter moves in coordinate notation, e.g., e2e4, e7e8Q\n");
> continue;
> }
>
> /* maybe the user entered a move? */
> from=s[0]-'a';
> from+=8*(8-(s[1]-'0'));
> to=s[2]-'a';
> to+=8*(8-(s[3]-'0'));
>
> /* loop through the moves to see if it's legal */
> found=FALSE;
> for(i=0;i<gen_end[ply];i++)
> if(gen_dat[i].m.b.from==from&&gen_dat[i].m.b.to==to) {
> found=TRUE;
>
> /* get the promotion piece right */
> if(gen_dat[i].m.b.bits&32)
> switch(s[4]) {
> case 'N': break;
> case 'B': i+=1; break;
> case 'R': i+=2; break;
> default: i+=3; break;
> }
> break;
> }
> if(!found||!makemove(gen_dat[i].m.b))
> ;//printf("Illegal move.\n");
> else
> computer_side = side;
> ply=0;
> gen();
> }
>}
>
>
>/* print_board prints the board (duh) :) */
>
>void print_board(void)
>{
> int i;
>
> printf("\n8 ");
> for(i=0;i<64;i++) {
> switch(color[i]) {
> case EMPTY: printf(" ."); break;
> case LIGHT: printf(" %c",piece_char[piece[i]]); break;
> case DARK: printf(" %c",piece_char[piece[i]]+('a'-'A')); break;
> }
> if((i+1)%8==0&&i!=63)
> printf("\n%d ",7-RANK(i));
> }
> printf("\n\n a b c d e f g h\n\n");
>}
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.