Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define ROWS 8
- #define COLUMNS 8
- #define PIECES 16
- #define MAX_DIFFERENCE 7
- #define MAX_PLAYS 1000000
- char domain[ROWS][COLUMNS];
- int occupied[ROWS][COLUMNS];
- char killed1[PIECES];
- char killed2[PIECES];
- int checkedby1[ROWS+2][COLUMNS+2];
- int checkedby2[ROWS+2][COLUMNS+2];
- int zone1[ROWS][COLUMNS];
- int zone2[ROWS][COLUMNS];
- int kp1i=0,kp1j=4;
- int kp2i=7,kp2j=4;
- int number_killed1=0;
- int number_killed2=0;
- int turn=1;
- int winner=0,draw=0;
- int counter_steps1=0,counter_steps2=0;
- int pointer1=0,pointer2=0;
- char letter[8]={'A','B','C','D','E','F','G','H'};
- int number[8]={1,2,3,4,5,6,7,8};
- int i1,j1,i2,j2;
- char promotion = 'o';
- void save (void);
- void load (void);
- void set_game(void);
- void print_board(void);
- void blackandwhite(int i,int j);
- void movement(void);
- void save_step(int i1,int j1,int i2,int j2,char eaten,char piece);
- void move_piece (int i1, int j1,int i2,int j2,int turn);
- void premote(char);
- void move_king(int i1,int j1,int i2, int j2);
- void set_checks1(void);
- void set_checks2(void);
- void read(char *i1,char *j1,char *i2,char *j2,char *promotion);
- int movability1[ROWS][COLUMNS];
- int movability2[ROWS][COLUMNS];
- typedef struct {
- char piece;
- int domain1i;
- int domain1j;
- int domain2i;
- int domain2j;
- char eaten;}steps;
- steps steps1[MAX_PLAYS];
- steps steps2[MAX_PLAYS];
- int main()
- {
- set_game();
- do
- {
- system("CLS");
- system("COLOR E");
- print_board();
- movement();
- set_checks1();
- set_checks2();
- if(turn==1)
- turn=2;
- else
- turn=1;
- }while(winner==0 && draw==0);
- return 0;
- }
- void movement(void)
- {
- char i1c,j1c,i2c,j2c,promotion='o';
- AGAIN :
- printf("\n\n");
- printf("\v Enter 'S' if you want to save this game or Enter 'L' if you want to load your game \n ");
- printf("Enter player %d move : ",turn);
- read(&j1c,&i1c,&j2c,&i2c,&promotion);
- if(j1c=='u' || j1c=='U')
- {
- undo();
- return;
- }
- if(j1c=='r' || j1c=='R')
- {
- redo();
- return;
- }
- if(j1c=='s' || j1c=='S'){
- save();
- if(turn==1)
- turn=2;
- else
- turn=1;
- return;
- }
- if(j1c=='l' || j1c=='L'){
- load();
- if(turn==1)
- turn=2;
- else
- turn=1;
- return;
- }
- promotion=tolower(promotion);
- if(islower(j1c))
- j1c=toupper(j1c);
- if(islower(j2c))
- j2c= toupper(j2c);
- if(turn==1&&isupper(promotion))
- promotion=tolower(promotion);
- if(turn==2&&islower(promotion))
- promotion=toupper(promotion);
- switch(j1c)
- {
- case 'A' : j1=0; break;
- case 'B' : j1=1; break;
- case 'C' : j1=2; break;
- case 'D' : j1=3; break;
- case 'E' : j1=4; break;
- case 'F' : j1=5; break;
- case 'G' : j1=6; break;
- case 'H' : j1=7; break;
- default : printf("Column intial is wrong! \nplease re-enter your move");
- goto AGAIN; break;
- }
- switch(j2c)
- {
- case 'A' : j2=0; break;
- case 'B' : j2=1; break;
- case 'C' : j2=2; break;
- case 'D' : j2=3; break;
- case 'E' : j2=4; break;
- case 'F' : j2=5; break;
- case 'G' : j2=6; break;
- case 'H' : j2=7; break;
- default : printf("Column final is wrong! \nplease re-enter your move");
- goto AGAIN; break;
- }
- switch(i1c)
- {
- case '8' : i1=0; break;
- case '7' : i1=1; break;
- case '6' : i1=2; break;
- case '5' : i1=3; break;
- case '4' : i1=4; break;
- case '3' : i1=5; break;
- case '2' : i1=6; break;
- case '1' : i1=7; break;
- default : printf("row initial is wrong! \nplease re-enter your move");
- goto AGAIN; break;
- }
- switch(i2c)
- {
- case '8' : i2=0; break;
- case '7' : i2=1; break;
- case '6' : i2=2; break;
- case '5' : i2=3; break;
- case '4' : i2=4; break;
- case '3' : i2=5; break;
- case '2' : i2=6; break;
- case '1' : i2=7; break;
- default : printf("row final is wrong! \nplease re-enter your move");
- goto AGAIN; break;
- }
- if(occupied[i1][j1]==0)
- {
- printf("nothing to move from the initial position.\nplease re-enter your move.");
- goto AGAIN;
- }
- else
- {
- if (turn==1)
- {
- if(islower(domain[i1][j1]))
- goto CONT;
- else
- {
- printf("You can't move the other player's piece.\nplease re-enter your move");
- goto AGAIN;
- }
- }
- if (turn==2)
- {
- if(isupper(domain[i1][j1]))
- goto CONT;
- else
- {
- printf("You can't move the other player's piece.\n please re-enter your move");
- goto AGAIN;
- }
- }
- }
- CONT :
- move_piece(i1,j1,i2,j2,turn);
- blackandwhite(i1,j1);
- }
- void set_game(void)
- {
- /*filling the 1st , 2nd , 7th and 8th rows*/
- int i,j;
- for(i=0; i<2; i++)
- {
- for(j=0;j<COLUMNS;j++)
- {
- occupied[i][j]=1;
- }
- }
- for(i=6; i<8; i++)
- {
- for(j=0;j<COLUMNS;j++)
- {
- occupied[i][j]=2;
- }
- }
- /* setting pawns on board*/
- for(j=0; j<COLUMNS; j++)
- {
- domain[1][j]='p';
- domain[6][j]='P';
- }
- /*eltabya*/
- domain[0][0]=domain[0][7]='r';
- domain[7][0]=domain[7][7]='R';
- /*el7osan*/
- domain[0][1]=domain[0][6]='n';
- domain[7][1]=domain[7][6]='N';
- /*elephant*/
- domain[0][2]=domain[0][5]='b';
- domain[7][2]=domain[7][5]='B';
- /*Queen*/
- domain[0][3]='q';
- domain[7][3]='Q';
- /*king*/
- domain[0][4]='k';
- domain[7][4]='K';
- for(i=2; i<6;i++)
- {
- for(j=0;j<COLUMNS;j++)
- {
- occupied[i][j]=0;
- if((i+j)%2==0)
- {
- domain[i][j]='.';
- }else{
- domain[i][j]='-';
- }
- }
- }
- for(i=0; i<ROWS+2;i++)
- {
- checkedby1[i][0]=1;
- checkedby1[i][9]=1;
- checkedby2[i][0]=1;
- checkedby2[i][9]=1;
- checkedby1[0][i]=1;
- checkedby1[9][i]=1;
- checkedby2[0][i]=1;
- checkedby2[9][i]=1;
- }
- for(j=1;j<COLUMNS+1;j++){
- checkedby1[3][j]=1;
- checkedby2[6][j]=1;
- }
- }
- void print_board(void)
- {
- int i,j,k,c;
- c=0;
- int n=33;
- printf(" ");
- for(k=0; k<8;k++)
- printf(" %c",letter[k]);
- printf("\n");
- printf(" ");
- for(k=0; k<n;k++){
- printf("-");
- if(k==n-1)
- printf("\n");
- }
- for(i=0;i<ROWS;i++)
- {
- for(j=0; j<COLUMNS;j++)
- {
- if(j==0)
- {
- printf(" %d | %c |",number[7-i],domain[i][j]);
- }
- else if (j==7)
- {
- printf(" %c | %d",domain[i][j],number[7-i]);
- }
- else
- {
- printf(" %c |",domain[i][j]);
- }
- if(j==7 && i==4){
- printf(" Killed Player 1 : ");
- while(c<number_killed1)
- {
- printf(" %c,",killed1[c]);
- c++;
- if(c==8)
- printf("\n");
- }}
- c=0;
- if(j==7 && i==5){
- printf(" Killed Player 2 :");
- while(c<number_killed2)
- {
- printf(" %c,",killed2[c]);
- c++;
- if(c==8)
- printf("\n");
- }}
- if(j==COLUMNS-1)
- {
- printf("\n");
- printf(" ");
- for(k=0; k<n;k++){
- printf("-");
- if(k==n-1)
- printf("\n");
- }
- }
- }
- }
- printf(" ");
- for(k=0; k<8;k++)
- printf(" %c",letter[k]);
- }
- void blackandwhite(int i,int j)
- {
- if(occupied[i][j]==0)
- {
- if((i+j)%2==0)
- domain[i][j]='.';
- else
- domain[i][j]='-';
- }
- }
- void move_piece(int i1, int j1,int i2, int j2,int turn){
- /* for player 1*/
- if(turn==1){
- /*moving pawn*/
- if(domain[i1][j1]=='p')
- {
- if(i1==1){
- /*if next square is correct and empty*/
- if((i2-i1==1||i2-i1==2)&&j1==j2&& occupied[i2][j2]==0&&occupied[i1+1][j2]==0){
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- } else if(i2==i1+1&&(j2==j1-1||j2==j1+1)&&occupied[i2][j2]==2)
- {
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- killed2[number_killed2]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed2++;
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- }
- else
- {
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- }
- }
- else if((i2-i1==1)&&j1==j2&& occupied[i2][j2]==0){
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- if(i2==7)
- {
- premote(domain[i1][j1]);
- }
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- return;
- }
- /*eaten player 2 piece*/
- else if(i2==i1+1&&(j2==j1-1||j2==j1+1)&&occupied[i2][j2]==2)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- if(i2==7)
- {
- premote(domain[i1][j1]);
- }
- killed2[number_killed2]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed2++;
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- }
- else
- {
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- }
- return;
- }
- /*moving tabya*/
- if(domain[i1][j1]=='r')
- {
- /*moving through the row*/
- if(i2==i1)
- {
- int n;
- if(j2>j1){
- for(n=j1+1;n<j2;n++)
- {
- if(occupied[i1][n])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- goto OUT;
- }}}
- if(j1>j2)
- {
- for(n=j1-1;n>j2;n--)
- {
- if(occupied[i1][n])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- goto OUT;
- }}
- }
- if(occupied[i1][j2]==1)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- if(occupied[i2][j2]==2)
- {
- occupied[i2][j2]=1;
- occupied[i1][j1]=0;
- killed2[number_killed2]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed2++;
- }
- if(occupied[i2][j2]==0)
- {
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- }
- }
- else if(j2==j1)
- {
- int n;
- if(i2>i1)
- {
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][j1])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}}
- if(i1>i2)
- {
- for(n=i1-1;n>i2;n--)
- {
- if(occupied[n][j1])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}
- }
- if(occupied[i2][j2]==1)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- if(occupied[i2][j2]==2)
- {
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- killed2[number_killed2]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed2++;
- }
- if(occupied[i2][j2]==0)
- {
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- domain[i2][j2]=domain[i1][j1];
- }
- }else
- {
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- }
- }
- /*moving the knight*/
- if(domain[i1][j1]=='n')
- {
- if((i2==i1+2&&(j2==j1-1||j2==j1+1))||(i2==i1-2&&(j2==j1-1||j2==j1+1))||(j2==j1+2&&(i2==i1-1||i2==i1+1))||(j2==j1-2&&(i2==i1-1||i2==i1+1)))
- {
- if(occupied[i2][j2]==1)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- if(occupied[i2][j2]==2)
- {
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- killed2[number_killed2]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed2++;
- }
- if(occupied[i2][j2]==0)
- {
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- }
- }else
- {
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- }
- }
- if(domain[i1][j1]=='b')
- {
- int n,m;
- if(j2-j1==i2-i1 || j2-j1==i1-i2)
- {
- if(j2>j1&&i2>i1)
- {
- m=j1+1;
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][m++])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- else if(j1>j2 && i2>i1)
- {
- m=j1-1;
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][m--])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- else if (i1>i2 && j2>j1)
- {
- for(n=i1-1;n>i2;n--)
- {
- m=j1+1;
- if(occupied[n][m++])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- else if(i2<i1 && j2<j1)
- {
- for(n=i1-1;n>i2;n--)
- {
- m=j1-1;
- if(occupied[n][m--])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }}
- else{
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==1)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==2)
- {
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- killed2[number_killed2]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed2++;
- }
- if(occupied[i2][j2]==0)
- {
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- }
- }
- }
- if(domain[i1][j1]=='q')
- {
- int n,m;
- if(j2-j1==i2-i1 || j2-j1==i1-i2)
- {
- if(j2>j1&&i2>i1)
- {
- m=j1+1;
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][m++])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- goto OUT;
- }
- }
- }
- else if(j1>j2 && i2>i1)
- {
- m=j1-1;
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][m--])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- else if (i1>i2 && j2>j1)
- {
- for(n=i1-1;n>i2;n--)
- {
- m=j1+1;
- if(occupied[n][m++])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- else if(i2<i1 && j2<j1)
- {
- for(n=i1-1;n>i2;n--)
- {
- m=j1-1;
- if(occupied[n][m--])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- if(occupied[i2][j2]==1)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==2)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- killed2[number_killed2]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed2++;
- }
- if(occupied[i2][j2]==0)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- }
- }
- else if(i2==i1)
- {
- int n;
- if(j2>j1){
- for(n=j1+1;n<j2;n++)
- {
- if(occupied[i1][n])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}}
- if(j1>j2)
- {
- for(n=j1-1;n>j2;n--)
- {
- if(occupied[i1][n])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}
- }
- if(occupied[i1][j2]==1)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==2)
- {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i2][j2]=1;
- occupied[i1][j1]=0;
- killed2[number_killed2]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed2++;
- }
- if(occupied[i2][j2]==0)
- {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- }
- }
- else if(j2==j1)
- {
- int n;
- if(i2>i1)
- {
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][j1])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}}
- if(i1>i2)
- {
- for(n=i1-1;n>i2;n--)
- {
- if(occupied[n][j1])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}
- }
- if(occupied[i2][j2]==1)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- }
- if(occupied[i2][j2]==2)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- killed2[number_killed2]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed2++;
- }
- if(occupied[i2][j2]==0)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- domain[i2][j2]=domain[i1][j1];
- }
- }
- else
- {
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- }
- }
- if(domain[i1][j1]=='k')
- {
- move_king(i1,j1,i2,j2);
- }
- /******* PLAYER 2**********/
- if(turn==2)
- {
- if(domain[i1][j1]=='P')
- {
- if(i1==6){
- /*if next square is correct and empty*/
- if((i1-i2==1||i1-i2==2)&&j1==j2&& occupied[i2][j2]==0&&occupied[i1-1][j2]==0){
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- }else if((i1-i2==1)&&j1==j2&& occupied[i2][j2]==0){
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- }
- else
- {
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- }
- }
- else if((i1-i2==1)&&j1==j2&& occupied[i2][j2]==0){
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- if(i2==0)
- {
- premote(domain[i1][j1]);
- }
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- }
- /*eaten player 1 piece*/
- else if(i2==i1-1&&(j2==j1-1||j2==j1+1)&&occupied[i2][j2]==1)
- {
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- if(i2==0)
- {
- premote(domain[i1][j1]);
- }
- killed1[number_killed1]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed1++;
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- }
- else
- {
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- return;
- }
- return;
- }
- if(domain[i1][j1]=='R')
- {
- if(i2==i1)
- {
- int n;
- if(j2>j1){
- for(n=j1+1;n<j2;n++)
- {
- if(occupied[i1][n])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}}
- if(j1>j2)
- {
- for(n=j1-1;n>j2;n--)
- {
- if(occupied[i1][n])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}
- }
- if(occupied[i1][j2]==2)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==1)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i2][j2]=2;
- occupied[i1][j1]=0;
- killed1[number_killed1]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed1++;
- }
- if(occupied[i2][j2]==0)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- }
- }
- else if(j2==j1)
- {
- int n;
- if(i2>i1)
- {
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][j1])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}}
- if(i1>i2)
- {
- for(n=i1-1;n>i2;n--)
- {
- if(occupied[n][j1])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}
- }
- if(occupied[i2][j2]==2)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==1)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- killed1[number_killed1]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed1++;
- }
- if(occupied[i2][j2]==0)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- domain[i2][j2]=domain[i1][j1];
- }
- }else
- {
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- if(domain[i1][j1]=='N')
- {
- if((i2==i1+2&&(j2==j1-1||j2==j1+1))||(i2==i1-2&&(j2==j1-1||j2==j1+1))||(j2==j1+2&&(i2==i1-1||i2==i1+1))||(j2==j1-2&&(i2==i1-1||i2==i1+1)))
- {
- if(occupied[i2][j2]==2)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==1)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- killed1[number_killed1]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed1++;
- }
- if(occupied[i2][j2]==0)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- }
- }else
- {
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- }
- }
- if(domain[i1][j1]=='B')
- {
- int n,m;
- if(j2-j1==i2-i1 || j2-j1==i1-i2)
- {
- if(j2>j1&&i2>i1)
- {
- m=j1+1;
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][m++])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- goto OUT;
- }
- }
- }
- else if(j1>j2 && i2>i1)
- {
- m=j1-1;
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][m--])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- goto OUT;
- }
- }
- }
- else if (i1>i2 && j2>j1)
- {
- for(n=i1-1;n>i2;n--)
- {
- m=j1+1;
- if(occupied[n][m++])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- else if(i2<i1 && j2<j1)
- {
- for(n=i1-1;n>i2;n--)
- {
- m=j1-1;
- if(occupied[n][m--])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }}
- else{
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==2)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==1)
- {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- killed1[number_killed1]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed1++;
- }
- if(occupied[i2][j2]==0)
- {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- }
- }
- if(domain[i1][j1]=='Q')
- {
- int n,m;
- if(j2-j1==i2-i1 || j2-j1==i1-i2)
- {
- if(j2>j1&&i2>i1)
- {
- m=j1+1;
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][m++])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- else if(j1>j2 && i2>i1)
- {
- m=j1-1;
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][m--])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- else if (i1>i2 && j2>j1)
- {
- for(n=i1-1;n>i2;n--)
- {
- m=j1+1;
- if(occupied[n][m++])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- else if(i2<i1 && j2<j1)
- {
- for(n=i1-1;n>i2;n--)
- {
- m=j1-1;
- if(occupied[n][m--])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- }
- if(occupied[i2][j2]==2)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- }
- if(occupied[i2][j2]==1)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- killed1[number_killed1]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed1++;
- }
- if(occupied[i2][j2]==0)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- }
- }
- else if(i2==i1)
- {
- int n;
- if(j2>j1){
- for(n=j1+1;n<j2;n++)
- {
- if(occupied[i1][n])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}}
- if(j1>j2)
- {
- for(n=j1-1;n>j2;n--)
- {
- if(occupied[i1][n])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}
- }
- if(occupied[i1][j2]==2)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==1)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i2][j2]=2;
- occupied[i1][j1]=0;
- killed1[number_killed1]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed1++;
- }
- if(occupied[i2][j2]==0)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- }
- }
- else if(j2==j1)
- {
- int n;
- if(i2>i1)
- {
- for(n=i1+1;n<i2;n++)
- {
- if(occupied[n][j1])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}}
- if(i1>i2)
- {
- for(n=i1-1;n>i2;n--)
- {
- if(occupied[n][j1])
- {
- printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
- movement();
- return;
- }}
- }
- if(occupied[i2][j2]==2)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==1)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- killed1[number_killed1]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed1++;
- }
- if(occupied[i2][j2]==0)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- domain[i2][j2]=domain[i1][j1];
- }
- }
- else
- {
- printf("Incorrect move.\nPlease re-enter your move.");
- movement();
- return;
- }
- }
- if(domain[i1][j1]=='K')
- {
- move_king(i1,j1,i2,j2);
- }
- }
- OUT : return;
- }
- void premote(char a)
- {
- if(promotion=='o')
- {
- printf("please enter a promotion for your pawn :");
- scanf(" %c",&domain[i1][j1]);
- }
- if(domain[i1][j1]!= 'o' && domain[i1][j1]!='r' && domain[i1][j1]!='n' && domain[i1][j1]!='b' && domain[i1][j1] != 'q')
- {
- do
- {
- printf("Incorrect promotion\nPlease enter a correct promotion : ");
- scanf(" %c",&domain[i1][j1]);
- if(isupper(domain[i1][j1]))
- domain[i1][j1]=tolower(domain[i1][j1]);
- }
- while(domain[i1][j1]!='r' && domain[i1][j1]!='n' && domain[i1][j1]!='b' && domain[i1][j1] != 'q');
- }
- if(turn==1&&isupper(domain[i1][j1]))
- domain[i1][j1]=tolower(domain[i1][j1]);
- if(turn==2&&islower(domain[i1][j1]))
- domain[i1][j1]=toupper(domain[i1][j1]);
- }
- void move_king(int i1,int j1,int i2,int j2)
- {
- if((j2-j1==-1 || j2-j1==0 || j2-j1==1) && (i2-i1==-1 || i2-i1==0 || i2-i1==1)){
- int k,q;
- if(domain[i1][j1]=='k')
- {
- for(k=i1-1; k<=i1+1; k++)
- {
- for(q=j1-1; q<=j1+1; q++)
- {
- if((k==i1 && q==j1) || (k<0 || k>7 || q<0 || q>7) )
- continue;
- if(!checkedby2[k+1][q+1] && occupied[k][q] != 1)
- {
- goto CONT2;
- }
- }
- }
- printf("You can't move the king\nPlease enter an-other move.");
- movement();
- return;
- CONT2 :
- if(checkedby2[i2+1][j2+1])
- {
- printf("You can't move the king to this position or you will lose.");
- movement();
- return;
- }else
- {
- if(occupied[i2][j2]==1)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==2)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- kp1i=i2;
- kp1j=j2;
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- killed2[number_killed2]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed2++;
- }
- if(occupied[i2][j2]==0)
- {
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- kp1i=i2;
- kp1j=j2;
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=1;
- }
- }
- }else if(domain[i1][j1]=='K')
- {
- for(k=i1-1; k<=i1+1; k++)
- {
- for(q=j1-1; q<=j1+1; q++)
- {
- if((k==i1 && q==j1) || (k<0 || k>7 || q<0 || q>7) )
- continue;
- if(!checkedby1[k+1][q+1] && occupied[k][q] != 2)
- {
- goto CONT3;
- }
- }
- }
- printf("You can't move the king\nPlease enter an-other move.");
- movement();
- return;
- CONT3 :
- if(checkedby1[i2+1][j2+1])
- {
- printf("You can't move the king to this position or you will lose.");
- movement();
- return;
- }else
- {
- if(occupied[i2][j2]==2)
- {
- printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
- movement();
- return;
- }
- if(occupied[i2][j2]==1)
- {
- save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- kp2i=i2;
- kp2j=j2;
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- killed1[number_killed1]=domain[i2][j2];
- domain[i2][j2]=domain[i1][j1];
- number_killed1++;
- }
- if(occupied[i2][j2]==0)
- { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
- kp2i=i2;
- kp2j=j2;
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- occupied[i2][j2]=2;
- }
- }
- }}
- else
- {
- printf("Incorrect move for the king.\nPlease re-enter your move");
- movement();
- }
- }
- void set_checks1(void)
- {
- int i,j,k,q;
- for(k=0;k<ROWS;k++)
- {
- for(q=0;q<COLUMNS;q++)
- {
- movability1[k][q]=movability2[k][q]=0;
- checkedby1[k+1][q+1]=checkedby2[k+1][q+1]=0;
- zone1[k][q]=0;
- zone2[k][q]=0;
- if(islower(domain[k][q]))
- occupied[k][q]=1;
- else if(isupper(domain[k][q]))
- occupied[k][q]=2;
- else
- occupied[k][q]=0;
- }
- }
- for(i=0; i<ROWS;i++)
- {
- for(j=0; j<COLUMNS; j++)
- {
- if(occupied[i][j]==1)
- {
- if(domain[i][j]=='r')
- {
- k=i+1;
- while(!occupied[k][j]&&k<ROWS)
- {
- checkedby1[k+1][j+1]=1;
- movability1[k++][j]=1;
- }
- if(k<8&&k>=0){
- if(occupied[k][j]==2 ||occupied[k][j]==0)
- {
- checkedby1[k+1][j+1]=1;
- movability1[k][j]=1;
- }
- else
- {
- checkedby1[k+1][j+1]=1;
- }}
- k=i-1;
- while(!occupied[k][j]&&k>0)
- {
- checkedby1[k+1][j+1]=1;
- movability1[k--][j]=1;
- }if(k<8&&k>=0){
- if(occupied[k][j]==2 ||occupied[k][j]==0)
- {
- checkedby1[k+1][j+1]=1;
- movability1[k][j]=1;
- }
- else
- {
- checkedby1[k+1][j+1]=1;
- }}
- k=j+1;
- while(!occupied[i][k]&&k<COLUMNS)
- {
- checkedby1[i+1][k+1]=1;
- movability1[i][k++]=1;
- }if(k<8&&k>=0){
- if(occupied[i][k]==2 || occupied[i][k]==0 )
- {
- checkedby1[i+1][k+1]=1;
- movability1[i][k]=1;
- }
- else
- {
- checkedby2[i+1][k+1]=1;
- }}
- k=j-1;
- while(!occupied[i][k]&&k>0)
- {
- checkedby1[i+1][k+1]=1;
- movability1[i][k--]=1;
- }if(k<8&&k>=0){
- if(occupied[i][k]==2 || occupied[i][k]==0)
- {
- checkedby1[i+1][k+1]=1;
- movability1[i][k]=1;
- }
- else
- {
- checkedby1[i+1][k+1]=1;
- }}
- }
- if(domain[i][j]=='b')
- {
- k=i+1;
- q=j+1;
- while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k++][q++]=1;
- }
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==2 || occupied[k][q]==0 )
- {
- checkedby1[k+1][q+1]=1;
- movability1[k][q]=1;
- }else
- {
- checkedby1[k+1][q+1]=1;
- }}
- k=i-1;
- q=j-1;
- while(!occupied[k][q]&&k>0&&q>0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k--][q--]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==2 || occupied[k][q]==0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k][q]=1;
- }else
- {
- checkedby1[k+1][q+1]=1;
- }}
- k=i-1;
- q=j+1;
- while(!occupied[k][q]&&k>0&&q<COLUMNS)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k--][q++]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==2 || occupied[k][q]==0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k][q]=1;
- }else
- {
- checkedby1[k+1][q+1]=1;
- }}
- k=i+1;
- q=j-1;
- while(!occupied[k][q]&&k<ROWS&&q>0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k++][q--]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==2 || occupied[k][q]==0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k][q]=1;
- }else
- {
- checkedby1[k+1][q+1]=1;
- }}
- }
- if(domain[i][j]=='n')
- {
- q=j+2;
- k=i-1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby1[k+1][q+1]=1;
- if(occupied[k][q]!=1)
- movability1[k][q]=1;}
- q=j+2;
- k=i+1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby1[k+1][q+1]=1;
- if(occupied[k][q]!=1)
- movability1[k][q]=1;}
- q=j-2;
- k=i-1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby1[k+1][q+1]=1;
- if(occupied[k][q]!=1)
- movability1[k][q]=1;}
- q=j-2;
- k=i+1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby1[k+1][q+1]=1;
- if(occupied[k][q]!=1)
- movability1[k][q]=1;}
- q=j-1;
- k=i-2;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby1[k+1][q+1]=1;
- if(occupied[k][q]!=1)
- movability1[k][q]=1;}
- q=j+1;
- k=i-2;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby1[k+1][q+1]=1;
- if(occupied[k][q]!=1)
- movability1[k][q]=1;}
- q=j+1;
- k=i+2;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby1[k+1][q+1]=1;
- if(occupied[k][q]!=1)
- movability1[k][q]=1;}
- q=j-1;
- k=i+2;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby1[k+1][q+1]=1;
- if(occupied[k][q]!=1)
- movability1[k][q]=1;}
- }
- if(domain[i][j]=='q')
- {
- k=i+1;
- while(!occupied[k][j]&&k<ROWS)
- {
- checkedby1[k+1][j+1]=1;
- movability1[k++][j]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][j]==2 ||occupied[k][j]==0)
- {
- checkedby1[k+1][j+1]=1;
- movability1[k][j]=1;
- }
- else
- {
- checkedby1[k+1][j+1]=1;
- }}
- k=i-1;
- while(!occupied[k][j]&&k>0)
- {
- checkedby1[k+1][j+1]=1;
- movability1[k--][j]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][j]==2 ||occupied[k][j]==0)
- {
- checkedby1[k+1][j+1]=1;
- movability1[k][j]=1;
- }
- else
- {
- checkedby1[k+1][j+1]=1;
- }}
- k=j+1;
- while(!occupied[i][k]&&k<COLUMNS)
- {
- checkedby1[i+1][k+1]=1;
- movability1[i][k++]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[i][k]==2 || occupied[i][k]==0 )
- {
- checkedby1[i+1][k+1]=1;
- movability1[i][k]=1;
- }
- else
- {
- checkedby2[i+1][k+1]=1;
- }}
- k=j-1;
- while(!occupied[i][k]&&k>0)
- {
- checkedby1[i+1][k+1]=1;
- movability1[i][k--]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[i][k]==2 || occupied[i][k]==0)
- {
- checkedby1[i+1][k+1]=1;
- movability1[i][k]=1;
- }
- else
- {
- checkedby1[i+1][k+1]=1;
- }}
- k=i+1;
- q=j+1;
- while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k++][q++]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==2 || occupied[k][q]==0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k][q]=1;
- }else
- {
- checkedby1[k+1][q+1]=1;
- }}
- k=i-1;
- q=j-1;
- while(!occupied[k][q]&&k>0&&q>0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k--][q--]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==2 || occupied[k][q]==0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k][q]=1;
- }else
- {
- checkedby1[k+1][q+1]=1;
- }}
- k=i-1;
- q=j+1;
- while(!occupied[k][q]&&k>0&&q<COLUMNS)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k--][q++]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==2 || occupied[k][q]==0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k][q]=1;
- }else
- {
- checkedby1[k+1][q+1]=1;
- }}
- k=i+1;
- q=j-1;
- while(!occupied[k][q]&&k<ROWS&&q>0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k++][q--]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==2 || occupied[k][q]==0)
- {
- checkedby1[k+1][q+1]=1;
- movability1[k][q]=1;
- }else
- {
- checkedby1[k+1][q+1]=1;
- }}
- }
- if(domain[i][j]=='p')
- {
- k=i+1;
- q=j+1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby1[k+1][q+1]=1;
- if(occupied[k][q]==2)
- movability1[k][q]=1;}
- q=j-1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby1[k+1][q+1]=1;
- if(occupied[k][q]==2)
- movability1[k][q]=1;}
- if(i==1)
- {
- k=i+1;
- if(!occupied[k][j]){
- movability1[k][j]=1;
- k++;
- if(!occupied[k][j])
- movability1[k][j]=1;}
- }else{
- if(k<8&&k>=0){
- k=i+1;
- if(!occupied[k][j])
- movability1[k][j]=1;}
- }
- }
- }
- }
- }
- }
- void set_checks2(void)
- {
- int i,j,k,q;
- for(i=0; i<ROWS;i++)
- {
- for(j=0; j<COLUMNS; j++)
- {
- if(occupied[i][j]==2)
- {
- if(domain[i][j]=='R')
- {
- k=i+1;
- while(!occupied[k][j]&&k<ROWS)
- {
- checkedby2[k+1][j+1]=1;
- movability2[k++][j]=1;
- }if(k<8 &&k>=0){
- if(occupied[k][j]==1 ||occupied[k][j]==0)
- {
- checkedby2[k+1][j+1]=1;
- movability2[k][j]=1;
- }
- else
- {
- checkedby2[k+1][j+1]=1;
- }}
- k=i-1;
- while(!occupied[k][j]&&k>0)
- {
- checkedby2[k+1][j+1]=1;
- movability2[k--][j]=1;
- }if(k<8 &&k>=0){
- if(occupied[k][j]==1 ||occupied[k][j]==0)
- {
- checkedby2[k+1][j+1]=1;
- movability2[k][j]=1;
- }
- else
- {
- checkedby2[k+1][j+1]=1;
- }}
- k=j+1;
- while(!occupied[i][k]&&k<COLUMNS)
- {
- checkedby2[i+1][k+1]=1;
- movability2[i][k++]=1;
- }if(k<8 &&k>=0){
- if(occupied[i][k]==1 || occupied[i][k]==0 )
- {
- checkedby2[i+1][k+1]=1;
- movability2[i][k]=1;
- }
- else
- {
- checkedby2[i+1][k+1]=1;
- }}
- k=j-1;
- while(!occupied[i][k]&&k>0)
- {
- checkedby2[i+1][k+1]=1;
- movability2[i][k--]=1;
- }if(k<8 &&k>=0){
- if(occupied[i][k]==1 || occupied[i][k]==0)
- {
- checkedby2[i+1][k+1]=1;
- movability2[i][k]=1;
- }
- else
- {
- checkedby2[i+1][k+1]=1;
- }}
- }
- if(domain[i][j]=='B')
- {
- k=i+1;
- q=j+1;
- while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k++][q++]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==1 || occupied[k][q]==0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k][q]=1;
- }else
- {
- checkedby2[k+1][q+1]=1;
- }}
- k=i-1;
- q=j-1;
- while(!occupied[k][q]&&k>0&&q>0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k--][q--]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==1 || occupied[k][q]==0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k][q]=1;
- }else
- {
- checkedby2[k+1][q+1]=1;
- }}
- k=i-1;
- q=j+1;
- while(!occupied[k][q]&&k>0&&q<COLUMNS)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k--][q++]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==1 || occupied[k][q]==0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k][q]=1;
- }else
- {
- checkedby2[k+1][q+1]=1;
- }}
- k=i+1;
- q=j-1;
- while(!occupied[k][q]&&k<ROWS&&q>0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k++][q--]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==1 || occupied[k][q]==0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k][q]=1;
- }else
- {
- checkedby2[k+1][q+1]=1;
- }}
- }
- if(domain[i][j]=='N')
- {
- q=j+2;
- k=i-1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby2[k+1][q+1]=1;
- if(occupied[k][q]!=2)
- movability2[k][q]=1;}
- q=j+2;
- k=i+1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby2[k+1][q+1]=1;
- if(occupied[k][q]!=2)
- movability2[k][q]=1;}
- q=j-2;
- k=i-1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby2[k+1][q+1]=1;
- if(occupied[k][q]!=2)
- movability2[k][q]=1;}
- q=j+2;
- k=i+1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby2[k+1][q+1]=1;
- if(occupied[k][q]!=2)
- movability2[k][q]=1;}
- q=j-1;
- k=i-2;
- if(k>-2&&q>-2){
- checkedby2[k+1][q+1]=1;
- if(occupied[k][q]!=2)
- movability2[k][q]=1;}
- q=j+1;
- k=i-2;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby2[k+1][q+1]=1;
- if(occupied[k][q]!=2)
- movability2[k][q]=1;}
- q=j+1;
- k=i+2;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby2[k+1][q+1]=1;
- if(occupied[k][q]!=2)
- movability2[k][q]=1;}
- q=j-1;
- k=i+2;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby2[k+1][q+1]=1;
- if(occupied[k][q]!=2)
- movability2[k][q]=1;}
- }
- if(domain[i][j]=='Q')
- {
- k=i+1;
- while(!occupied[k][j]&&k<ROWS)
- {
- checkedby2[k+1][j+1]=1;
- movability2[k++][j]=1;
- }if(k<8 &&k>=0){
- if(occupied[k][j]==1 ||occupied[k][j]==0)
- {
- checkedby2[k+1][j+1]=1;
- movability2[k][j]=1;
- }
- else
- {
- checkedby2[k+1][j+1]=1;
- }}
- k=i-1;
- while(!occupied[k][j]&&k>0)
- {
- checkedby2[k+1][j+1]=1;
- movability2[k--][j]=1;
- }if(k<8 &&k>=0){
- if(occupied[k][j]==1 ||occupied[k][j]==0)
- {
- checkedby2[k+1][j+1]=1;
- movability2[k][j]=1;
- }
- else
- {
- checkedby2[k+1][j+1]=1;
- }}
- k=j+1;
- while(!occupied[i][k]&&k<COLUMNS)
- {
- checkedby2[i+1][k+1]=1;
- movability2[i][k++]=1;
- }if(k<8 &&k>=0){
- if(occupied[i][k]==1 || occupied[i][k]==0 )
- {
- checkedby2[i+1][k+1]=1;
- movability2[i][k]=1;
- }
- else
- {
- checkedby2[i+1][k+1]=1;
- }}
- k=j-1;
- while(!occupied[i][k]&&k>0)
- {
- checkedby2[i+1][k+1]=1;
- movability2[i][k--]=1;
- }if(k<8 &&k>=0){
- if(occupied[i][k]==1 || occupied[i][k]==0)
- {
- checkedby2[i+1][k+1]=1;
- movability2[i][k]=1;
- }
- else
- {
- checkedby2[i+1][k+1]=1;
- }}
- k=i+1;
- q=j+1;
- while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k++][q++]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==1 || occupied[k][q]==0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k][q]=1;
- }else
- {
- checkedby2[k+1][q+1]=1;
- }}
- k=i-1;
- q=j-1;
- while(!occupied[k][q]&&k>0&&q>0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k--][q--]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==1 || occupied[k][q]==0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k][q]=1;
- }else
- {
- checkedby2[k+1][q+1]=1;
- }}
- k=i-1;
- q=j+1;
- while(!occupied[k][q]&&k>0&&q<COLUMNS)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k--][q++]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==1 || occupied[k][q]==0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k][q]=1;
- }else
- {
- checkedby2[k+1][q+1]=1;
- }}
- k=i+1;
- q=j-1;
- while(!occupied[k][q]&&k<ROWS&&q>0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k++][q--]=1;
- }if((k<8 && q<8)&&(k>=0 && q>=0)){
- if(occupied[k][q]==1 || occupied[k][q]==0)
- {
- checkedby2[k+1][q+1]=1;
- movability2[k][q]=1;
- }else
- {
- checkedby2[k+1][q+1]=1;
- }}
- }
- if(domain[i][j]=='P')
- {
- k=i-1;
- q=j+1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby2[k+1][q+1]=1;
- if(occupied[k][q]==1)
- movability2[k][q]=1;}
- q=j-1;
- if((k<8 && q<8)&&(k>=0 && q>=0)){
- checkedby2[k+1][q+1]=1;
- if(occupied[k][q]==1)
- movability2[k][q]=1;}
- if(i==6)
- {
- k=i-1;
- if(k<8 && k>=0){
- if(!occupied[k][j]){
- movability2[k][j]=1;}
- k--;
- if(k<8 && k>=0){
- if(!occupied[k][j])
- movability2[k][j]=1;}}
- }else{
- k=i-1;
- if(k<8 && k>=0){
- if(!occupied[k][j])
- movability2[k][j]=1;}
- }
- }
- }
- }
- }
- }
- void checking_for_checkmate(int i2,int j2)
- {
- int ic,jc;
- if(checkedby2[kp1i+1][kp1j+1])
- {
- ic=i2;
- jc=j2;
- }
- }
- void save_step(int i1,int j1,int i2,int j2,char eaten,char piece)
- {
- if(turn==1)
- {
- steps1[counter_steps1].domain1i=i1;
- steps1[counter_steps1].domain1j=j1;
- steps1[counter_steps1].domain2i=i2;
- steps1[counter_steps1].domain2j=j2;
- steps1[counter_steps1].eaten=eaten;
- steps1[counter_steps1].piece=piece;
- pointer1++;
- counter_steps1=pointer1;
- }else
- {
- steps2[counter_steps2].domain1i=i1;
- steps2[counter_steps2].domain1j=j1;
- steps2[counter_steps2].domain2i=i2;
- steps2[counter_steps2].domain2j=j2;
- steps2[counter_steps2].eaten=eaten;
- steps2[counter_steps2].piece=piece;
- pointer2++;
- counter_steps2=pointer2;
- }
- }
- void undo(void)
- {
- int i1,j1,i2,j2;
- char eaten;
- char piece;
- int checker;
- if(turn==2)
- {
- if(pointer1-1<0){
- printf("No thing to undo.\nPlease play a move.");
- movement();
- return;
- }else{
- pointer1--;
- i2=steps1[pointer1].domain1i;
- j2=steps1[pointer1].domain1j;
- i1=steps1[pointer1].domain2i;
- j1=steps1[pointer1].domain2j;
- eaten=steps1[pointer1].eaten;
- piece=steps1[pointer1].piece;
- domain[i2][j2]=piece;
- domain[i1][j1]=eaten;
- if(domain[i1][j1]=='k')
- {
- kp1i=i2;
- kp1j=j2;
- }
- if(isupper(domain[i1][j1])){
- number_killed2--;}
- }
- blackandwhite(i1,j1);
- }
- else
- {
- if(pointer2-1<0){
- printf("No thing to undo.\nPlease play a move.");
- movement();
- return;
- }else{
- pointer2--;
- i2=steps2[pointer2].domain1i;
- j2=steps2[pointer2].domain1j;
- i1=steps2[pointer2].domain2i;
- j1=steps2[pointer2].domain2j;
- eaten=steps2[pointer2].eaten;
- piece=steps2[pointer2].piece;
- domain[i2][j2]=piece;
- domain[i1][j1]=eaten;
- if(domain[i1][j1]=='K')
- {
- kp2i=i2;
- kp2j=j2;
- }
- if(islower(domain[i1][j1])){
- number_killed1--;}
- }
- blackandwhite(i1,j1);
- }
- }
- void redo(void)
- {
- int i1,j1,i2,j2;
- char eaten,piece;
- if(turn==1)
- {
- if(pointer1==counter_steps1)
- {
- printf("You can't re-do.\nPlease play a move.");
- movement();
- return;
- }
- else
- {
- i1=steps1[pointer1].domain1i;
- j1=steps1[pointer1].domain1j;
- i2=steps1[pointer1].domain2i;
- j2=steps1[pointer1].domain2j;
- eaten=steps1[pointer1].eaten;
- piece=steps1[pointer1].piece;
- if(isupper(domain[i2][j2]))
- number_killed2++;
- if(domain[i1][j1]=='p' && i2==7)
- {
- premote(domain[i2][j2]);
- }
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- if(domain[i2][j2]=='k')
- {
- kp1i=i2;
- kp1j=j2;
- }
- blackandwhite(i1,j1);
- pointer1++;
- }
- }else
- {
- if(pointer2==counter_steps2)
- {
- printf("You can't re-do.\nPlease play a move.");
- movement();
- return;
- }
- else
- {
- i1=steps2[pointer2].domain1i;
- j1=steps2[pointer2].domain1j;
- i2=steps2[pointer2].domain2i;
- j2=steps2[pointer2].domain2j;
- eaten=steps2[pointer2].eaten;
- if(islower(domain[i2][j2]))
- number_killed1++;
- if(domain[i1][j1]=='P' && i2==0)
- {
- premote(domain[i1][j1]);
- }
- domain[i2][j2]=domain[i1][j1];
- occupied[i1][j1]=0;
- if(domain[i2][j2]=='K')
- {
- kp2i=i2;
- kp2j=j2;
- }
- blackandwhite(i1,j1);
- pointer2++;
- }
- }
- }
- void read(char *i1,char *j1,char *i2,char *j2,char *promo)
- {
- int ch , i=0;
- ch=getchar();
- while(ch==' ' || ch=='\n')
- {
- ch=getchar();
- }
- *i1 = ch;
- if(ch=='s' || ch=='l' || ch=='u' || ch=='r')
- return;
- *j1 = getchar();
- *i2 = getchar();
- *j2 = getchar();
- while((ch = getchar()) != '\n')
- {
- if(i==0)
- {
- *promo=ch;
- i++;
- }
- ch = ' ';
- }
- }
- void save (void){
- FILE *fp;
- char save_name[20];
- int ch , i=0,j=0;
- printf("Enter file name : ");
- ch=getchar();
- while(ch==' ')
- {
- ch=getchar();
- }
- ch=getchar();
- while(ch!='\n')
- {
- save_name[i++]=ch;
- ch=getchar();
- }
- save_name[i++]='.';
- save_name[i++]='t';
- save_name[i++]='x';
- save_name[i++]='t';
- save_name[i++]='\0';
- fp=fopen(save_name,"w");
- for(i=0;i<ROWS;i++){
- for( j=0;j<ROWS;j++){
- fprintf(fp,"%c\n",domain[i][j]);
- }}
- fprintf(fp,"%d %d %d %d %d %d %d %d %d %d %d \n",number_killed1,number_killed2,counter_steps1,counter_steps2,turn,pointer1,pointer2,kp1i,kp1j,kp2i,kp2j);
- for( j=0;j<number_killed1;j++){
- fprintf(fp,"%c\n",killed1[j]);
- }
- for( j=0;j<number_killed2;j++){
- fprintf(fp,"%c\n",killed2[j]);
- }
- for(j=0;j<counter_steps1;j++){
- fprintf(fp,"%d %d %d %d %c %c \n",steps1[j].domain1i,steps1[j].domain1j,steps1[j].domain2i,steps1[j].domain2j,steps1[j].eaten,steps1[j].piece);
- }
- for(j=0;j<counter_steps2;j++){
- fprintf(fp,"%d %d %d %d %c %c \n",steps2[j].domain1i,steps2[j].domain1j,steps2[j].domain2i,steps2[j].domain2j,steps2[j].eaten,steps2[j].piece);
- }
- fclose(fp);
- }
- void load (void){
- FILE *fp;
- char save_name[20];
- int ch , i=0,j=0;
- printf("Enter file name: ");
- ch=getchar();
- while(ch==' ')
- {
- ch=getchar();
- }
- ch=getchar();
- while(ch!='\n')
- {
- save_name[i++]=ch;
- ch=getchar();
- }
- save_name[i++]='.';
- save_name[i++]='t';
- save_name[i++]='x';
- save_name[i++]='t';
- save_name[i++]='\0';
- fp=fopen(save_name,"r");
- for(i=0;i<ROWS;i++){
- for( j=0;j<ROWS;j++){
- fscanf(fp,"%c\n",&domain[i][j]);
- }}
- fscanf(fp,"%d %d %d %d %d %d %d %d %d %d %d \n",&number_killed1,&number_killed2,&counter_steps1,&counter_steps2,&turn,&pointer1,&pointer2,&kp1i,&kp1j,&kp2i,&kp2j);
- for( j=0;j<number_killed1;j++){
- fscanf(fp,"%c\n",&killed1[j]);
- }
- for( j=0;j<number_killed2;j++){
- fscanf(fp,"%c\n",&killed2[j]);
- }
- for(j=0;j<counter_steps1;j++){
- fscanf(fp,"%d %d %d %d %c %c \n",&steps1[j].domain1i,&steps1[j].domain1j,&steps1[j].domain2i,&steps1[j].domain2j,&steps1[j].eaten,&steps1[j].piece);
- }
- for(j=0;j<counter_steps2;j++){
- fscanf(fp,"%d %d %d %d %c %c \n",&steps2[j].domain1i,&steps2[j].domain1j,&steps2[j].domain2i,&steps2[j].domain2j,&steps2[j].eaten,&steps2[j].piece);
- }
- fclose(fp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement