Author: Bruce Moreland
Date: 19:19:02 12/24/99
Go up one level in this thread
On December 24, 1999 at 18:05:24, Joe ODonnell wrote:
>
>
>
>
>Iv run into a very frustrating problem with my chess program.
Your problem is that you are a beginning C programmer and you wrote a big wad of
stuff that has completely gotten out of control, and probably has a million bugs
in it.
You just need to work at this more. In the process you'll learn C and get the
bugs out. Everyone starts out like this. You are in a great position, you
obviously have an intense desire to write a program to solve a problem. That is
a fantastic place to start, because you will have a tremendously fast learning
curve because you actually want to write code.
First bug I saw is you declared "board[64]" and then wrote the following code:
for (a=0;a<=64;a=a+1)
board[a]='.';
If you look at this for a few moments you will realize that this will execute 65
times, filling in your board array, plus one element beyond the end of the
array. You may as well just shoot yourself, given the random and often fatal
effects this kind of bug will involve.
The typical C for-loop looks like this:
for (a=0;a<64;a++)
board[a]='.';
"a++" does more or less the same thing as "a=a+1", and after a while you'll get
used to using this syntax. The big change here is that I changed the "<=" to a
"<". People who program in Pascal or other evil languages are used to using
1-based arrays, in which case you have to use "<=", but in C you almost never
use that kind of loop.
This line is also exhibiting the same kind of vileness, given that you are using
"x" to index a 64-element array.
for(x=1;x<65;x=x+1)
Totally wrong and extremely evil.
I'm also seeing things like:
move[1] = 0;
That worries me because you are setting the second element. If this isn't what
you mean to do, you want "move[0] = 0;" to set the first element.
"scanf" is a bad way of doing console input in C, in my opinion. I think it is
better to write some sort of "GetLine" function that uses "fgets", if I remember
right.
You should use a "switch" statement to replace repeated tests on the same
variable.
You should take similar blocks of code and make them functions.
Another suggestion is that you store your board in a binary format, and write a
function that converts to text and outputs it, rather than storing it as text
and converting it to binary whenever you want to access the elements of the
board, which is what I think you are doing.
There are numerous other problems that you'll just have to work out. You can't
really ask anyone to help you with this kind of code because they will die.
Good luck,
bruce
>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.