Computer Chess Club Archives


Search

Terms

Messages

Subject: Stop me before I code again.

Author: Joe ODonnell

Date: 13:10:41 12/24/99






Iv run into a very frustrating problem with my chess program.

When compiled at work with  the latest cygnus gcc package on windows
95 the program

will work normally (for the stage its at) for at least 10 interactive
moves and then crash.

When compiled at home on madrake-rh 6 gcc 2.91.66 it will do the same
except the black rook

on square 64 disappears during the search process. If I replace the
'local number of moves on

the move list' variable(called nnn-line 212) to 10 it causes a carriage
return to be printed

instead of a blank or rook during the search phase.(My program prints
out the changing board  as it searches) Changing nnn to 20 leaves
a blank. nnn is declared as a local int and is assigned

from a pointer which gets its value from a generate moves function.
How is this happening and how can it be happening on one version of gcc
but not another?

   Perhaps a guru will find it amusing to answer this question
and ease my pain.

Another entertaining bug is that if you set the search depth to greater
then 2 (at line 198)

it searches for several minutes, the pawns start reproducing with each
other and then it

crashes. Yes, the attached code does currently look similar to a car
crash and any criticism would be appreciated.





 #include <stdio.h>
 main ()
 {
 /* Joe's bogus chess program 10/28/99 Joe O'Donnell jubal@doramail.com
*/

 int a,i,cd1,cd2,cd3,cd4, x, n, *depth, *nom, *side, sidev, nomv,
move_list[500];  int last_move[10], game_move_list[500], move[10],
best_move[10];  int depthv;
 float b;
 char c[5], p, p2;
 char board[64];



 /*Initialize board with piece placement*/
 move[1]=0;
 sidev=1;
 side=&sidev;
 nomv=1;
 nom=&nomv;
 depthv=1;
 depth=&depthv;
 last_move[1]=0;
 last_move[5]=0;

 for (a=0;a<=64;a=a+1)
 board[a]='.';
 board[1]='R';board[2]='N';board[3]='B';board[4]='Q';
 board[5]='K';board[6]='B';board[7]='N';board[8]='R';
 for (a=9;a<=16;a=a+1)
 board[a]='P';
 board[64]='r';board[63]='n';board[62]='b';board[61]='k';
 board[60]='q';board[59]='b';board[58]='n';board[57]='r';
 for (a=49;a<=56;a=a+1)
 board[a]='p';

 display(board,0,0);


 /* Infinite loop-switching between waiting for user input */
 /* and searching for and making computer move*/
 /* (or carrying out commands like start new game and display board) =
 */

 printf("type ? for help\n");
 while (c[0] !='q'){ /*loop until receiving q for quit */
 printf("jbcp>");
 scanf("%s", c);

 if (c[0]=='?') { /* print help */
 printf("type x to display board\n");
 printf("enter move as coordinates (ex:e2e4)\n");
 printf("type q for quit\n");
 continue;
 }

 if (c[0]=='x'){ /*display board */
 display(board,0,0);
 continue;
 }

 if (c[0]=='m'){/*get and display move list*/
 get_moves(board, move_list, nom, side, x, n, last_move);
 for (x=0;x<(*nom)/5;x=x+1){
  printf(" %d-- ", x);
  for(n=1;n<=5;n=n+1){
 printf("%d ", move_list[(x*5)+n]);
 }
 printf(" \n");
 }
 printf(" \n");
 continue;
 }






 /* process human move coordinates */
 if (c[0]=='a') {cd1=1;}
 if (c[0]=='b') {cd1=2;}
 if (c[0]=='c') {cd1=3;}
 if (c[0]=='d') {cd1=4;}
 if (c[0]=='e') {cd1=5;}
 if (c[0]=='f') {cd1=6;}
 if (c[0]=='g') {cd1=7;}
 if (c[0]=='h') {cd1=8;}
 if (c[2]=='a') {cd3=1;}
 if (c[2]=='b') {cd3=2;}
 if (c[2]=='c') {cd3=3;}
 if (c[2]=='d') {cd3=4;}
 if (c[2]=='e') {cd3=5;}
 if (c[2]=='f') {cd3=6;}
 if (c[2]=='g') {cd3=7;}
 if (c[2]=='h') {cd3=8;}

 if (c[0]=='q') {
 continue;
 }

 /* make human move */
 if(*side==1){
 cd2=c[1]-48;
 cd4=c[3]-48;

 makemove(cd1,cd2,cd3,cd4,board);

 display(board,0,0);
 }
 *side=2;





 /***computer move***************************/
 if(*side==2){
  *side=1;
  search(board, last_move, nom, side, depth, move_list);
  make_move(last_move, board);
  printf("last move %d %d %d\n",last_move[1], last_move[2], last_move[9]);
  display(board,0,0);
 *side=1;

   }/*end computer move*/
 }/*END IN!=q*/

 exit (0); /*return to operating system */
 }

evaluate(board, move_list, nom)
int move_list[500], *nom;
char board[64];
{

 int x, n;
 char w;
 n=0;
 for(x=1;x<65;x=x+1){
 w=board[x];
 if(board[x]=='.'){
   continue;}
 if(w=='K'){
 n=n+10000;}
 if(w=='Q'){
 n=n+90;}
 if(w=='R'){
 n=n+50;}
 if(w=='N'){
   n=n+30;}
 if(w=='B'){
  n=n+30;}
 if(w=='P'){
 n=n+10;}

 if(w=='k'){
 n=n-10000;}
 if(w=='q'){
 n=n-90;}
 if(w=='r'){
 n=n-50;}
 if(w=='n'){
 n=n-30;}
 if(w=='b'){
 n=n-30;}
 if(w=='p'){
 n=n-10;}
 }

 return(n);

}/*end evaluate*/



/********************search****************************8*/
  search(board, last_move, nom, side, depth, move_list)
  char board[64];
  int last_move[10], *nom, *side, *depth, move_list[500];
{

  int move_list2[500], x, n;
  int nnn;
  char board2[64];
  int last_move3[10], best_move[10], move[10];


   best_move[9]=0;

    printf("search nom %d\n",*nom);
    for(n=1;n<65;n=n+1){
   board2[n]=board[n];}


  if(*depth==2){/**if leaf node then evaluate**/
   last_move[9]=evaluate(board2,move_list,nom);
   printf("evaluate %d \n",last_move[9]);
   return(0);
     }

   if(*side==1){/*other side decides on move*/
    *side=2;}
    else {
     *side=1;}

     get_moves(board2, move_list2, nom, side, x, n, last_move);

     printf("nom %d \n",*nom);
     nnn=((*nom)/5)-1;

     for(x=0;x<nnn;x=x+1){

       printf("test \n");
     for(n=1;n<6;n=n+1) last_move3[n]=move_list2[x*5+n];


     printf("x %d *nom/5 %d nnn %d \n",x,*nom/5,nnn);
     printf("nnn %d \n",&nnn);
     make_move(last_move3, board2);
     printf("*nom %d nnn %d \n", *nom, nnn);
     display(board2,0,0);

    *depth=*depth+1;
     search(board2, last_move3, nom, side, depth, move_list2);
     *depth=*depth-1;
     if(*side==1){
       if(last_move3[9]>best_move[9]) {
     for(n=1;n<11;n=n+1) best_move[n]=last_move3[n];
       }
       }
     if(*side==2){
       if(last_move3[9]<best_move[9]){
         for(n=1;n<11;n=n+1){
          best_move[n]=last_move3[n];
       printf("bestmove=lastmove");
       }
      }
     }
    /*unmake move*/
     printf("Unmake move \n");

    move[1]=last_move3[2];
    move[2]=last_move3[1];
    move[3]=last_move3[3];
    move[4]=0;

    make_move(move,board2);
    move[1]=0;
    move[2]=last_move3[2];
    move[3]=last_move3[4];
    move[4]=0;
    make_move(move, board2);

    printf("test");
       }/*next move*/
     printf("return score \n");
      /* move list has now become a node and will return its score*/
     if(best_move[1]>64) {/*in case all moves where equal eval*/
       for(n=1;n<6;n=n+1) best_move[n]=last_move3[n];}

       if(*side==1){
        *side=2;}
       else{
        *side=1;}
        for(n=1;n<11;n=n+1){
         last_move[n]=best_move[n];}
        for(n=1;n<10;n=n+1) printf("lastmove %d \n",last_move[n]);
        printf("end of search \n");
         return(0);

        }/*end search*/

make_move(move, board)
int move[10];
char board[64];
{

 int q;
 char w,daconvert();

 printf("w %d q %d \n",&w,&q);

 printf("board[move[1]] %d \n",&board[move[1]]);
 printf("move[1] %d \n",move[1]);
 board[move[1]]='.';
q=move[3];
 board[move[2]]=daconvert(q);


 return(0);
 }

char daconvert(q)
int q;

{

 char w;
 printf("daconvert-q %d \n",&q);
 printf("daconvert-w %d \n",&w);
   if(q==1) w='K';

if(q==2) w='Q';
if(q==3) w='R';
if(q==4) w='N';
if(q==5) w='B';
if(q==6) w='P';
if(q==11) w='k';
if(q==12) w='q';
if(q==13) w='r';
if(q==14) w='n';
if(q==15) w='b';
if(q==16) w='p';
if(q==0) w='.';
return(w);
}










 display(board2,k,j)

 char board2[64];
 int j,k;
 {
 for (j=7;j>=0;j=j-1){
 for (k=1;k<=8;k=k+1) {
 printf("%c ", board2[j*8+k]);
 }
 printf("\n");
 }

 return(0);
 }






 makemove(cd1, cd2, cd3, cd4, board)
 /*make move */
 int cd1,cd2,cd3,cd4;
 char board[64];
 {
 char p,p2;
 p=board[((cd2-1)*8)+cd1];
 p2=board[((cd4-1)*8)+cd3];

 board[((cd4-1)*8)+cd3]=p;
 board[((cd2-1)*8)+cd1]='.';

 return (0);
 }


 get_moves(board3, move_list, nom, side, x, n, last_move)
  char board3[64];
  int *nom, *side, x, move_list[500], n, last_move[10];
{
  char board[64];
 int y,z,q;
 n=0;
 *nom=1;
 for(n=0;n<65;n=n+1) board[n]=board3[n];
 n=0;
 printf("here \n");
 printf("board %c \n",board[1]);

 if (*side==1) {/*white to move*/
  for(x=1;x<65;x=x+1){
    if (board[x]=='P'){ /*pawn moves************************************/
      if (board[x+8]=='.' && x+8<65){/*pawn makes 1 move ahead*/
      move_list[*nom]=x;
      move_list[*nom+1]=x+8;
      move_list[*nom+2]=6;
      move_list[*nom+3]=0;
      move_list[*nom+4]=0;/*0 is special code for normal move*/
      *nom=*nom+5;
     if (x<17){/*2 spaces on first move*/
      if (board[x+16]=='.'){
        move_list[*nom]=x;
        move_list[*nom+1]=x+16;
        move_list[*nom+2]=6;/* 6 is code for white pawn*/
        move_list[*nom+3]=0;/*0 is code for empty square*/
        move_list[*nom+4]=7;/*7 is special code for having made 2 space 1st
           move*/
        *nom=*nom+5;
       }
      }
      }
      /*pawn captures*/
       n=adconvert(board, x+7, n);
     if(n>10){/*pawn captures left*/
        printf("here");
       if(x!=1 && x!=9 && x!=17 && x!=25 && x!=33 && x!=49 && x!=57
        && x+7<65){/*make sure pawn is not on leftedg*/
         move_list[*nom]=x;
         move_list[*nom+1]=x+7;
         move_list[*nom+2]=adconvert(board, x, n);
         move_list[*nom+3]=adconvert(board, x+7, n);
         move_list[*nom+4]=8; /*special code for white capture*/
         *nom=*nom+5;
         n=0;
        }
       }
       n=adconvert(board, x+9, n);
        if(n>10){/*pawn captures right*/
     if(x!=8 && x!=16 && x!=24 && x!=32 && x!=40 && x!=48 && x!=56 && x!=64
        && x+9<65){
        move_list[*nom]=x;
        move_list[*nom+1]=x+9;
        move_list[*nom+2]=adconvert(board, x, n);
        move_list[*nom+3]=adconvert(board, x+9, n);
        move_list[*nom+4]=8;
        *nom=*nom+5;
        n=0;
       }
      }
       n=adconvert(board, x+1, n); /*pawn en passant capture right*/
        if(last_move[2]==x+1 && last_move[5]==7){
         move_list[*nom]=x;
         move_list[*nom+1]=x+9;
         move_list[*nom+2]=adconvert(board, x , n);
         move_list[*nom+3]=adconvert(board, x+1, n);
         move_list[*nom+4]=9;/*special code for en passant capture*/
         *nom=*nom+5;
         n=0;
        }
        n=adconvert(board, x-1, n); /*pawn en passant capture left*/
        if(last_move[2]==x-1 && last_move[5]==7){
         move_list[*nom]=x;
         move_list[*nom+1]=x+7;
         move_list[*nom+2]=6;
         move_list[*nom+3]=16;
         move_list[*nom+4]=9;
         *nom=*nom+5;
         n=0;
         }


     }/*end of pawn moves******************/
      /*Rook moves**************************************/
       if(board[x]=='R'){
        for(n=1;n<8;n=n+1){/*rook going right*/
         if(x+n==9 || x+n==17 || x+n==33 || x+n==41 || x+n==49 || x+n==57 ||
         x+n==65 || x+n==25){n=8;break;}/*rook hits right side of board*/
          if(board[x+n]=='.'){ /*rook moves*/
           move_list[*nom]=x;
           move_list[*nom+1]=x+n;
           move_list[*nom+2]=3;
           move_list[*nom+3]=0;
           move_list[*nom+4]=0;
           *nom=*nom+5;
            }
           q=adconvert(board, x+n, q);
           if(q>10){/*rook capture to right*/
            move_list[*nom]=x; move_list[*nom+1]=x+n;
            move_list[*nom+2]=3; move_list[*nom+3]=q;move_list[*nom+4]=8;
            *nom=*nom+5;
             }
           if(q!=0){/*if rook has either captured or been blocked*/
            n=8;}
           }/*end rook going right*/


            for(n=1;n<8;n=n+1){/*rook going left*****/
             if(x-n==8 || x-n==16 || x-n==24 || x-n==32 || x-n==40
             || x-n==48 || x-n==56 || x-n==64 || x==1){
              n=8;break;}/*rook hits left side of board*/
              if(board[x-n]=='.'){/*rook moves left*/
               move_list[*nom]=x;move_list[*nom+1]=x-n;
               move_list[*nom+2]=3;move_list[*nom+3]=0;move_list[*nom+4]=0;
                *nom=*nom+5;}
              q=adconvert(board, x-n, q);
               if(q>10){/*rook capture to left*/
                move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=3;
                move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
              if(q!=0){/*rook has either captured or blocked*/
               n=8;}
          }/*end rook going left*/


             for(n=8;n<57;n=n+8){/* rook moves forward*/
              if(x+n>64){/*rook hits front of board*/
                n=57;break;}
              if(board[x+n]=='.'){/*rook moves forward*/
               move_list[*nom]=x;move_list[*nom+1]=x+n;move_list[*nom+2]=3;
               move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
              q=adconvert(board, x+n, n);
              if(q>10){/*rook captures to front*/
               move_list[*nom]=x;move_list[*nom+1]=x+n;move_list[*nom+2]=3;
               move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
               if(q!=0){/*rook has either captured or blocked*/
                n=57;}
           }/*end rook moves forward*/
          for(n=8;n<57;n=n+8){/*rook moves backward*/
           if(x-n<1){/*rook hits back of board*/
            n=57;break;}
             if(board[x-n]=='.'){/*rookmoves backward*/
              move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=3;
              move_list[*nom+3]=0;move_list[*nom+4]=0l;*nom=*nom+5;}
             q=adconvert(board, x-n, n);
             if(q>10){/*rook captures backwards*/
              move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=3;
              move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
              if(q!=0){/*rook has captured or stopped*/
               n=57;break;}
             }/*end rook moves backward*/
              }/*end rook moves*/


         /********night moves**************/
     if(board[x]=='N'){
      if(x!=8 && x!=16 && x!=32 && x!=40 && x!=48 && x!=56
        && x!=64){/*knight move upper right*/
        if(x<49){/*N cant jump off board*/
         if(board[x+17]=='.'){
        move_list[*nom]=x;move_list[*nom+1]=x+17;move_list[*nom+2]=4;
        move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
        q=adconvert(board, x+17, n);
        if(q>10){/*knight capture upper right*/
         move_list[*nom]=x;move_list[*nom+1]=x+17;move_list[*nom+2]=4;
         move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
         }/*finish N upper right test


             /*N moves far right up*/
         if(x<57){/*fru test 1*/
         if(x!=7 && x!=15 && x!=23 && x!=31 && x!=39 && x!=47 && x!=55
          && x!=63){/*fru test2*/
         if(board[x+10]=='.'){
        move_list[*nom]=x;move_list[*nom+1]=x+10;move_list[*nom+2]=4;
        move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
        q=adconvert(board, x+10, n);
        if(q>10){/*knight capture upper right*/
         move_list[*nom]=x;move_list[*nom+1]=x+10;move_list[*nom+2]=4;
         move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
         }/*end fru test2*/
         }/*fru test1*/


         if(x>=17){/*lr test*/
         if(board[x-15]=='.'){/*N moves lower right*/
          move_list[*nom]=x;move_list[*nom+1]=x-15;move_list[*nom+2]=4;
          move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         q=adconvert(board,x-15,n);
         if(q>10){/*N captures lower right*/
          move_list[*nom]=x;move_list[*nom+1]=x-15;move_list[*nom+2]=4;
          move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
          }/*end lr test*/

         /*N move far right down*/
          if(x>=9){/*frd test1*/
          if(x!=7 && x!=15 && x!=23 && x!= 31 && x!=39 && x!=47 && x!=55
           && x!=63){/*frd test2*/
          if(board[x-6]=='.'){
        move_list[*nom]=x;move_list[*nom+1]=x-6;move_list[*nom+2]=4;
        move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
        q=adconvert(board, x-6, n);
        if(q>10){/*knight capture upper right*/
         move_list[*nom]=x;move_list[*nom+1]=x-6;move_list[*nom+2]=4;
         move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
         }/*end frd test2*/
         }/*end frd test1*/

         }/*end N moves upper right and lower right*/

       if(x!=1 && x!=9 && x!=17 && x!=25 && x!=33 && x!=41 && x!=49 && x!=57){
       /*N moves upper left*/
        if(x<=48){/*ul test*/
        if(board[x+15]=='.'){
         move_list[*nom]=x;move_list[*nom+1]=x+15;move_list[*nom+2]=4;
         move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
        q=adconvert(board, x+15, n);
        if(q>10){/*knight captures upper left*/
         move_list[*nom]=x;move_list[*nom+1]=x+15;move_list[*nom+2]=4;
         move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
         }/*end il test*/

         /*far upper left*/
         if(x<=56){/*ful test1*/
         if(x!=2 && x!=10 && x!= 18 && x!= 26 && x!=34 && x!=42 && x!= 50 &&
          x!=58){/*ful test2*/
        if(board[x+6]=='.'){
         move_list[*nom]=x;move_list[*nom+1]=x+6;move_list[*nom+2]=4;
         move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
        q=adconvert(board, x+6, n);
        if(q>10){/*knight captures upper left*/
         move_list[*nom]=x;move_list[*nom+1]=x+6;move_list[*nom+2]=4;
         move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
         }/*end ful test1*/

         }/*end ful test2*/

         if(x>=17){/*ll test*/
         if(board[x-17]=='.'){/*N moves lower left*/
          move_list[*nom]=x;move_list[*nom+1]=x-17;move_list[*nom+2]=4;
          move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         q=adconvert(board,x-17,n);
         if(q>10){/*N captures lower left*/
          move_list[*nom]=x;move_list[*nom+1]=x-17;move_list[*nom+2]=4;
          move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
          }/*end ll test*/

          /*lower far left */
           if(x!=2 && x!=10 && x!=18 && x!=26 && x!=34 && x!=42 && x!=50 &&
            x!=58){/*lfl test1*/
            if(x>=9){/*lfl test2*/
         if(board[x-10]=='.'){/*N moves lower left*/
          move_list[*nom]=x;move_list[*nom+1]=x-10;move_list[*nom+2]=4;
          move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         q=adconvert(board,x-10,n);
         if(q>10){/*N captures lower far left*/
          move_list[*nom]=x;move_list[*nom+1]=x-10;move_list[*nom+2]=4;
          move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
          }/*end lfl test2*/
          }/*end lfl test1*/

          }/* end N moves upper and lower left*/

      }/*end N moves****/

      /********************bishop moves*********************/


          if(board[x]=='B'){/*test for bishop*/
      /*bishop moves upper right***/
       for(n=1;n<8;n=n+1){
        q=(x+n+(n*8));
        if(q==9 || q==17 || q==25 || q==33 || q==41 || q==49 || q==57 ||
        q==65){/*bishop cant go off board*/
         n=8;break;}
        if(q>64){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=5;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z>10){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=5;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ur*/

         /*bishop moves lower right**/
         for(n=1;n<8;n=n+1){
        q=(x+n-(n*8));
        if(q==9 || q==17 || q==25 || q==33 || q==41 || q==49 || q==57 ||
        q==65){/*bishop cant go off board*/
         n=8;break;}
        if(q<1){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves lr*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=5;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z>10){/*b captures lr*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=5;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves lr*/

         /*bishop moves upper left*/
       for(n=1;n<8;n=n+1){
        q=(x-n+(n*8));
        if(q==16 || q==24 || q==32 || q==40 || q==48 || q==56 || q==64
          ){/*bishop cant go off board*/
         n=8;break;}
        if(q>64){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=5;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z>10){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=5;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ul*/

         /*bishop moves lower left*/
          for(n=1;n<8;n=n+1){
        q=(x-n-(n*8));
        if(q==16 || q==24 || q==32 || q==40 || q==48 || q==56 || q==64
         || q==8){/*bishop cant go off board*/
         n=8;break;}
        if(q<1){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=5;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z>10){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=5;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ll*/

     }/*end bishop moves***/


/*************queen moves*************/

                  if(board[x]=='Q'){/*test for bishop*/
      /*bishop moves upper right***/
       for(n=1;n<8;n=n+1){
        q=(x+n+(n*8));
        if(q==9 || q==17 || q==25 || q==33 || q==41 || q==49 || q==57 ||
        q==65){/*bishop cant go off board*/
         n=8;break;}
        if(q>64){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=2;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z>10){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=2;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ur*/

         /*bishop moves lower right**/
         for(n=1;n<8;n=n+1){
        q=(x+n-(n*8));
        if(q==9 || q==17 || q==25 || q==33 || q==41 || q==49 || q==57 ||
        q==65){/*bishop cant go off board*/
         n=8;break;}
        if(q<1){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves lr*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=2;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z>10){/*b captures lr*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=2;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves lr*/

         /*bishop moves upper left*/
       for(n=1;n<8;n=n+1){
        q=(x-n+(n*8));
        if(q==16 || q==24 || q==32 || q==40 || q==48 || q==56 || q==64
          ){/*bishop cant go off board*/
         n=8;break;}
        if(q>64){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=2;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z>10){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=2;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ul*/

         /*bishop moves lower left*/
          for(n=1;n<8;n=n+1){
        q=(x-n-(n*8));
        if(q==16 || q==24 || q==32 || q==40 || q==48 || q==56 || q==64
         || q==8){/*bishop cant go off board*/
         n=8;break;}
        if(q<1){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=2;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z>10){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=2;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ll*/

       /******queen as rook*****/

       for(n=1;n<8;n=n+1){/*rook going right*/
         if(x+n==9 || x+n==17 || x+n==33 || x+n==41 || x+n==49 || x+n==57 ||
         x+n==65 || x+n==25){n=8;break;}/*rook hits right side of board*/
          if(board[x+n]=='.'){ /*rook moves*/
           move_list[*nom]=x;
           move_list[*nom+1]=x+n;
           move_list[*nom+2]=2;
           move_list[*nom+3]=0;
           move_list[*nom+4]=0;
           *nom=*nom+5;
            }
           q=adconvert(board, x+n, q);
           if(q>10){/*rook capture to right*/
            move_list[*nom]=x; move_list[*nom+1]=x+n;
            move_list[*nom+2]=2; move_list[*nom+3]=q;move_list[*nom+4]=8;
            *nom=*nom+5;
             }
           if(q!=0){/*if rook has either captured or been blocked*/
            n=8;}
           }/*end rook going right*/


            for(n=1;n<8;n=n+1){/*rook going left*****/
             if(x-n==8 || x-n==16 || x-n==24 || x-n==32 || x-n==40
             || x-n==48 || x-n==56 || x-n==64 || x==1){
              n=8;break;}/*rook hits left side of board*/
              if(board[x-n]=='.'){/*rook moves left*/
               move_list[*nom]=x;move_list[*nom+1]=x-n;
               move_list[*nom+2]=2;move_list[*nom+3]=0;move_list[*nom+4]=0;
                *nom=*nom+5;}
              q=adconvert(board, x-n, q);
               if(q>10){/*rook capture to left*/
                move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=2;
                move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
              if(q!=0){/*rook has either captured or blocked*/
               n=8;}
          }/*end rook going left*/


             for(n=8;n<57;n=n+8){/* rook moves forward*/
              if(x+n>64){/*rook hits front of board*/
                n=57;break;}
              if(board[x+n]=='.'){/*rook moves forward*/
               move_list[*nom]=x;move_list[*nom+1]=x+n;move_list[*nom+2]=2;
               move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
              q=adconvert(board, x+n, n);
              if(q>10){/*rook captures to front*/
               move_list[*nom]=x;move_list[*nom+1]=x+n;move_list[*nom+2]=2;
               move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
               if(q!=0){/*rook has either captured or blocked*/
                n=57;}
           }/*end rook moves forward*/
          for(n=8;n<57;n=n+8){/*rook moves backward*/
           if(x-n<1){/*rook hits back of board*/
            n=57;break;}
             if(board[x-n]=='.'){/*rookmoves backward*/
              move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=2;
              move_list[*nom+3]=0;move_list[*nom+4]=0l;*nom=*nom+5;}
             q=adconvert(board, x-n, n);
             if(q>10){/*rook captures backwards*/
              move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=2;
              move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
              if(q!=0){/*rook has captured or stopped*/
               n=57;break;}
             }/*end rook moves backward*/

     }/*end queen moves***/

    /***king moves!!!:) ;)***/

        if(board[x]=='K'){/**king moves**/
         q=x+1;
         if(q!=9 || q!=17 || q!=25 || q!=33 || q!=41 || q!=49 || q!=57 ||
          q!=65){/*king moves right*/
           if(board[q]=='.'){/* moves r*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z>10){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}

         /*king moves upper right*/
          q=x+9;
          if(q<65){
           if(board[q]=='.'){/*k moves r*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z>10){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }
         /*king moves lower right*/
          q=x-7;
          if(q>7){
           if(board[q]=='.'){/*k moves r*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z>10){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }
            }/*end king moves right*/

           /**king moves left**/
           q=x-1;
          if(q!=8 && q!=16 && q!=24 && q!=32 && q!=40 && q!=48 && q!=56 &&
           q!=64){/*king cant jump off board*/
           if(board[q]=='.'){/*k moves l*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z>10){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}

             /*king moves upper left*/
           q=x+7;
           if(q<57){/*stay on board*/
           if(board[q]=='.'){/*k moves ul*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z>10){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }/*stay on board*/

         /*king moves lower left**/
           q=x-9;
           if(q>1){/*stay on board*/
           if(board[q]=='.'){/*k moves ll*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z>10){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }/*stay on board*/
            }/*end king moves left*/

          /**king moves forward**/
           q=x+8;
           if(q<64){/*stay on board*/
           if(board[q]=='.'){/*k moves ll*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z>10){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }/*stay on board*/

          /*king moves backward**/
           q=x-8;
           if(q>1){/*stay on board*/
           if(board[q]=='.'){/*k moves ll*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z>10){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=1;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }/*stay on board*/

           /*king castles right**code=9/
            if(x==5 && board[6]=='.' && board[7]=='.' && board[8]=='R'
             && last_move[7]!=5 && last_move[7]-10!=5){
            move_list[*nom]=x;move_list[*nom+1]=7;move_list[*nom+2=1;
            move_list[*nom+3]=3;move_list[*nom+4]=9;*nom=*nom+5;}

           /*king castles left**/
            if(x==5 && board[4]=='.' && board[3]=='.' && board[2]=='.' &&
             board[1]=='R' && last_move[7]!=10 && last_move[7]-5!=10){
             move_list[*nom]=x;move_list[*nom+1]=3;move_list[*nom+2]=1;
             move_list[*nom+3]=3;move_list[*nom+4]=9;*nom=*nom+5;}

            }/*end king moves*/

    }/*check 1 to 64 squares*/
   } /*whites turn*/


 /************blacks*******************************************
 **************turn*********************************************
****************************************************************
 **************************************************************/
   if(*side==2){
      printf("here is black");


     for(x=1;x<65;x=x+1){

    if (board[x]=='p'){ /*pawn moves************************************/
      if (board[x-8]=='.' && x-8>0){/*pawn makes 1 move ahead*/
      move_list[*nom]=x;
      move_list[*nom+1]=x-8;
      move_list[*nom+2]=16;
      move_list[*nom+3]=0;
      move_list[*nom+4]=0;/*0 is special code for normal move*/
      *nom=*nom+5;
     if (x>48){/*2 spaces on first move*/
      if (board[x-16]=='.'){
        move_list[*nom]=x;
        move_list[*nom+1]=x-16;
        move_list[*nom+2]=16;/* 6 is code for white pawn*/
        move_list[*nom+3]=0;/*0 is code for empty square*/
        move_list[*nom+4]=7;/*7 is special code for having made 2 space 1st
           move*/
        *nom=*nom+5;
       }
      }
      }
      /*pawn captures*/
       n=adconvert(board, x-9, n);
     if(n<10 && n>0){/*pawn captures left*/
       if(x!=1 && x!=9 && x!=17 && x!=25 && x!=33 && x!=49 && x!=57
        && x-9>0){/*make sure pawn is not on leftedg*/
         move_list[*nom]=x;
         move_list[*nom+1]=x-9;
         move_list[*nom+2]=adconvert(board, x, n);
         move_list[*nom+3]=adconvert(board, x-9, n);
         move_list[*nom+4]=8; /*special code for white capture*/
         *nom=*nom+5;
         n=0;
        }
       }
       n=adconvert(board, x-7, n);
        if(n<10 && n>0){/*pawn captures right*/
     if(x!=8 && x!=16 && x!=24 && x!=32 && x!=40 && x!=48 && x!=56 && x!=64
         && x-7>0){
        move_list[*nom]=x;
        move_list[*nom+1]=x-7;
        move_list[*nom+2]=adconvert(board, x, n);
        move_list[*nom+3]=adconvert(board, x-7, n);
        move_list[*nom+4]=8;
        *nom=*nom+5;
        n=0;
       }
      }
       n=adconvert(board, x+1, n); /*pawn en passant capture right*/
        if(last_move[5]==7 && last_move[2]==x+1){
         move_list[*nom]=x;
         move_list[*nom+1]=x-9;
         move_list[*nom+2]=adconvert(board, x , n);
         move_list[*nom+3]=adconvert(board, x+1, n);
         move_list[*nom+4]=9;/*special code for en passant capture*/
         *nom=*nom+5;
         n=0;
        }
        n=adconvert(board, x-1, n); /*pawn en passant capture left*/
        if(last_move[2]==x-1 && last_move[5]==7){
         move_list[*nom]=x;
         move_list[*nom+1]=x-7;
         move_list[*nom+2]=16;
         move_list[*nom+3]=6;
         move_list[*nom+4]=9;
         *nom=*nom+5;
         n=0;
         }


     }/*end of pawn moves******************/
      /*Rook moves**************************************/
       if(board[x]=='r'){
        for(n=1;n<8;n=n+1){/*rook going right*/
         if(x+n==9 || x+n==17 || x+n==33 || x+n==41 || x+n==49 || x+n==57 ||
         x+n==65 || x+n==25){n=8;break;}/*rook hits right side of board*/
          if(board[x+n]=='.'){ /*rook moves*/
           move_list[*nom]=x;
           move_list[*nom+1]=x+n;
           move_list[*nom+2]=13;
           move_list[*nom+3]=0;
           move_list[*nom+4]=0;
           *nom=*nom+5;
            }
           q=adconvert(board, x+n, q);
           if(q<10 && q>0){/*rook capture to right*/
            move_list[*nom]=x; move_list[*nom+1]=x+n;
            move_list[*nom+2]=13; move_list[*nom+3]=q;move_list[*nom+4]=8;
            *nom=*nom+5;
             }
           if(q!=0){/*if rook has either captured or been blocked*/
            n=8;}
           }/*end rook going right*/


            for(n=1;n<8;n=n+1){/*rook going left*****/
             if(x-n==8 || x-n==16 || x-n==24 || x-n==32 || x-n==40
             || x-n==48 || x-n==56 || x-n==64 || x==1){
              n=8;break;}/*rook hits left side of board*/
              if(board[x-n]=='.'){/*rook moves left*/
               move_list[*nom]=x;move_list[*nom+1]=x-n;
               move_list[*nom+2]=13;move_list[*nom+3]=0;move_list[*nom+4]=0;
                *nom=*nom+5;}
              q=adconvert(board, x-n, q);
               if(q<10 && q>0){/*rook capture to left*/
                move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=13;
                move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
              if(q!=0){/*rook has either captured or blocked*/
               n=8;}
          }/*end rook going left*/


             for(n=8;n<57;n=n+8){/* rook moves forward*/
              if(x-n<1){/*rook hits front of board*/
                n=57;break;}
              if(board[x-n]=='.'){/*rook moves forward*/
               move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=13;
               move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
              q=adconvert(board, x-n, n);
              if(q<10 && q>0){/*rook captures to front*/
               move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=13;
               move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
               if(q!=0){/*rook has either captured or blocked*/
                n=57;}
           }/*end rook moves forward*/
          for(n=8;n<57;n=n+8){/*rook moves backward*/
           if(x+n>64){/*rook hits back of board*/
            n=57;break;}
             if(board[x+n]=='.'){/*rookmoves backward*/
              move_list[*nom]=x;move_list[*nom+1]=x+n;move_list[*nom+2]=13;
              move_list[*nom+3]=0;move_list[*nom+4]=0l;*nom=*nom+5;}
             q=adconvert(board, x+n, n);
             if(q<10 && q>0){/*rook captures backwards*/
              move_list[*nom]=x;move_list[*nom+1]=x+n;move_list[*nom+2]=13;
              move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
              if(q!=0){/*rook has captured or stopped*/
               n=57;break;}
             }/*end rook moves backward*/
              }/*end rook moves*/


         /********night moves**************/
     if(board[x]=='n'){
      if(x!=8 && x!=16 && x!=32 && x!=40 && x!=48 && x!=56
        && x!=64){/*knight move upper right*/
        if(x<49){/*N cant jump off board*/
         if(board[x+17]=='.'){
        move_list[*nom]=x;move_list[*nom+1]=x+17;move_list[*nom+2]=14;
        move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
        q=adconvert(board, x+17, n);
        if(q<10 && q>0){/*knight capture upper right*/
         move_list[*nom]=x;move_list[*nom+1]=x+17;move_list[*nom+2]=14;
         move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
         }/*finish N upper right test


             /*N moves far right up*/
         if(x<57){/*fru test 1*/
         if(x!=7 && x!=15 && x!=23 && x!=31 && x!=39 && x!=47 && x!=55
          && x!=63){/*fru test2*/
         if(board[x+10]=='.'){
        move_list[*nom]=x;move_list[*nom+1]=x+10;move_list[*nom+2]=14;
        move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
        q=adconvert(board, x+10, n);
        if(q<10 && q>0){/*knight capture upper right*/
         move_list[*nom]=x;move_list[*nom+1]=x+10;move_list[*nom+2]=14;
         move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
         }/*end fru test2*/
         }/*fru test1*/


         if(x>=17){/*lr test*/
         if(board[x-15]=='.'){/*N moves lower right*/
          move_list[*nom]=x;move_list[*nom+1]=x-15;move_list[*nom+2]=14;
          move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         q=adconvert(board,x-15,n);
         if(q<10 && q>0){/*N captures lower right*/
          move_list[*nom]=x;move_list[*nom+1]=x-15;move_list[*nom+2]=14;
          move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
          }/*end lr test*/

         /*N move far right down*/
          if(x>=9){/*frd test1*/
          if(x!=7 && x!=15 && x!=23 && x!= 31 && x!=39 && x!=47 && x!=55
           && x!=63){/*frd test2*/
          if(board[x-6]=='.'){
        move_list[*nom]=x;move_list[*nom+1]=x-6;move_list[*nom+2]=14;
        move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
        q=adconvert(board, x-6, n);
        if(q<10 && q>0){/*knight capture upper right*/
         move_list[*nom]=x;move_list[*nom+1]=x-6;move_list[*nom+2]=14;
         move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
         }/*end frd test2*/
         }/*end frd test1*/

         }/*end N moves upper right and lower right*/

       if(x!=1 && x!=9 && x!=17 && x!=25 && x!=33 && x!=41 && x!=49 && x!=57){
       /*N moves upper left*/
        if(x<=48){/*ul test*/
        if(board[x+15]=='.'){
         move_list[*nom]=x;move_list[*nom+1]=x+15;move_list[*nom+2]=14;
         move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
        q=adconvert(board, x+15, n);
        if(q<10 && q>0){/*knight captures upper left*/
         move_list[*nom]=x;move_list[*nom+1]=x+15;move_list[*nom+2]=14;
         move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
         }/*end il test*/

         /*far upper left*/
         if(x<=56){/*ful test1*/
         if(x!=2 && x!=10 && x!= 18 && x!= 26 && x!=34 && x!=42 && x!= 50 &&
          x!=58){/*ful test2*/
        if(board[x+6]=='.'){
         move_list[*nom]=x;move_list[*nom+1]=x+6;move_list[*nom+2]=14;
         move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
        q=adconvert(board, x+6, n);
        if(q<10 && q>0){/*knight captures upper left*/
         move_list[*nom]=x;move_list[*nom+1]=x+6;move_list[*nom+2]=14;
         move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
         }/*end ful test1*/

         }/*end ful test2*/

         if(x>=17){/*ll test*/
         if(board[x-17]=='.'){/*N moves lower left*/
          move_list[*nom]=x;move_list[*nom+1]=x-17;move_list[*nom+2]=14;
          move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         q=adconvert(board,x-17,n);
         if(q<10 && q>0){/*N captures lower left*/
          move_list[*nom]=x;move_list[*nom+1]=x-17;move_list[*nom+2]=14;
          move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
          }/*end ll test*/

          /*lower far left */
           if(x!=2 && x!=10 && x!=18 && x!=26 && x!=34 && x!=42 && x!=50 &&
            x!=58){/*lfl test1*/
            if(x>=9){/*lfl test2*/
         if(board[x-10]=='.'){/*N moves lower left*/
          move_list[*nom]=x;move_list[*nom+1]=x-10;move_list[*nom+2]=14;
          move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         q=adconvert(board,x-10,n);
         if(q<10 && q>0){/*N captures lower far left*/
          move_list[*nom]=x;move_list[*nom+1]=x-10;move_list[*nom+2]=14;
          move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
          }/*end lfl test2*/
          }/*end lfl test1*/

          }/* end N moves upper and lower left*/

      }/*end N moves****/

      /********************bishop moves*********************/


          if(board[x]=='b'){/*test for bishop*/
      /*bishop moves upper right***/
       for(n=1;n<8;n=n+1){
        q=(x+n+(n*8));
        if(q==9 || q==17 || q==25 || q==33 || q==41 || q==49 || q==57 ||
        q==65){/*bishop cant go off board*/
         n=8;break;}
        if(q>64){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=15;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z<10 && z>0){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=15;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ur*/

         /*bishop moves lower right**/
         for(n=1;n<8;n=n+1){
        q=(x+n-(n*8));
        if(q==9 || q==17 || q==25 || q==33 || q==41 || q==49 || q==57 ||
        q==65){/*bishop cant go off board*/
         n=8;break;}
        if(q<1){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves lr*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=15;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z<10 && z>0){/*b captures lr*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=15;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves lr*/

         /*bishop moves upper left*/
       for(n=1;n<8;n=n+1){
        q=(x-n+(n*8));
        if(q==16 || q==24 || q==32 || q==40 || q==48 || q==56 || q==64
          ){/*bishop cant go off board*/
         n=8;break;}
        if(q>64){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=15;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z<10 && z>0){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=15;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ul*/

         /*bishop moves lower left*/
          for(n=1;n<8;n=n+1){
        q=(x-n-(n*8));
        if(q==16 || q==24 || q==32 || q==40 || q==48 || q==56 || q==64
         || q==8){/*bishop cant go off board*/
         n=8;break;}
        if(q<1){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=15;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z<10 && z>0){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=15;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ll*/

     }/*end bishop moves***/


/*************queen moves*************/

                  if(board[x]=='q'){/*test for bishop*/
      /*bishop moves upper right***/
       for(n=1;n<8;n=n+1){
        q=(x+n+(n*8));
        if(q==9 || q==17 || q==25 || q==33 || q==41 || q==49 || q==57 ||
        q==65){/*bishop cant go off board*/
         n=8;break;}
        if(q>64){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=12;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z<10 && z>0){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=12;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ur*/

         /*bishop moves lower right**/
         for(n=1;n<8;n=n+1){
        q=(x+n-(n*8));
        if(q==9 || q==17 || q==25 || q==33 || q==41 || q==49 || q==57 ||
        q==65){/*bishop cant go off board*/
         n=8;break;}
        if(q<1){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves lr*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=12;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z<10 && z>0){/*b captures lr*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=12;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves lr*/

         /*bishop moves upper left*/
       for(n=1;n<8;n=n+1){
        q=(x-n+(n*8));
        if(q==16 || q==24 || q==32 || q==40 || q==48 || q==56 || q==64
          ){/*bishop cant go off board*/
         n=8;break;}
        if(q>64){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=12;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z<10 && z>0){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=12;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ul*/

         /*bishop moves lower left*/
          for(n=1;n<8;n=n+1){
        q=(x-n-(n*8));
        if(q==16 || q==24 || q==32 || q==40 || q==48 || q==56 || q==64
         || q==8){/*bishop cant go off board*/
         n=8;break;}
        if(q<1){/*b cant go off board*/
         n=8;break;}
         if(board[q]=='.'){/*bishop moves ur*/
           move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=12;
           move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
         z=adconvert(board, q, z);
         if(z<10 && z>0){/*b captures ur*/
          move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=12;
          move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
         if(z!=0){/*bishop has captured or been blocked*/
          n=8;break;}

        }/*end b moves ll*/

       /******queen as rook*****/

       for(n=1;n<8;n=n+1){/*rook going right*/
         if(x+n==9 || x+n==17 || x+n==33 || x+n==41 || x+n==49 || x+n==57 ||
         x+n==65 || x+n==25){n=8;break;}/*rook hits right side of board*/
          if(board[x+n]=='.'){ /*rook moves*/
           move_list[*nom]=x;
           move_list[*nom+1]=x+n;
           move_list[*nom+2]=12;
           move_list[*nom+3]=0;
           move_list[*nom+4]=0;
           *nom=*nom+5;
            }
           q=adconvert(board, x+n, q);
           if(q<10 && q>0){/*rook capture to right*/
            move_list[*nom]=x; move_list[*nom+1]=x+n;
            move_list[*nom+2]=12; move_list[*nom+3]=q;move_list[*nom+4]=8;
            *nom=*nom+5;
             }
           if(q!=0){/*if rook has either captured or been blocked*/
            n=8;}
           }/*end rook going right*/


            for(n=1;n<8;n=n+1){/*rook going left*****/
             if(x-n==8 || x-n==16 || x-n==24 || x-n==32 || x-n==40
             || x-n==48 || x-n==56 || x-n==64 || x==1){
              n=8;break;}/*rook hits left side of board*/
              if(board[x-n]=='.'){/*rook moves left*/
               move_list[*nom]=x;move_list[*nom+1]=x-n;
               move_list[*nom+2]=12;move_list[*nom+3]=0;move_list[*nom+4]=0;
                *nom=*nom+5;}
              q=adconvert(board, x-n, q);
               if(q<10 && q>0){/*rook capture to left*/
                move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=12;
                move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
              if(q!=0){/*rook has either captured or blocked*/
               n=8;}
          }/*end rook going left*/


             for(n=8;n<57;n=n+8){/* rook moves forward*/
              if(x+n>64){/*rook hits front of board*/
                n=57;break;}
              if(board[x+n]=='.'){/*rook moves forward*/
               move_list[*nom]=x;move_list[*nom+1]=x+n;move_list[*nom+2]=12;
               move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
              q=adconvert(board, x+n, n);
              if(q<10 && q>0){/*rook captures to front*/
               move_list[*nom]=x;move_list[*nom+1]=x+n;move_list[*nom+2]=12;
               move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
               if(q!=0){/*rook has either captured or blocked*/
                n=57;}
           }/*end rook moves forward*/
          for(n=8;n<57;n=n+8){/*rook moves backward*/
           if(x-n<1){/*rook hits back of board*/
            n=57;break;}
             if(board[x-n]=='.'){/*rookmoves backward*/
              move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=12;
              move_list[*nom+3]=0;move_list[*nom+4]=0l;*nom=*nom+5;}
             q=adconvert(board, x-n, n);
             if(q<10 && q>0){/*rook captures backwards*/
              move_list[*nom]=x;move_list[*nom+1]=x-n;move_list[*nom+2]=12;
              move_list[*nom+3]=q;move_list[*nom+4]=8;*nom=*nom+5;}
              if(q!=0){/*rook has captured or stopped*/
               n=57;break;}
             }/*end rook moves backward*/

     }/*end queen moves***/

    /***king moves!!!:) ;)***/

        if(board[x]=='k'){/**king moves**/
         q=x+1;
         if(q!=9 || q!=17 || q!=25 || q!=33 || q!=41 || q!=49 || q!=57 ||
          q!=65){/*king moves right*/
           if(board[q]=='.'){/* moves r*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z<10 && z>0){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}

         /*king moves upper right*/
          q=x+9;
          if(q<65){
           if(board[q]=='.'){/*k moves r*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z<10 && z>0){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }
         /*king moves lower right*/
          q=x-7;
          if(q>7){
           if(board[q]=='.'){/*k moves r*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z<10 && z>0){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }
            }/*end king moves right*/

           /**king moves left**/
           q=x-1;
          if(q!=8 && q!=16 && q!=24 && q!=32 && q!=40 && q!=48 && q!=56 &&
           q!=64){/*king cant jump off board*/
           if(board[q]=='.'){/*k moves l*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z<10 && z>0){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}

             /*king moves upper left*/
           q=x+7;
           if(q<57){/*stay on board*/
           if(board[q]=='.'){/*k moves ul*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z<10 && z>0){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }/*stay on board*/

         /*king moves lower left**/
           q=x-9;
           if(q>1){/*stay on board*/
           if(board[q]=='.'){/*k moves ll*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z<10 && z>0){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }/*stay on board*/
            }/*end king moves left*/

          /**king moves forward**/
           q=x+8;
           if(q<64){/*stay on board*/
           if(board[q]=='.'){/*k moves ll*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z<10 && z>0){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }/*stay on board*/

          /*king moves backward**/
           q=x-8;
           if(q>1){/*stay on board*/
           if(board[q]=='.'){/*k moves ll*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=0;move_list[*nom+4]=0;*nom=*nom+5;}
           z=adconvert(board, q, n);
           if(z<10 && z>0){/*king captures!!*/
            move_list[*nom]=x;move_list[*nom+1]=q;move_list[*nom+2]=11;
            move_list[*nom+3]=z;move_list[*nom+4]=8;*nom=*nom+5;}
            }/*stay on board*/

           /*king castles right**code=9 last_move[6]=5*/
            if(x==61 && board[63]=='.' && board[62]=='.' && board[64]=='r'
              && last_move[6]!=5 && (last_move[6]-10)!=5){
            move_list[*nom]=x;move_list[*nom+1]=63;move_list[*nom+2]=11;
            move_list[*nom+3]=13;move_list[*nom+4]=9;*nom=*nom+5;}

           /*king castles left**last_move[6]=10*/
            if(x==61 && board[60]=='.' && board[59]=='.' && board[58]=='.' &&
             board[57]=='r' && last_move[6]!=10 && last_move[6]-5!=10){
             move_list[*nom]=x;move_list[*nom+1]=58;move_list[*nom+2]=11;
             move_list[*nom+3]=13;move_list[*nom+4]=9;*nom=*nom+5;}

            }/*end king moves*/

    }/*check 1 to 64 squares*/


   }/*blacks turn*/

   printf("nom %d %h\n",*nom,&nom);
  return(0);
}

  adconvert(board,x, n)/*convert ascii board piece to integer code*/
   int x, n;
   char board[64];
   {
     n=0;
     if(board[x]=='p')
       n=16;
     if(board[x]=='k')
        n=11;
     if(board[x]=='q')
        n=12;
     if(board[x]=='r')
         n=13;
     if(board[x]=='n')
       n=14;
     if(board[x]=='b')
       n=15;

     if(board[x]=='P')
      n=6;
     if(board[x]=='K')
       n=1;
     if(board[x]=='Q')
       n=2;
     if(board[x]=='R')
       n=3;
     if(board[x]=='N')
       n=4;
     if(board[x]=='B')
        n=5;
    return(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.