Author: Nicolas Carrasco
Date: 16:46:15 12/25/99
Go up one level in this thread
char variables are slower than ints (at least at my CPU).
So I recommend you to change "board" to int type.
I recomend you to write your chess program in different files.
1-MOVE GENERATOR
2-MAKE - UNMAKE
3-EXTERNAL VARIABLES
4-DEFINITIONS AND MACROS
5-USER INPUT/OUTPUT
6-WINBOARD COMPABILITY
7-SEARCH
Other things:
Don't worry tooo much on USER input/output, at least at your fisrt versions. If
you know what you wrote, try undestanding BITBOARDS, LINKED structures and 0x88
trick.
On December 24, 1999 at 18:05:24, Joe ODonnell wrote:
>
>
>
>
>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.