Advertisement
Guest User

Untitled

a guest
Dec 16th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 81.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define ROWS 8
  5. #define COLUMNS 8
  6. #define PIECES 16
  7. #define MAX_DIFFERENCE 7
  8. #define MAX_PLAYS 1000000
  9. char domain[ROWS][COLUMNS];
  10. int occupied[ROWS][COLUMNS];
  11. char killed1[PIECES];
  12. char killed2[PIECES];
  13. int checkedby1[ROWS+2][COLUMNS+2];
  14. int checkedby2[ROWS+2][COLUMNS+2];
  15. int zone1[ROWS][COLUMNS];
  16. int zone2[ROWS][COLUMNS];
  17. int kp1i=0,kp1j=4;
  18. int kp2i=7,kp2j=4;
  19. int number_killed1=0;
  20. int number_killed2=0;
  21. int turn=1;
  22. int winner=0,draw=0;
  23. int counter_steps1=0,counter_steps2=0;
  24. int pointer1=0,pointer2=0;
  25. char letter[8]={'A','B','C','D','E','F','G','H'};
  26. int number[8]={1,2,3,4,5,6,7,8};
  27. int i1,j1,i2,j2;
  28. char promotion = 'o';
  29. void save (void);
  30. void load (void);
  31. void set_game(void);
  32. void print_board(void);
  33. void blackandwhite(int i,int j);
  34. void movement(void);
  35. void save_step(int i1,int j1,int i2,int j2,char eaten,char piece);
  36. void move_piece (int i1, int j1,int i2,int j2,int turn);
  37. void premote(char);
  38. void move_king(int i1,int j1,int i2, int j2);
  39. void set_checks1(void);
  40. void set_checks2(void);
  41. void read(char *i1,char *j1,char *i2,char *j2,char *promotion);
  42.  
  43. int movability1[ROWS][COLUMNS];
  44. int movability2[ROWS][COLUMNS];
  45.  
  46.  
  47. typedef struct {
  48. char piece;
  49. int domain1i;
  50. int domain1j;
  51. int domain2i;
  52. int domain2j;
  53. char eaten;}steps;
  54. steps steps1[MAX_PLAYS];
  55. steps steps2[MAX_PLAYS];
  56.  
  57.  
  58. int main()
  59. {
  60. set_game();
  61. do
  62. {
  63. system("CLS");
  64. system("COLOR E");
  65. print_board();
  66.  
  67. movement();
  68. set_checks1();
  69. set_checks2();
  70. if(turn==1)
  71. turn=2;
  72. else
  73. turn=1;
  74.  
  75. }while(winner==0 && draw==0);
  76.  
  77.  
  78.  
  79.  
  80.  
  81. return 0;
  82. }
  83. void movement(void)
  84. {
  85.  
  86. char i1c,j1c,i2c,j2c,promotion='o';
  87.  
  88. AGAIN :
  89. printf("\n\n");
  90. printf("\v Enter 'S' if you want to save this game or Enter 'L' if you want to load your game \n ");
  91. printf("Enter player %d move : ",turn);
  92.  
  93. read(&j1c,&i1c,&j2c,&i2c,&promotion);
  94. if(j1c=='u' || j1c=='U')
  95. {
  96. undo();
  97. return;
  98. }
  99. if(j1c=='r' || j1c=='R')
  100. {
  101. redo();
  102. return;
  103. }
  104. if(j1c=='s' || j1c=='S'){
  105. save();
  106. if(turn==1)
  107. turn=2;
  108. else
  109. turn=1;
  110.  
  111. return;
  112. }
  113. if(j1c=='l' || j1c=='L'){
  114. load();
  115. if(turn==1)
  116. turn=2;
  117. else
  118. turn=1;
  119.  
  120. return;
  121. }
  122. promotion=tolower(promotion);
  123.  
  124.  
  125. if(islower(j1c))
  126. j1c=toupper(j1c);
  127. if(islower(j2c))
  128. j2c= toupper(j2c);
  129. if(turn==1&&isupper(promotion))
  130. promotion=tolower(promotion);
  131. if(turn==2&&islower(promotion))
  132. promotion=toupper(promotion);
  133.  
  134. switch(j1c)
  135. {
  136. case 'A' : j1=0; break;
  137. case 'B' : j1=1; break;
  138. case 'C' : j1=2; break;
  139. case 'D' : j1=3; break;
  140. case 'E' : j1=4; break;
  141. case 'F' : j1=5; break;
  142. case 'G' : j1=6; break;
  143. case 'H' : j1=7; break;
  144. default : printf("Column intial is wrong! \nplease re-enter your move");
  145. goto AGAIN; break;
  146. }
  147. switch(j2c)
  148. {
  149. case 'A' : j2=0; break;
  150. case 'B' : j2=1; break;
  151. case 'C' : j2=2; break;
  152. case 'D' : j2=3; break;
  153. case 'E' : j2=4; break;
  154. case 'F' : j2=5; break;
  155. case 'G' : j2=6; break;
  156. case 'H' : j2=7; break;
  157. default : printf("Column final is wrong! \nplease re-enter your move");
  158. goto AGAIN; break;
  159. }
  160. switch(i1c)
  161. {
  162. case '8' : i1=0; break;
  163. case '7' : i1=1; break;
  164. case '6' : i1=2; break;
  165. case '5' : i1=3; break;
  166. case '4' : i1=4; break;
  167. case '3' : i1=5; break;
  168. case '2' : i1=6; break;
  169. case '1' : i1=7; break;
  170. default : printf("row initial is wrong! \nplease re-enter your move");
  171. goto AGAIN; break;
  172. }
  173. switch(i2c)
  174. {
  175. case '8' : i2=0; break;
  176. case '7' : i2=1; break;
  177. case '6' : i2=2; break;
  178. case '5' : i2=3; break;
  179. case '4' : i2=4; break;
  180. case '3' : i2=5; break;
  181. case '2' : i2=6; break;
  182. case '1' : i2=7; break;
  183. default : printf("row final is wrong! \nplease re-enter your move");
  184. goto AGAIN; break;
  185. }
  186.  
  187. if(occupied[i1][j1]==0)
  188. {
  189. printf("nothing to move from the initial position.\nplease re-enter your move.");
  190. goto AGAIN;
  191. }
  192. else
  193. {
  194. if (turn==1)
  195. {
  196. if(islower(domain[i1][j1]))
  197. goto CONT;
  198. else
  199. {
  200. printf("You can't move the other player's piece.\nplease re-enter your move");
  201. goto AGAIN;
  202. }
  203. }
  204. if (turn==2)
  205. {
  206. if(isupper(domain[i1][j1]))
  207. goto CONT;
  208. else
  209. {
  210. printf("You can't move the other player's piece.\n please re-enter your move");
  211. goto AGAIN;
  212. }
  213. }
  214. }
  215. CONT :
  216. move_piece(i1,j1,i2,j2,turn);
  217. blackandwhite(i1,j1);
  218.  
  219.  
  220. }
  221. void set_game(void)
  222. {
  223. /*filling the 1st , 2nd , 7th and 8th rows*/
  224. int i,j;
  225. for(i=0; i<2; i++)
  226. {
  227. for(j=0;j<COLUMNS;j++)
  228. {
  229. occupied[i][j]=1;
  230. }
  231. }
  232. for(i=6; i<8; i++)
  233. {
  234. for(j=0;j<COLUMNS;j++)
  235. {
  236. occupied[i][j]=2;
  237. }
  238. }
  239.  
  240. /* setting pawns on board*/
  241.  
  242. for(j=0; j<COLUMNS; j++)
  243. {
  244. domain[1][j]='p';
  245. domain[6][j]='P';
  246. }
  247. /*eltabya*/
  248. domain[0][0]=domain[0][7]='r';
  249. domain[7][0]=domain[7][7]='R';
  250. /*el7osan*/
  251. domain[0][1]=domain[0][6]='n';
  252. domain[7][1]=domain[7][6]='N';
  253. /*elephant*/
  254. domain[0][2]=domain[0][5]='b';
  255. domain[7][2]=domain[7][5]='B';
  256. /*Queen*/
  257. domain[0][3]='q';
  258. domain[7][3]='Q';
  259. /*king*/
  260. domain[0][4]='k';
  261. domain[7][4]='K';
  262. for(i=2; i<6;i++)
  263. {
  264. for(j=0;j<COLUMNS;j++)
  265. {
  266. occupied[i][j]=0;
  267. if((i+j)%2==0)
  268. {
  269. domain[i][j]='.';
  270. }else{
  271. domain[i][j]='-';
  272. }
  273. }
  274. }
  275.  
  276. for(i=0; i<ROWS+2;i++)
  277. {
  278. checkedby1[i][0]=1;
  279. checkedby1[i][9]=1;
  280. checkedby2[i][0]=1;
  281. checkedby2[i][9]=1;
  282. checkedby1[0][i]=1;
  283. checkedby1[9][i]=1;
  284. checkedby2[0][i]=1;
  285. checkedby2[9][i]=1;
  286. }
  287. for(j=1;j<COLUMNS+1;j++){
  288. checkedby1[3][j]=1;
  289. checkedby2[6][j]=1;
  290. }
  291.  
  292.  
  293.  
  294.  
  295.  
  296. }
  297. void print_board(void)
  298. {
  299. int i,j,k,c;
  300. c=0;
  301. int n=33;
  302. printf(" ");
  303. for(k=0; k<8;k++)
  304. printf(" %c",letter[k]);
  305. printf("\n");
  306. printf(" ");
  307. for(k=0; k<n;k++){
  308. printf("-");
  309. if(k==n-1)
  310. printf("\n");
  311. }
  312. for(i=0;i<ROWS;i++)
  313. {
  314. for(j=0; j<COLUMNS;j++)
  315. {
  316. if(j==0)
  317. {
  318. printf(" %d | %c |",number[7-i],domain[i][j]);
  319.  
  320. }
  321. else if (j==7)
  322. {
  323. printf(" %c | %d",domain[i][j],number[7-i]);
  324. }
  325. else
  326. {
  327. printf(" %c |",domain[i][j]);
  328. }
  329. if(j==7 && i==4){
  330. printf(" Killed Player 1 : ");
  331. while(c<number_killed1)
  332. {
  333. printf(" %c,",killed1[c]);
  334. c++;
  335. if(c==8)
  336. printf("\n");
  337. }}
  338. c=0;
  339. if(j==7 && i==5){
  340. printf(" Killed Player 2 :");
  341. while(c<number_killed2)
  342. {
  343. printf(" %c,",killed2[c]);
  344. c++;
  345. if(c==8)
  346. printf("\n");
  347. }}
  348. if(j==COLUMNS-1)
  349. {
  350.  
  351.  
  352. printf("\n");
  353. printf(" ");
  354. for(k=0; k<n;k++){
  355. printf("-");
  356. if(k==n-1)
  357. printf("\n");
  358. }
  359.  
  360. }
  361.  
  362.  
  363.  
  364. }
  365. }
  366. printf(" ");
  367.  
  368. for(k=0; k<8;k++)
  369. printf(" %c",letter[k]);
  370.  
  371.  
  372.  
  373. }
  374. void blackandwhite(int i,int j)
  375.  
  376. {
  377.  
  378. if(occupied[i][j]==0)
  379. {
  380. if((i+j)%2==0)
  381. domain[i][j]='.';
  382. else
  383. domain[i][j]='-';
  384. }
  385.  
  386.  
  387. }
  388. void move_piece(int i1, int j1,int i2, int j2,int turn){
  389.  
  390.  
  391. /* for player 1*/
  392. if(turn==1){
  393. /*moving pawn*/
  394. if(domain[i1][j1]=='p')
  395. {
  396. if(i1==1){
  397. /*if next square is correct and empty*/
  398. if((i2-i1==1||i2-i1==2)&&j1==j2&& occupied[i2][j2]==0&&occupied[i1+1][j2]==0){
  399. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  400. domain[i2][j2]=domain[i1][j1];
  401. occupied[i1][j1]=0;
  402. occupied[i2][j2]=1;
  403.  
  404. } else if(i2==i1+1&&(j2==j1-1||j2==j1+1)&&occupied[i2][j2]==2)
  405. {
  406. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  407. killed2[number_killed2]=domain[i2][j2];
  408. domain[i2][j2]=domain[i1][j1];
  409. number_killed2++;
  410. occupied[i1][j1]=0;
  411. occupied[i2][j2]=1;
  412.  
  413.  
  414.  
  415. }
  416. else
  417. {
  418. printf("Incorrect move.\nPlease re-enter your move.");
  419. movement();
  420. }
  421. }
  422. else if((i2-i1==1)&&j1==j2&& occupied[i2][j2]==0){
  423. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  424. if(i2==7)
  425. {
  426. premote(domain[i1][j1]);
  427. }
  428.  
  429. domain[i2][j2]=domain[i1][j1];
  430. occupied[i1][j1]=0;
  431. occupied[i2][j2]=1;
  432. return;
  433.  
  434.  
  435.  
  436. }
  437.  
  438. /*eaten player 2 piece*/
  439. else if(i2==i1+1&&(j2==j1-1||j2==j1+1)&&occupied[i2][j2]==2)
  440. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  441.  
  442. if(i2==7)
  443. {
  444. premote(domain[i1][j1]);
  445.  
  446. }
  447.  
  448. killed2[number_killed2]=domain[i2][j2];
  449. domain[i2][j2]=domain[i1][j1];
  450. number_killed2++;
  451. occupied[i1][j1]=0;
  452. occupied[i2][j2]=1;
  453.  
  454.  
  455.  
  456. }
  457.  
  458. else
  459. {
  460. printf("Incorrect move.\nPlease re-enter your move.");
  461. movement();
  462. }
  463. return;
  464.  
  465. }
  466. /*moving tabya*/
  467. if(domain[i1][j1]=='r')
  468. {
  469. /*moving through the row*/
  470. if(i2==i1)
  471. {
  472. int n;
  473. if(j2>j1){
  474. for(n=j1+1;n<j2;n++)
  475. {
  476. if(occupied[i1][n])
  477. {
  478. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  479. movement();
  480. goto OUT;
  481. }}}
  482. if(j1>j2)
  483. {
  484. for(n=j1-1;n>j2;n--)
  485. {
  486. if(occupied[i1][n])
  487. {
  488. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  489. movement();
  490. goto OUT;
  491. }}
  492. }
  493. if(occupied[i1][j2]==1)
  494. {
  495. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  496. movement();
  497. return;
  498. }save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  499. if(occupied[i2][j2]==2)
  500. {
  501. occupied[i2][j2]=1;
  502. occupied[i1][j1]=0;
  503. killed2[number_killed2]=domain[i2][j2];
  504. domain[i2][j2]=domain[i1][j1];
  505. number_killed2++;
  506. }
  507. if(occupied[i2][j2]==0)
  508. {
  509. domain[i2][j2]=domain[i1][j1];
  510. occupied[i1][j1]=0;
  511. occupied[i2][j2]=1;
  512.  
  513. }
  514. }
  515. else if(j2==j1)
  516. {
  517. int n;
  518. if(i2>i1)
  519. {
  520. for(n=i1+1;n<i2;n++)
  521. {
  522. if(occupied[n][j1])
  523. {
  524. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  525. movement();
  526. return;
  527.  
  528. }}}
  529. if(i1>i2)
  530. {
  531. for(n=i1-1;n>i2;n--)
  532. {
  533. if(occupied[n][j1])
  534. {
  535. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  536. movement();
  537. return;
  538.  
  539. }}
  540. }
  541. if(occupied[i2][j2]==1)
  542. {
  543. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  544. movement();
  545. return;
  546. }save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  547. if(occupied[i2][j2]==2)
  548. {
  549. occupied[i1][j1]=0;
  550. occupied[i2][j2]=1;
  551. killed2[number_killed2]=domain[i2][j2];
  552. domain[i2][j2]=domain[i1][j1];
  553. number_killed2++;
  554. }
  555. if(occupied[i2][j2]==0)
  556. {
  557. occupied[i1][j1]=0;
  558. occupied[i2][j2]=1;
  559. domain[i2][j2]=domain[i1][j1];
  560. }
  561.  
  562. }else
  563. {
  564. printf("Incorrect move.\nPlease re-enter your move.");
  565. movement();
  566. }
  567.  
  568. }
  569. /*moving the knight*/
  570. if(domain[i1][j1]=='n')
  571. {
  572. 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)))
  573. {
  574. if(occupied[i2][j2]==1)
  575. {
  576. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  577. movement();
  578. return;
  579. }save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  580. if(occupied[i2][j2]==2)
  581. {
  582. occupied[i1][j1]=0;
  583. occupied[i2][j2]=1;
  584. killed2[number_killed2]=domain[i2][j2];
  585. domain[i2][j2]=domain[i1][j1];
  586. number_killed2++;
  587. }
  588. if(occupied[i2][j2]==0)
  589. {
  590. domain[i2][j2]=domain[i1][j1];
  591. occupied[i1][j1]=0;
  592. occupied[i2][j2]=1;
  593. }
  594. }else
  595. {
  596. printf("Incorrect move.\nPlease re-enter your move.");
  597. movement();
  598. }
  599. }
  600. if(domain[i1][j1]=='b')
  601. {
  602. int n,m;
  603. if(j2-j1==i2-i1 || j2-j1==i1-i2)
  604. {
  605. if(j2>j1&&i2>i1)
  606. {
  607. m=j1+1;
  608. for(n=i1+1;n<i2;n++)
  609. {
  610.  
  611.  
  612. if(occupied[n][m++])
  613. {
  614. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  615. movement();
  616. return;
  617. }
  618.  
  619. }
  620. }
  621.  
  622.  
  623.  
  624.  
  625. else if(j1>j2 && i2>i1)
  626. {
  627. m=j1-1;
  628. for(n=i1+1;n<i2;n++)
  629. {
  630.  
  631.  
  632. if(occupied[n][m--])
  633. {
  634. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  635. movement();
  636. return;
  637. }
  638.  
  639. }
  640. }
  641. else if (i1>i2 && j2>j1)
  642. {
  643. for(n=i1-1;n>i2;n--)
  644. {
  645.  
  646. m=j1+1;
  647. if(occupied[n][m++])
  648. {
  649. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  650. movement();
  651. return;
  652. }
  653.  
  654. }
  655.  
  656. }
  657. else if(i2<i1 && j2<j1)
  658. {
  659. for(n=i1-1;n>i2;n--)
  660. {
  661. m=j1-1;
  662.  
  663. if(occupied[n][m--])
  664. {
  665. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  666. movement();
  667. return;
  668. }
  669.  
  670. }
  671. }}
  672. else{
  673. printf("Incorrect move.\nPlease re-enter your move.");
  674. movement();
  675. return;
  676. }
  677. if(occupied[i2][j2]==1)
  678. {
  679. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  680. movement();
  681. return;
  682. }
  683. if(occupied[i2][j2]==2)
  684. {
  685. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  686. occupied[i1][j1]=0;
  687. occupied[i2][j2]=1;
  688. killed2[number_killed2]=domain[i2][j2];
  689. domain[i2][j2]=domain[i1][j1];
  690. number_killed2++;
  691. }
  692. if(occupied[i2][j2]==0)
  693. {
  694. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  695. domain[i2][j2]=domain[i1][j1];
  696. occupied[i1][j1]=0;
  697. occupied[i2][j2]=1;
  698. }
  699.  
  700. }
  701.  
  702.  
  703.  
  704. }
  705. if(domain[i1][j1]=='q')
  706. {
  707. int n,m;
  708. if(j2-j1==i2-i1 || j2-j1==i1-i2)
  709. {
  710. if(j2>j1&&i2>i1)
  711. {
  712. m=j1+1;
  713. for(n=i1+1;n<i2;n++)
  714. {
  715.  
  716.  
  717. if(occupied[n][m++])
  718. {
  719. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  720. movement();
  721. goto OUT;
  722. }
  723.  
  724. }
  725. }
  726.  
  727.  
  728.  
  729.  
  730. else if(j1>j2 && i2>i1)
  731. {
  732. m=j1-1;
  733. for(n=i1+1;n<i2;n++)
  734. {
  735.  
  736.  
  737. if(occupied[n][m--])
  738. {
  739. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  740. movement();
  741. return;
  742. }
  743.  
  744. }
  745. }
  746. else if (i1>i2 && j2>j1)
  747. {
  748. for(n=i1-1;n>i2;n--)
  749. {
  750.  
  751. m=j1+1;
  752. if(occupied[n][m++])
  753. {
  754. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  755. movement();
  756. return;
  757. }
  758.  
  759. }
  760.  
  761. }
  762. else if(i2<i1 && j2<j1)
  763. {
  764. for(n=i1-1;n>i2;n--)
  765. {
  766. m=j1-1;
  767.  
  768. if(occupied[n][m--])
  769. {
  770. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  771. movement();
  772. return;
  773. }
  774.  
  775. }
  776. }
  777. if(occupied[i2][j2]==1)
  778. {
  779. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  780. movement();
  781. return;
  782. }
  783. if(occupied[i2][j2]==2)
  784. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  785. occupied[i1][j1]=0;
  786. occupied[i2][j2]=1;
  787. killed2[number_killed2]=domain[i2][j2];
  788. domain[i2][j2]=domain[i1][j1];
  789. number_killed2++;
  790. }
  791. if(occupied[i2][j2]==0)
  792. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  793. domain[i2][j2]=domain[i1][j1];
  794. occupied[i1][j1]=0;
  795. occupied[i2][j2]=1;
  796. }
  797. }
  798. else if(i2==i1)
  799. {
  800. int n;
  801. if(j2>j1){
  802. for(n=j1+1;n<j2;n++)
  803. {
  804. if(occupied[i1][n])
  805. {
  806. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  807. movement();
  808. return;
  809. }}}
  810. if(j1>j2)
  811. {
  812. for(n=j1-1;n>j2;n--)
  813. {
  814. if(occupied[i1][n])
  815. {
  816. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  817. movement();
  818. return;
  819. }}
  820. }
  821. if(occupied[i1][j2]==1)
  822. {
  823. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  824. movement();
  825. return;
  826. }
  827. if(occupied[i2][j2]==2)
  828. {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  829. occupied[i2][j2]=1;
  830. occupied[i1][j1]=0;
  831. killed2[number_killed2]=domain[i2][j2];
  832. domain[i2][j2]=domain[i1][j1];
  833. number_killed2++;
  834. }
  835. if(occupied[i2][j2]==0)
  836. {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  837. domain[i2][j2]=domain[i1][j1];
  838. occupied[i1][j1]=0;
  839. occupied[i2][j2]=1;
  840.  
  841. }
  842. }
  843. else if(j2==j1)
  844. {
  845. int n;
  846. if(i2>i1)
  847. {
  848. for(n=i1+1;n<i2;n++)
  849. {
  850. if(occupied[n][j1])
  851. {
  852. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  853. movement();
  854. return;
  855.  
  856. }}}
  857. if(i1>i2)
  858. {
  859. for(n=i1-1;n>i2;n--)
  860. {
  861. if(occupied[n][j1])
  862. {
  863. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  864. movement();
  865. return;
  866.  
  867. }}
  868. }
  869. if(occupied[i2][j2]==1)
  870. {
  871. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  872. movement();
  873. }
  874. if(occupied[i2][j2]==2)
  875. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  876. occupied[i1][j1]=0;
  877. occupied[i2][j2]=1;
  878. killed2[number_killed2]=domain[i2][j2];
  879. domain[i2][j2]=domain[i1][j1];
  880. number_killed2++;
  881. }
  882. if(occupied[i2][j2]==0)
  883. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  884. occupied[i1][j1]=0;
  885. occupied[i2][j2]=1;
  886. domain[i2][j2]=domain[i1][j1];
  887. }
  888.  
  889. }
  890. else
  891. {
  892. printf("Incorrect move.\nPlease re-enter your move.");
  893. movement();
  894. }
  895.  
  896. }
  897.  
  898. if(domain[i1][j1]=='k')
  899. {
  900. move_king(i1,j1,i2,j2);
  901. }
  902.  
  903. /******* PLAYER 2**********/
  904. if(turn==2)
  905. {
  906. if(domain[i1][j1]=='P')
  907. {
  908.  
  909.  
  910. if(i1==6){
  911. /*if next square is correct and empty*/
  912. if((i1-i2==1||i1-i2==2)&&j1==j2&& occupied[i2][j2]==0&&occupied[i1-1][j2]==0){
  913. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  914. domain[i2][j2]=domain[i1][j1];
  915. occupied[i1][j1]=0;
  916. occupied[i2][j2]=2;
  917.  
  918. }else if((i1-i2==1)&&j1==j2&& occupied[i2][j2]==0){
  919. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  920. domain[i2][j2]=domain[i1][j1];
  921. occupied[i1][j1]=0;
  922. occupied[i2][j2]=2;
  923.  
  924.  
  925.  
  926.  
  927. }
  928. else
  929. {
  930. printf("Incorrect move.\nPlease re-enter your move.");
  931. movement();
  932. }
  933. }
  934. else if((i1-i2==1)&&j1==j2&& occupied[i2][j2]==0){
  935. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  936. if(i2==0)
  937. {
  938. premote(domain[i1][j1]);
  939. }
  940.  
  941. domain[i2][j2]=domain[i1][j1];
  942. occupied[i1][j1]=0;
  943. occupied[i2][j2]=2;
  944.  
  945.  
  946.  
  947.  
  948. }
  949.  
  950. /*eaten player 1 piece*/
  951. else if(i2==i1-1&&(j2==j1-1||j2==j1+1)&&occupied[i2][j2]==1)
  952. {
  953. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  954. if(i2==0)
  955. {
  956. premote(domain[i1][j1]);
  957.  
  958. }
  959.  
  960. killed1[number_killed1]=domain[i2][j2];
  961. domain[i2][j2]=domain[i1][j1];
  962. number_killed1++;
  963. occupied[i1][j1]=0;
  964. occupied[i2][j2]=2;
  965.  
  966.  
  967.  
  968. }
  969.  
  970. else
  971. {
  972. printf("Incorrect move.\nPlease re-enter your move.");
  973. movement();
  974. return;
  975. }
  976. return;
  977.  
  978. }
  979. if(domain[i1][j1]=='R')
  980. {
  981. if(i2==i1)
  982. {
  983. int n;
  984. if(j2>j1){
  985. for(n=j1+1;n<j2;n++)
  986. {
  987. if(occupied[i1][n])
  988. {
  989. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  990. movement();
  991. return;
  992. }}}
  993. if(j1>j2)
  994. {
  995. for(n=j1-1;n>j2;n--)
  996. {
  997. if(occupied[i1][n])
  998. {
  999. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1000. movement();
  1001. return;
  1002. }}
  1003. }
  1004. if(occupied[i1][j2]==2)
  1005. {
  1006. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1007. movement();
  1008. return;
  1009. }
  1010. if(occupied[i2][j2]==1)
  1011. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1012. occupied[i2][j2]=2;
  1013. occupied[i1][j1]=0;
  1014. killed1[number_killed1]=domain[i2][j2];
  1015. domain[i2][j2]=domain[i1][j1];
  1016. number_killed1++;
  1017. }
  1018. if(occupied[i2][j2]==0)
  1019. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1020. domain[i2][j2]=domain[i1][j1];
  1021. occupied[i1][j1]=0;
  1022. occupied[i2][j2]=2;
  1023.  
  1024. }
  1025. }
  1026. else if(j2==j1)
  1027. {
  1028. int n;
  1029. if(i2>i1)
  1030. {
  1031. for(n=i1+1;n<i2;n++)
  1032. {
  1033. if(occupied[n][j1])
  1034. {
  1035. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1036. movement();
  1037. return;
  1038.  
  1039. }}}
  1040. if(i1>i2)
  1041. {
  1042. for(n=i1-1;n>i2;n--)
  1043. {
  1044. if(occupied[n][j1])
  1045. {
  1046. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1047. movement();
  1048. return;
  1049.  
  1050. }}
  1051. }
  1052. if(occupied[i2][j2]==2)
  1053. {
  1054. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1055. movement();
  1056. return;
  1057. }
  1058. if(occupied[i2][j2]==1)
  1059. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1060. occupied[i1][j1]=0;
  1061. occupied[i2][j2]=2;
  1062. killed1[number_killed1]=domain[i2][j2];
  1063. domain[i2][j2]=domain[i1][j1];
  1064. number_killed1++;
  1065. }
  1066. if(occupied[i2][j2]==0)
  1067. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1068. occupied[i1][j1]=0;
  1069. occupied[i2][j2]=2;
  1070. domain[i2][j2]=domain[i1][j1];
  1071. }
  1072.  
  1073. }else
  1074. {
  1075. printf("Incorrect move.\nPlease re-enter your move.");
  1076. movement();
  1077. return;
  1078. }
  1079.  
  1080. }
  1081. if(domain[i1][j1]=='N')
  1082. {
  1083. 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)))
  1084. {
  1085. if(occupied[i2][j2]==2)
  1086. {
  1087. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1088. movement();
  1089. return;
  1090. }
  1091. if(occupied[i2][j2]==1)
  1092. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1093. occupied[i1][j1]=0;
  1094. occupied[i2][j2]=2;
  1095. killed1[number_killed1]=domain[i2][j2];
  1096. domain[i2][j2]=domain[i1][j1];
  1097. number_killed1++;
  1098. }
  1099. if(occupied[i2][j2]==0)
  1100. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1101. domain[i2][j2]=domain[i1][j1];
  1102. occupied[i1][j1]=0;
  1103. occupied[i2][j2]=2;
  1104. }
  1105. }else
  1106. {
  1107. printf("Incorrect move.\nPlease re-enter your move.");
  1108. movement();
  1109. }
  1110. }
  1111. if(domain[i1][j1]=='B')
  1112. {
  1113.  
  1114. int n,m;
  1115. if(j2-j1==i2-i1 || j2-j1==i1-i2)
  1116. {
  1117. if(j2>j1&&i2>i1)
  1118. {
  1119. m=j1+1;
  1120. for(n=i1+1;n<i2;n++)
  1121. {
  1122.  
  1123.  
  1124. if(occupied[n][m++])
  1125. {
  1126. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1127. movement();
  1128. goto OUT;
  1129. }
  1130.  
  1131. }
  1132. }
  1133.  
  1134.  
  1135.  
  1136.  
  1137. else if(j1>j2 && i2>i1)
  1138. {
  1139. m=j1-1;
  1140. for(n=i1+1;n<i2;n++)
  1141. {
  1142.  
  1143.  
  1144. if(occupied[n][m--])
  1145. {
  1146. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1147. movement();
  1148. goto OUT;
  1149. }
  1150.  
  1151. }
  1152. }
  1153. else if (i1>i2 && j2>j1)
  1154. {
  1155. for(n=i1-1;n>i2;n--)
  1156. {
  1157.  
  1158. m=j1+1;
  1159. if(occupied[n][m++])
  1160. {
  1161. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1162. movement();
  1163. return;
  1164. }
  1165.  
  1166. }
  1167.  
  1168. }
  1169. else if(i2<i1 && j2<j1)
  1170. {
  1171. for(n=i1-1;n>i2;n--)
  1172. {
  1173. m=j1-1;
  1174.  
  1175. if(occupied[n][m--])
  1176. {
  1177. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1178. movement();
  1179. return;
  1180. }
  1181.  
  1182. }
  1183. }}
  1184. else{
  1185. printf("Incorrect move.\nPlease re-enter your move.");
  1186. movement();
  1187. return;
  1188. }
  1189. if(occupied[i2][j2]==2)
  1190. {
  1191. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1192. movement();
  1193. return;
  1194. }
  1195. if(occupied[i2][j2]==1)
  1196. {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1197. occupied[i1][j1]=0;
  1198. occupied[i2][j2]=2;
  1199. killed1[number_killed1]=domain[i2][j2];
  1200. domain[i2][j2]=domain[i1][j1];
  1201. number_killed1++;
  1202. }
  1203. if(occupied[i2][j2]==0)
  1204. {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1205. domain[i2][j2]=domain[i1][j1];
  1206. occupied[i1][j1]=0;
  1207. occupied[i2][j2]=2;
  1208. }
  1209.  
  1210.  
  1211.  
  1212.  
  1213. }
  1214. if(domain[i1][j1]=='Q')
  1215. {
  1216. int n,m;
  1217. if(j2-j1==i2-i1 || j2-j1==i1-i2)
  1218. {
  1219. if(j2>j1&&i2>i1)
  1220. {
  1221. m=j1+1;
  1222. for(n=i1+1;n<i2;n++)
  1223. {
  1224.  
  1225.  
  1226. if(occupied[n][m++])
  1227. {
  1228. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1229. movement();
  1230. return;
  1231. }
  1232.  
  1233. }
  1234. }
  1235.  
  1236.  
  1237.  
  1238.  
  1239. else if(j1>j2 && i2>i1)
  1240. {
  1241. m=j1-1;
  1242. for(n=i1+1;n<i2;n++)
  1243. {
  1244.  
  1245.  
  1246. if(occupied[n][m--])
  1247. {
  1248. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1249. movement();
  1250. return;
  1251. }
  1252.  
  1253. }
  1254. }
  1255. else if (i1>i2 && j2>j1)
  1256. {
  1257. for(n=i1-1;n>i2;n--)
  1258. {
  1259.  
  1260. m=j1+1;
  1261. if(occupied[n][m++])
  1262. {
  1263. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1264. movement();
  1265. return;
  1266. }
  1267.  
  1268. }
  1269.  
  1270. }
  1271. else if(i2<i1 && j2<j1)
  1272. {
  1273. for(n=i1-1;n>i2;n--)
  1274. {
  1275. m=j1-1;
  1276.  
  1277. if(occupied[n][m--])
  1278. {
  1279. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1280. movement();
  1281. return;
  1282. }
  1283.  
  1284. }
  1285. }
  1286. if(occupied[i2][j2]==2)
  1287. {
  1288. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1289. movement();
  1290. }
  1291. if(occupied[i2][j2]==1)
  1292. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1293. occupied[i1][j1]=0;
  1294. occupied[i2][j2]=2;
  1295. killed1[number_killed1]=domain[i2][j2];
  1296. domain[i2][j2]=domain[i1][j1];
  1297. number_killed1++;
  1298. }
  1299. if(occupied[i2][j2]==0)
  1300. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1301. domain[i2][j2]=domain[i1][j1];
  1302. occupied[i1][j1]=0;
  1303. occupied[i2][j2]=2;
  1304. }
  1305. }
  1306. else if(i2==i1)
  1307. {
  1308. int n;
  1309. if(j2>j1){
  1310. for(n=j1+1;n<j2;n++)
  1311. {
  1312. if(occupied[i1][n])
  1313. {
  1314. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1315. movement();
  1316. return;
  1317. }}}
  1318. if(j1>j2)
  1319. {
  1320. for(n=j1-1;n>j2;n--)
  1321. {
  1322. if(occupied[i1][n])
  1323. {
  1324. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1325. movement();
  1326. return;
  1327. }}
  1328. }
  1329. if(occupied[i1][j2]==2)
  1330. {
  1331. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1332. movement();
  1333. return;
  1334. }
  1335. if(occupied[i2][j2]==1)
  1336. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1337. occupied[i2][j2]=2;
  1338. occupied[i1][j1]=0;
  1339. killed1[number_killed1]=domain[i2][j2];
  1340. domain[i2][j2]=domain[i1][j1];
  1341. number_killed1++;
  1342. }
  1343. if(occupied[i2][j2]==0)
  1344. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1345. domain[i2][j2]=domain[i1][j1];
  1346. occupied[i1][j1]=0;
  1347. occupied[i2][j2]=2;
  1348.  
  1349. }
  1350. }
  1351. else if(j2==j1)
  1352. {
  1353. int n;
  1354. if(i2>i1)
  1355. {
  1356. for(n=i1+1;n<i2;n++)
  1357. {
  1358. if(occupied[n][j1])
  1359. {
  1360. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1361. movement();
  1362. return;
  1363.  
  1364. }}}
  1365. if(i1>i2)
  1366. {
  1367. for(n=i1-1;n>i2;n--)
  1368. {
  1369. if(occupied[n][j1])
  1370. {
  1371. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1372. movement();
  1373. return;
  1374.  
  1375. }}
  1376. }
  1377. if(occupied[i2][j2]==2)
  1378. {
  1379. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1380. movement();
  1381. return;
  1382. }
  1383. if(occupied[i2][j2]==1)
  1384. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1385. occupied[i1][j1]=0;
  1386. occupied[i2][j2]=2;
  1387. killed1[number_killed1]=domain[i2][j2];
  1388. domain[i2][j2]=domain[i1][j1];
  1389. number_killed1++;
  1390. }
  1391. if(occupied[i2][j2]==0)
  1392. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1393. occupied[i1][j1]=0;
  1394. occupied[i2][j2]=2;
  1395. domain[i2][j2]=domain[i1][j1];
  1396. }
  1397.  
  1398. }
  1399. else
  1400. {
  1401. printf("Incorrect move.\nPlease re-enter your move.");
  1402. movement();
  1403. return;
  1404. }
  1405.  
  1406. }
  1407. if(domain[i1][j1]=='K')
  1408. {
  1409. move_king(i1,j1,i2,j2);
  1410. }
  1411. }
  1412.  
  1413.  
  1414. OUT : return;
  1415. }
  1416.  
  1417.  
  1418. void premote(char a)
  1419. {
  1420. if(promotion=='o')
  1421. {
  1422. printf("please enter a promotion for your pawn :");
  1423. scanf(" %c",&domain[i1][j1]);
  1424.  
  1425. }
  1426. if(domain[i1][j1]!= 'o' && domain[i1][j1]!='r' && domain[i1][j1]!='n' && domain[i1][j1]!='b' && domain[i1][j1] != 'q')
  1427. {
  1428. do
  1429. {
  1430.  
  1431.  
  1432. printf("Incorrect promotion\nPlease enter a correct promotion : ");
  1433. scanf(" %c",&domain[i1][j1]);
  1434. if(isupper(domain[i1][j1]))
  1435. domain[i1][j1]=tolower(domain[i1][j1]);
  1436. }
  1437.  
  1438. while(domain[i1][j1]!='r' && domain[i1][j1]!='n' && domain[i1][j1]!='b' && domain[i1][j1] != 'q');
  1439. }
  1440. if(turn==1&&isupper(domain[i1][j1]))
  1441. domain[i1][j1]=tolower(domain[i1][j1]);
  1442. if(turn==2&&islower(domain[i1][j1]))
  1443. domain[i1][j1]=toupper(domain[i1][j1]);
  1444. }
  1445. void move_king(int i1,int j1,int i2,int j2)
  1446. {
  1447. if((j2-j1==-1 || j2-j1==0 || j2-j1==1) && (i2-i1==-1 || i2-i1==0 || i2-i1==1)){
  1448. int k,q;
  1449. if(domain[i1][j1]=='k')
  1450. {
  1451. for(k=i1-1; k<=i1+1; k++)
  1452. {
  1453. for(q=j1-1; q<=j1+1; q++)
  1454. {
  1455. if((k==i1 && q==j1) || (k<0 || k>7 || q<0 || q>7) )
  1456. continue;
  1457.  
  1458. if(!checkedby2[k+1][q+1] && occupied[k][q] != 1)
  1459. {
  1460. goto CONT2;
  1461. }
  1462. }
  1463. }
  1464. printf("You can't move the king\nPlease enter an-other move.");
  1465. movement();
  1466. return;
  1467. CONT2 :
  1468.  
  1469. if(checkedby2[i2+1][j2+1])
  1470. {
  1471. printf("You can't move the king to this position or you will lose.");
  1472. movement();
  1473. return;
  1474. }else
  1475. {
  1476. if(occupied[i2][j2]==1)
  1477. {
  1478. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1479. movement();
  1480. return;
  1481. }
  1482. if(occupied[i2][j2]==2)
  1483. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1484. kp1i=i2;
  1485. kp1j=j2;
  1486. occupied[i1][j1]=0;
  1487. occupied[i2][j2]=1;
  1488. killed2[number_killed2]=domain[i2][j2];
  1489. domain[i2][j2]=domain[i1][j1];
  1490. number_killed2++;
  1491. }
  1492. if(occupied[i2][j2]==0)
  1493. {
  1494.  
  1495. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1496. kp1i=i2;
  1497. kp1j=j2;
  1498. domain[i2][j2]=domain[i1][j1];
  1499. occupied[i1][j1]=0;
  1500. occupied[i2][j2]=1;
  1501. }
  1502.  
  1503. }
  1504. }else if(domain[i1][j1]=='K')
  1505. {
  1506.  
  1507. for(k=i1-1; k<=i1+1; k++)
  1508. {
  1509. for(q=j1-1; q<=j1+1; q++)
  1510. {
  1511. if((k==i1 && q==j1) || (k<0 || k>7 || q<0 || q>7) )
  1512. continue;
  1513.  
  1514. if(!checkedby1[k+1][q+1] && occupied[k][q] != 2)
  1515. {
  1516. goto CONT3;
  1517. }
  1518. }
  1519. }
  1520. printf("You can't move the king\nPlease enter an-other move.");
  1521. movement();
  1522. return;
  1523. CONT3 :
  1524.  
  1525. if(checkedby1[i2+1][j2+1])
  1526. {
  1527. printf("You can't move the king to this position or you will lose.");
  1528. movement();
  1529. return;
  1530. }else
  1531. {
  1532. if(occupied[i2][j2]==2)
  1533. {
  1534. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1535. movement();
  1536. return;
  1537. }
  1538. if(occupied[i2][j2]==1)
  1539. {
  1540. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1541. kp2i=i2;
  1542. kp2j=j2;
  1543. occupied[i1][j1]=0;
  1544. occupied[i2][j2]=2;
  1545. killed1[number_killed1]=domain[i2][j2];
  1546. domain[i2][j2]=domain[i1][j1];
  1547. number_killed1++;
  1548. }
  1549. if(occupied[i2][j2]==0)
  1550. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1551. kp2i=i2;
  1552. kp2j=j2;
  1553. domain[i2][j2]=domain[i1][j1];
  1554. occupied[i1][j1]=0;
  1555. occupied[i2][j2]=2;
  1556. }
  1557.  
  1558. }
  1559. }}
  1560. else
  1561. {
  1562. printf("Incorrect move for the king.\nPlease re-enter your move");
  1563. movement();
  1564. }
  1565. }
  1566. void set_checks1(void)
  1567. {
  1568.  
  1569.  
  1570. int i,j,k,q;
  1571. for(k=0;k<ROWS;k++)
  1572. {
  1573. for(q=0;q<COLUMNS;q++)
  1574. {
  1575. movability1[k][q]=movability2[k][q]=0;
  1576. checkedby1[k+1][q+1]=checkedby2[k+1][q+1]=0;
  1577. zone1[k][q]=0;
  1578. zone2[k][q]=0;
  1579. if(islower(domain[k][q]))
  1580. occupied[k][q]=1;
  1581. else if(isupper(domain[k][q]))
  1582. occupied[k][q]=2;
  1583. else
  1584. occupied[k][q]=0;
  1585. }
  1586. }
  1587. for(i=0; i<ROWS;i++)
  1588. {
  1589. for(j=0; j<COLUMNS; j++)
  1590. {
  1591. if(occupied[i][j]==1)
  1592. {
  1593. if(domain[i][j]=='r')
  1594. {
  1595. k=i+1;
  1596. while(!occupied[k][j]&&k<ROWS)
  1597. {
  1598. checkedby1[k+1][j+1]=1;
  1599. movability1[k++][j]=1;
  1600.  
  1601. }
  1602. if(k<8&&k>=0){
  1603. if(occupied[k][j]==2 ||occupied[k][j]==0)
  1604. {
  1605. checkedby1[k+1][j+1]=1;
  1606. movability1[k][j]=1;
  1607. }
  1608. else
  1609. {
  1610. checkedby1[k+1][j+1]=1;
  1611. }}
  1612. k=i-1;
  1613. while(!occupied[k][j]&&k>0)
  1614. {
  1615. checkedby1[k+1][j+1]=1;
  1616. movability1[k--][j]=1;
  1617.  
  1618. }if(k<8&&k>=0){
  1619. if(occupied[k][j]==2 ||occupied[k][j]==0)
  1620. {
  1621. checkedby1[k+1][j+1]=1;
  1622. movability1[k][j]=1;
  1623. }
  1624. else
  1625. {
  1626. checkedby1[k+1][j+1]=1;
  1627. }}
  1628. k=j+1;
  1629. while(!occupied[i][k]&&k<COLUMNS)
  1630. {
  1631. checkedby1[i+1][k+1]=1;
  1632. movability1[i][k++]=1;
  1633.  
  1634. }if(k<8&&k>=0){
  1635. if(occupied[i][k]==2 || occupied[i][k]==0 )
  1636. {
  1637. checkedby1[i+1][k+1]=1;
  1638. movability1[i][k]=1;
  1639. }
  1640. else
  1641. {
  1642. checkedby2[i+1][k+1]=1;
  1643. }}
  1644. k=j-1;
  1645. while(!occupied[i][k]&&k>0)
  1646. {
  1647. checkedby1[i+1][k+1]=1;
  1648. movability1[i][k--]=1;
  1649.  
  1650. }if(k<8&&k>=0){
  1651. if(occupied[i][k]==2 || occupied[i][k]==0)
  1652. {
  1653. checkedby1[i+1][k+1]=1;
  1654. movability1[i][k]=1;
  1655. }
  1656. else
  1657. {
  1658. checkedby1[i+1][k+1]=1;
  1659. }}
  1660. }
  1661. if(domain[i][j]=='b')
  1662. {
  1663. k=i+1;
  1664. q=j+1;
  1665. while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
  1666. {
  1667. checkedby1[k+1][q+1]=1;
  1668. movability1[k++][q++]=1;
  1669. }
  1670. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1671. if(occupied[k][q]==2 || occupied[k][q]==0 )
  1672. {
  1673. checkedby1[k+1][q+1]=1;
  1674. movability1[k][q]=1;
  1675. }else
  1676. {
  1677. checkedby1[k+1][q+1]=1;
  1678. }}
  1679. k=i-1;
  1680. q=j-1;
  1681. while(!occupied[k][q]&&k>0&&q>0)
  1682. {
  1683. checkedby1[k+1][q+1]=1;
  1684. movability1[k--][q--]=1;
  1685. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1686. if(occupied[k][q]==2 || occupied[k][q]==0)
  1687. {
  1688. checkedby1[k+1][q+1]=1;
  1689. movability1[k][q]=1;
  1690. }else
  1691. {
  1692. checkedby1[k+1][q+1]=1;
  1693. }}
  1694. k=i-1;
  1695. q=j+1;
  1696. while(!occupied[k][q]&&k>0&&q<COLUMNS)
  1697. {
  1698. checkedby1[k+1][q+1]=1;
  1699. movability1[k--][q++]=1;
  1700. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1701. if(occupied[k][q]==2 || occupied[k][q]==0)
  1702. {
  1703. checkedby1[k+1][q+1]=1;
  1704. movability1[k][q]=1;
  1705. }else
  1706. {
  1707. checkedby1[k+1][q+1]=1;
  1708. }}
  1709. k=i+1;
  1710. q=j-1;
  1711. while(!occupied[k][q]&&k<ROWS&&q>0)
  1712. {
  1713. checkedby1[k+1][q+1]=1;
  1714. movability1[k++][q--]=1;
  1715. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1716. if(occupied[k][q]==2 || occupied[k][q]==0)
  1717. {
  1718. checkedby1[k+1][q+1]=1;
  1719. movability1[k][q]=1;
  1720. }else
  1721. {
  1722. checkedby1[k+1][q+1]=1;
  1723. }}
  1724. }
  1725. if(domain[i][j]=='n')
  1726. {
  1727. q=j+2;
  1728. k=i-1;
  1729. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1730. checkedby1[k+1][q+1]=1;
  1731. if(occupied[k][q]!=1)
  1732. movability1[k][q]=1;}
  1733. q=j+2;
  1734. k=i+1;
  1735. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1736. checkedby1[k+1][q+1]=1;
  1737. if(occupied[k][q]!=1)
  1738. movability1[k][q]=1;}
  1739. q=j-2;
  1740. k=i-1;
  1741. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1742.  
  1743. checkedby1[k+1][q+1]=1;
  1744. if(occupied[k][q]!=1)
  1745. movability1[k][q]=1;}
  1746. q=j-2;
  1747. k=i+1;
  1748. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1749. checkedby1[k+1][q+1]=1;
  1750. if(occupied[k][q]!=1)
  1751. movability1[k][q]=1;}
  1752. q=j-1;
  1753. k=i-2;
  1754. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1755. checkedby1[k+1][q+1]=1;
  1756. if(occupied[k][q]!=1)
  1757. movability1[k][q]=1;}
  1758. q=j+1;
  1759. k=i-2;
  1760. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1761. checkedby1[k+1][q+1]=1;
  1762. if(occupied[k][q]!=1)
  1763. movability1[k][q]=1;}
  1764. q=j+1;
  1765. k=i+2;
  1766. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1767. checkedby1[k+1][q+1]=1;
  1768. if(occupied[k][q]!=1)
  1769. movability1[k][q]=1;}
  1770. q=j-1;
  1771. k=i+2;
  1772. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1773. checkedby1[k+1][q+1]=1;
  1774. if(occupied[k][q]!=1)
  1775. movability1[k][q]=1;}
  1776. }
  1777. if(domain[i][j]=='q')
  1778. {
  1779.  
  1780. k=i+1;
  1781. while(!occupied[k][j]&&k<ROWS)
  1782. {
  1783. checkedby1[k+1][j+1]=1;
  1784. movability1[k++][j]=1;
  1785.  
  1786. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1787. if(occupied[k][j]==2 ||occupied[k][j]==0)
  1788. {
  1789. checkedby1[k+1][j+1]=1;
  1790. movability1[k][j]=1;
  1791. }
  1792. else
  1793. {
  1794. checkedby1[k+1][j+1]=1;
  1795. }}
  1796. k=i-1;
  1797. while(!occupied[k][j]&&k>0)
  1798. {
  1799. checkedby1[k+1][j+1]=1;
  1800. movability1[k--][j]=1;
  1801.  
  1802. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1803. if(occupied[k][j]==2 ||occupied[k][j]==0)
  1804. {
  1805. checkedby1[k+1][j+1]=1;
  1806. movability1[k][j]=1;
  1807. }
  1808. else
  1809. {
  1810. checkedby1[k+1][j+1]=1;
  1811. }}
  1812. k=j+1;
  1813. while(!occupied[i][k]&&k<COLUMNS)
  1814. {
  1815. checkedby1[i+1][k+1]=1;
  1816. movability1[i][k++]=1;
  1817.  
  1818. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1819. if(occupied[i][k]==2 || occupied[i][k]==0 )
  1820. {
  1821. checkedby1[i+1][k+1]=1;
  1822. movability1[i][k]=1;
  1823. }
  1824. else
  1825. {
  1826. checkedby2[i+1][k+1]=1;
  1827. }}
  1828. k=j-1;
  1829. while(!occupied[i][k]&&k>0)
  1830. {
  1831. checkedby1[i+1][k+1]=1;
  1832. movability1[i][k--]=1;
  1833.  
  1834. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1835. if(occupied[i][k]==2 || occupied[i][k]==0)
  1836. {
  1837. checkedby1[i+1][k+1]=1;
  1838. movability1[i][k]=1;
  1839. }
  1840. else
  1841. {
  1842. checkedby1[i+1][k+1]=1;
  1843. }}
  1844.  
  1845. k=i+1;
  1846. q=j+1;
  1847. while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
  1848. {
  1849. checkedby1[k+1][q+1]=1;
  1850. movability1[k++][q++]=1;
  1851. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1852. if(occupied[k][q]==2 || occupied[k][q]==0)
  1853. {
  1854. checkedby1[k+1][q+1]=1;
  1855. movability1[k][q]=1;
  1856. }else
  1857. {
  1858. checkedby1[k+1][q+1]=1;
  1859. }}
  1860. k=i-1;
  1861. q=j-1;
  1862. while(!occupied[k][q]&&k>0&&q>0)
  1863. {
  1864. checkedby1[k+1][q+1]=1;
  1865. movability1[k--][q--]=1;
  1866. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1867. if(occupied[k][q]==2 || occupied[k][q]==0)
  1868. {
  1869. checkedby1[k+1][q+1]=1;
  1870. movability1[k][q]=1;
  1871. }else
  1872. {
  1873. checkedby1[k+1][q+1]=1;
  1874. }}
  1875. k=i-1;
  1876. q=j+1;
  1877. while(!occupied[k][q]&&k>0&&q<COLUMNS)
  1878. {
  1879. checkedby1[k+1][q+1]=1;
  1880. movability1[k--][q++]=1;
  1881. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1882. if(occupied[k][q]==2 || occupied[k][q]==0)
  1883. {
  1884. checkedby1[k+1][q+1]=1;
  1885. movability1[k][q]=1;
  1886. }else
  1887. {
  1888. checkedby1[k+1][q+1]=1;
  1889. }}
  1890. k=i+1;
  1891. q=j-1;
  1892. while(!occupied[k][q]&&k<ROWS&&q>0)
  1893. {
  1894. checkedby1[k+1][q+1]=1;
  1895. movability1[k++][q--]=1;
  1896. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1897. if(occupied[k][q]==2 || occupied[k][q]==0)
  1898. {
  1899. checkedby1[k+1][q+1]=1;
  1900. movability1[k][q]=1;
  1901. }else
  1902. {
  1903. checkedby1[k+1][q+1]=1;
  1904. }}
  1905. }
  1906. if(domain[i][j]=='p')
  1907. {
  1908. k=i+1;
  1909. q=j+1;
  1910. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1911. checkedby1[k+1][q+1]=1;
  1912. if(occupied[k][q]==2)
  1913. movability1[k][q]=1;}
  1914. q=j-1;
  1915. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1916.  
  1917. checkedby1[k+1][q+1]=1;
  1918. if(occupied[k][q]==2)
  1919. movability1[k][q]=1;}
  1920. if(i==1)
  1921. {
  1922. k=i+1;
  1923. if(!occupied[k][j]){
  1924. movability1[k][j]=1;
  1925. k++;
  1926. if(!occupied[k][j])
  1927. movability1[k][j]=1;}
  1928. }else{
  1929. if(k<8&&k>=0){
  1930. k=i+1;
  1931. if(!occupied[k][j])
  1932. movability1[k][j]=1;}
  1933. }
  1934. }
  1935.  
  1936. }
  1937. }
  1938. }
  1939. }
  1940. void set_checks2(void)
  1941. {
  1942.  
  1943. int i,j,k,q;
  1944. for(i=0; i<ROWS;i++)
  1945. {
  1946. for(j=0; j<COLUMNS; j++)
  1947. {
  1948. if(occupied[i][j]==2)
  1949. {
  1950. if(domain[i][j]=='R')
  1951. {
  1952. k=i+1;
  1953. while(!occupied[k][j]&&k<ROWS)
  1954. {
  1955. checkedby2[k+1][j+1]=1;
  1956. movability2[k++][j]=1;
  1957.  
  1958. }if(k<8 &&k>=0){
  1959. if(occupied[k][j]==1 ||occupied[k][j]==0)
  1960. {
  1961. checkedby2[k+1][j+1]=1;
  1962. movability2[k][j]=1;
  1963. }
  1964. else
  1965. {
  1966. checkedby2[k+1][j+1]=1;
  1967. }}
  1968. k=i-1;
  1969. while(!occupied[k][j]&&k>0)
  1970. {
  1971. checkedby2[k+1][j+1]=1;
  1972. movability2[k--][j]=1;
  1973.  
  1974. }if(k<8 &&k>=0){
  1975. if(occupied[k][j]==1 ||occupied[k][j]==0)
  1976. {
  1977. checkedby2[k+1][j+1]=1;
  1978. movability2[k][j]=1;
  1979. }
  1980. else
  1981. {
  1982. checkedby2[k+1][j+1]=1;
  1983. }}
  1984. k=j+1;
  1985. while(!occupied[i][k]&&k<COLUMNS)
  1986. {
  1987. checkedby2[i+1][k+1]=1;
  1988. movability2[i][k++]=1;
  1989.  
  1990. }if(k<8 &&k>=0){
  1991. if(occupied[i][k]==1 || occupied[i][k]==0 )
  1992. {
  1993. checkedby2[i+1][k+1]=1;
  1994. movability2[i][k]=1;
  1995. }
  1996. else
  1997. {
  1998. checkedby2[i+1][k+1]=1;
  1999. }}
  2000. k=j-1;
  2001. while(!occupied[i][k]&&k>0)
  2002. {
  2003. checkedby2[i+1][k+1]=1;
  2004. movability2[i][k--]=1;
  2005.  
  2006. }if(k<8 &&k>=0){
  2007. if(occupied[i][k]==1 || occupied[i][k]==0)
  2008. {
  2009. checkedby2[i+1][k+1]=1;
  2010. movability2[i][k]=1;
  2011. }
  2012. else
  2013. {
  2014. checkedby2[i+1][k+1]=1;
  2015. }}
  2016. }
  2017. if(domain[i][j]=='B')
  2018. {
  2019. k=i+1;
  2020. q=j+1;
  2021. while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
  2022. {
  2023. checkedby2[k+1][q+1]=1;
  2024. movability2[k++][q++]=1;
  2025. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2026. if(occupied[k][q]==1 || occupied[k][q]==0)
  2027. {
  2028. checkedby2[k+1][q+1]=1;
  2029. movability2[k][q]=1;
  2030. }else
  2031. {
  2032. checkedby2[k+1][q+1]=1;
  2033. }}
  2034. k=i-1;
  2035. q=j-1;
  2036. while(!occupied[k][q]&&k>0&&q>0)
  2037. {
  2038. checkedby2[k+1][q+1]=1;
  2039. movability2[k--][q--]=1;
  2040. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2041. if(occupied[k][q]==1 || occupied[k][q]==0)
  2042. {
  2043. checkedby2[k+1][q+1]=1;
  2044. movability2[k][q]=1;
  2045. }else
  2046. {
  2047. checkedby2[k+1][q+1]=1;
  2048. }}
  2049. k=i-1;
  2050. q=j+1;
  2051. while(!occupied[k][q]&&k>0&&q<COLUMNS)
  2052. {
  2053. checkedby2[k+1][q+1]=1;
  2054. movability2[k--][q++]=1;
  2055. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2056. if(occupied[k][q]==1 || occupied[k][q]==0)
  2057. {
  2058. checkedby2[k+1][q+1]=1;
  2059. movability2[k][q]=1;
  2060. }else
  2061. {
  2062. checkedby2[k+1][q+1]=1;
  2063. }}
  2064. k=i+1;
  2065. q=j-1;
  2066. while(!occupied[k][q]&&k<ROWS&&q>0)
  2067. {
  2068. checkedby2[k+1][q+1]=1;
  2069. movability2[k++][q--]=1;
  2070. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2071. if(occupied[k][q]==1 || occupied[k][q]==0)
  2072. {
  2073. checkedby2[k+1][q+1]=1;
  2074. movability2[k][q]=1;
  2075. }else
  2076. {
  2077. checkedby2[k+1][q+1]=1;
  2078. }}
  2079. }
  2080. if(domain[i][j]=='N')
  2081. {
  2082. q=j+2;
  2083. k=i-1;
  2084. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2085. checkedby2[k+1][q+1]=1;
  2086. if(occupied[k][q]!=2)
  2087. movability2[k][q]=1;}
  2088. q=j+2;
  2089. k=i+1;
  2090. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2091. checkedby2[k+1][q+1]=1;
  2092. if(occupied[k][q]!=2)
  2093. movability2[k][q]=1;}
  2094. q=j-2;
  2095. k=i-1;
  2096. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2097. checkedby2[k+1][q+1]=1;
  2098. if(occupied[k][q]!=2)
  2099. movability2[k][q]=1;}
  2100. q=j+2;
  2101. k=i+1;
  2102. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2103. checkedby2[k+1][q+1]=1;
  2104. if(occupied[k][q]!=2)
  2105. movability2[k][q]=1;}
  2106. q=j-1;
  2107. k=i-2;
  2108. if(k>-2&&q>-2){
  2109. checkedby2[k+1][q+1]=1;
  2110. if(occupied[k][q]!=2)
  2111. movability2[k][q]=1;}
  2112. q=j+1;
  2113. k=i-2;
  2114. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2115. checkedby2[k+1][q+1]=1;
  2116. if(occupied[k][q]!=2)
  2117. movability2[k][q]=1;}
  2118. q=j+1;
  2119. k=i+2;
  2120. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2121. checkedby2[k+1][q+1]=1;
  2122. if(occupied[k][q]!=2)
  2123. movability2[k][q]=1;}
  2124. q=j-1;
  2125. k=i+2;
  2126. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2127. checkedby2[k+1][q+1]=1;
  2128. if(occupied[k][q]!=2)
  2129. movability2[k][q]=1;}
  2130. }
  2131. if(domain[i][j]=='Q')
  2132. {
  2133.  
  2134. k=i+1;
  2135. while(!occupied[k][j]&&k<ROWS)
  2136. {
  2137. checkedby2[k+1][j+1]=1;
  2138. movability2[k++][j]=1;
  2139.  
  2140. }if(k<8 &&k>=0){
  2141. if(occupied[k][j]==1 ||occupied[k][j]==0)
  2142. {
  2143. checkedby2[k+1][j+1]=1;
  2144. movability2[k][j]=1;
  2145. }
  2146. else
  2147. {
  2148. checkedby2[k+1][j+1]=1;
  2149. }}
  2150. k=i-1;
  2151. while(!occupied[k][j]&&k>0)
  2152. {
  2153. checkedby2[k+1][j+1]=1;
  2154. movability2[k--][j]=1;
  2155.  
  2156. }if(k<8 &&k>=0){
  2157. if(occupied[k][j]==1 ||occupied[k][j]==0)
  2158. {
  2159. checkedby2[k+1][j+1]=1;
  2160. movability2[k][j]=1;
  2161. }
  2162. else
  2163. {
  2164. checkedby2[k+1][j+1]=1;
  2165. }}
  2166. k=j+1;
  2167. while(!occupied[i][k]&&k<COLUMNS)
  2168. {
  2169. checkedby2[i+1][k+1]=1;
  2170. movability2[i][k++]=1;
  2171.  
  2172. }if(k<8 &&k>=0){
  2173. if(occupied[i][k]==1 || occupied[i][k]==0 )
  2174. {
  2175. checkedby2[i+1][k+1]=1;
  2176. movability2[i][k]=1;
  2177. }
  2178. else
  2179. {
  2180. checkedby2[i+1][k+1]=1;
  2181. }}
  2182. k=j-1;
  2183. while(!occupied[i][k]&&k>0)
  2184. {
  2185. checkedby2[i+1][k+1]=1;
  2186. movability2[i][k--]=1;
  2187.  
  2188. }if(k<8 &&k>=0){
  2189. if(occupied[i][k]==1 || occupied[i][k]==0)
  2190. {
  2191. checkedby2[i+1][k+1]=1;
  2192. movability2[i][k]=1;
  2193. }
  2194. else
  2195. {
  2196. checkedby2[i+1][k+1]=1;
  2197. }}
  2198. k=i+1;
  2199. q=j+1;
  2200. while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
  2201. {
  2202. checkedby2[k+1][q+1]=1;
  2203. movability2[k++][q++]=1;
  2204. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2205. if(occupied[k][q]==1 || occupied[k][q]==0)
  2206. {
  2207. checkedby2[k+1][q+1]=1;
  2208. movability2[k][q]=1;
  2209. }else
  2210. {
  2211. checkedby2[k+1][q+1]=1;
  2212. }}
  2213. k=i-1;
  2214. q=j-1;
  2215. while(!occupied[k][q]&&k>0&&q>0)
  2216. {
  2217. checkedby2[k+1][q+1]=1;
  2218. movability2[k--][q--]=1;
  2219. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2220. if(occupied[k][q]==1 || occupied[k][q]==0)
  2221. {
  2222. checkedby2[k+1][q+1]=1;
  2223. movability2[k][q]=1;
  2224. }else
  2225. {
  2226. checkedby2[k+1][q+1]=1;
  2227. }}
  2228. k=i-1;
  2229. q=j+1;
  2230. while(!occupied[k][q]&&k>0&&q<COLUMNS)
  2231. {
  2232. checkedby2[k+1][q+1]=1;
  2233. movability2[k--][q++]=1;
  2234. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2235. if(occupied[k][q]==1 || occupied[k][q]==0)
  2236. {
  2237. checkedby2[k+1][q+1]=1;
  2238. movability2[k][q]=1;
  2239. }else
  2240. {
  2241. checkedby2[k+1][q+1]=1;
  2242. }}
  2243. k=i+1;
  2244. q=j-1;
  2245. while(!occupied[k][q]&&k<ROWS&&q>0)
  2246. {
  2247. checkedby2[k+1][q+1]=1;
  2248. movability2[k++][q--]=1;
  2249. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2250. if(occupied[k][q]==1 || occupied[k][q]==0)
  2251. {
  2252. checkedby2[k+1][q+1]=1;
  2253. movability2[k][q]=1;
  2254. }else
  2255. {
  2256. checkedby2[k+1][q+1]=1;
  2257. }}
  2258. }
  2259. if(domain[i][j]=='P')
  2260. {
  2261. k=i-1;
  2262. q=j+1;
  2263. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2264. checkedby2[k+1][q+1]=1;
  2265. if(occupied[k][q]==1)
  2266. movability2[k][q]=1;}
  2267.  
  2268. q=j-1;
  2269. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2270. checkedby2[k+1][q+1]=1;
  2271. if(occupied[k][q]==1)
  2272. movability2[k][q]=1;}
  2273. if(i==6)
  2274. {
  2275. k=i-1;
  2276. if(k<8 && k>=0){
  2277. if(!occupied[k][j]){
  2278. movability2[k][j]=1;}
  2279. k--;
  2280. if(k<8 && k>=0){
  2281. if(!occupied[k][j])
  2282. movability2[k][j]=1;}}
  2283. }else{
  2284. k=i-1;
  2285. if(k<8 && k>=0){
  2286. if(!occupied[k][j])
  2287. movability2[k][j]=1;}
  2288. }
  2289. }
  2290.  
  2291. }
  2292. }
  2293. }
  2294. }
  2295. void checking_for_checkmate(int i2,int j2)
  2296. {
  2297. int ic,jc;
  2298.  
  2299. if(checkedby2[kp1i+1][kp1j+1])
  2300. {
  2301. ic=i2;
  2302. jc=j2;
  2303.  
  2304.  
  2305. }
  2306. }
  2307. void save_step(int i1,int j1,int i2,int j2,char eaten,char piece)
  2308. {
  2309. if(turn==1)
  2310. {
  2311.  
  2312.  
  2313. steps1[counter_steps1].domain1i=i1;
  2314. steps1[counter_steps1].domain1j=j1;
  2315. steps1[counter_steps1].domain2i=i2;
  2316. steps1[counter_steps1].domain2j=j2;
  2317. steps1[counter_steps1].eaten=eaten;
  2318. steps1[counter_steps1].piece=piece;
  2319. pointer1++;
  2320. counter_steps1=pointer1;
  2321.  
  2322. }else
  2323. {
  2324.  
  2325. steps2[counter_steps2].domain1i=i1;
  2326. steps2[counter_steps2].domain1j=j1;
  2327. steps2[counter_steps2].domain2i=i2;
  2328. steps2[counter_steps2].domain2j=j2;
  2329. steps2[counter_steps2].eaten=eaten;
  2330. steps2[counter_steps2].piece=piece;
  2331. pointer2++;
  2332. counter_steps2=pointer2;
  2333. }
  2334. }
  2335. void undo(void)
  2336. {
  2337. int i1,j1,i2,j2;
  2338. char eaten;
  2339. char piece;
  2340. int checker;
  2341.  
  2342.  
  2343.  
  2344. if(turn==2)
  2345. {
  2346.  
  2347. if(pointer1-1<0){
  2348. printf("No thing to undo.\nPlease play a move.");
  2349. movement();
  2350. return;
  2351. }else{
  2352. pointer1--;
  2353. i2=steps1[pointer1].domain1i;
  2354. j2=steps1[pointer1].domain1j;
  2355. i1=steps1[pointer1].domain2i;
  2356. j1=steps1[pointer1].domain2j;
  2357. eaten=steps1[pointer1].eaten;
  2358. piece=steps1[pointer1].piece;
  2359.  
  2360. domain[i2][j2]=piece;
  2361. domain[i1][j1]=eaten;
  2362. if(domain[i1][j1]=='k')
  2363. {
  2364. kp1i=i2;
  2365. kp1j=j2;
  2366. }
  2367. if(isupper(domain[i1][j1])){
  2368. number_killed2--;}
  2369.  
  2370. }
  2371. blackandwhite(i1,j1);
  2372.  
  2373. }
  2374. else
  2375. {
  2376.  
  2377. if(pointer2-1<0){
  2378. printf("No thing to undo.\nPlease play a move.");
  2379. movement();
  2380. return;
  2381. }else{
  2382. pointer2--;
  2383. i2=steps2[pointer2].domain1i;
  2384. j2=steps2[pointer2].domain1j;
  2385. i1=steps2[pointer2].domain2i;
  2386. j1=steps2[pointer2].domain2j;
  2387. eaten=steps2[pointer2].eaten;
  2388. piece=steps2[pointer2].piece;
  2389. domain[i2][j2]=piece;
  2390. domain[i1][j1]=eaten;
  2391. if(domain[i1][j1]=='K')
  2392. {
  2393. kp2i=i2;
  2394. kp2j=j2;
  2395. }
  2396. if(islower(domain[i1][j1])){
  2397. number_killed1--;}
  2398. }
  2399. blackandwhite(i1,j1);
  2400.  
  2401. }
  2402.  
  2403. }
  2404. void redo(void)
  2405. {
  2406. int i1,j1,i2,j2;
  2407. char eaten,piece;
  2408. if(turn==1)
  2409. {
  2410. if(pointer1==counter_steps1)
  2411. {
  2412. printf("You can't re-do.\nPlease play a move.");
  2413. movement();
  2414. return;
  2415. }
  2416. else
  2417. {
  2418.  
  2419. i1=steps1[pointer1].domain1i;
  2420. j1=steps1[pointer1].domain1j;
  2421. i2=steps1[pointer1].domain2i;
  2422. j2=steps1[pointer1].domain2j;
  2423. eaten=steps1[pointer1].eaten;
  2424. piece=steps1[pointer1].piece;
  2425.  
  2426. if(isupper(domain[i2][j2]))
  2427. number_killed2++;
  2428. if(domain[i1][j1]=='p' && i2==7)
  2429. {
  2430. premote(domain[i2][j2]);
  2431. }
  2432. domain[i2][j2]=domain[i1][j1];
  2433. occupied[i1][j1]=0;
  2434. if(domain[i2][j2]=='k')
  2435. {
  2436. kp1i=i2;
  2437. kp1j=j2;
  2438. }
  2439.  
  2440. blackandwhite(i1,j1);
  2441. pointer1++;
  2442.  
  2443. }
  2444. }else
  2445. {
  2446.  
  2447. if(pointer2==counter_steps2)
  2448. {
  2449. printf("You can't re-do.\nPlease play a move.");
  2450. movement();
  2451. return;
  2452. }
  2453. else
  2454. {
  2455.  
  2456. i1=steps2[pointer2].domain1i;
  2457. j1=steps2[pointer2].domain1j;
  2458. i2=steps2[pointer2].domain2i;
  2459. j2=steps2[pointer2].domain2j;
  2460. eaten=steps2[pointer2].eaten;
  2461. if(islower(domain[i2][j2]))
  2462. number_killed1++;
  2463. if(domain[i1][j1]=='P' && i2==0)
  2464. {
  2465. premote(domain[i1][j1]);
  2466. }
  2467. domain[i2][j2]=domain[i1][j1];
  2468. occupied[i1][j1]=0;
  2469. if(domain[i2][j2]=='K')
  2470. {
  2471. kp2i=i2;
  2472. kp2j=j2;
  2473. }
  2474.  
  2475. blackandwhite(i1,j1);
  2476. pointer2++;
  2477. }
  2478. }
  2479.  
  2480. }
  2481. void read(char *i1,char *j1,char *i2,char *j2,char *promo)
  2482. {
  2483. int ch , i=0;
  2484. ch=getchar();
  2485. while(ch==' ' || ch=='\n')
  2486. {
  2487. ch=getchar();
  2488. }
  2489. *i1 = ch;
  2490. if(ch=='s' || ch=='l' || ch=='u' || ch=='r')
  2491. return;
  2492. *j1 = getchar();
  2493. *i2 = getchar();
  2494. *j2 = getchar();
  2495.  
  2496.  
  2497. while((ch = getchar()) != '\n')
  2498. {
  2499. if(i==0)
  2500. {
  2501. *promo=ch;
  2502. i++;
  2503. }
  2504. ch = ' ';
  2505. }
  2506.  
  2507.  
  2508.  
  2509. }
  2510. void save (void){
  2511.  
  2512. FILE *fp;
  2513. char save_name[20];
  2514. int ch , i=0,j=0;
  2515. printf("Enter file name : ");
  2516. ch=getchar();
  2517. while(ch==' ')
  2518. {
  2519. ch=getchar();
  2520. }
  2521. ch=getchar();
  2522. while(ch!='\n')
  2523. {
  2524. save_name[i++]=ch;
  2525. ch=getchar();
  2526.  
  2527. }
  2528. save_name[i++]='.';
  2529. save_name[i++]='t';
  2530. save_name[i++]='x';
  2531. save_name[i++]='t';
  2532. save_name[i++]='\0';
  2533. fp=fopen(save_name,"w");
  2534. for(i=0;i<ROWS;i++){
  2535. for( j=0;j<ROWS;j++){
  2536. fprintf(fp,"%c\n",domain[i][j]);
  2537. }}
  2538.  
  2539. 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);
  2540.  
  2541. for( j=0;j<number_killed1;j++){
  2542. fprintf(fp,"%c\n",killed1[j]);
  2543. }
  2544. for( j=0;j<number_killed2;j++){
  2545. fprintf(fp,"%c\n",killed2[j]);
  2546. }
  2547. for(j=0;j<counter_steps1;j++){
  2548. 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);
  2549. }
  2550. for(j=0;j<counter_steps2;j++){
  2551. 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);
  2552. }
  2553. fclose(fp);
  2554. }
  2555. void load (void){
  2556. FILE *fp;
  2557. char save_name[20];
  2558. int ch , i=0,j=0;
  2559. printf("Enter file name: ");
  2560. ch=getchar();
  2561. while(ch==' ')
  2562. {
  2563. ch=getchar();
  2564. }
  2565. ch=getchar();
  2566. while(ch!='\n')
  2567. {
  2568. save_name[i++]=ch;
  2569. ch=getchar();
  2570.  
  2571. }
  2572. save_name[i++]='.';
  2573. save_name[i++]='t';
  2574. save_name[i++]='x';
  2575. save_name[i++]='t';
  2576. save_name[i++]='\0';
  2577. fp=fopen(save_name,"r");
  2578. for(i=0;i<ROWS;i++){
  2579. for( j=0;j<ROWS;j++){
  2580. fscanf(fp,"%c\n",&domain[i][j]);
  2581. }}
  2582.  
  2583. 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);
  2584.  
  2585. for( j=0;j<number_killed1;j++){
  2586. fscanf(fp,"%c\n",&killed1[j]);
  2587. }
  2588. for( j=0;j<number_killed2;j++){
  2589. fscanf(fp,"%c\n",&killed2[j]);
  2590. }
  2591. for(j=0;j<counter_steps1;j++){
  2592. 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);
  2593. }
  2594. for(j=0;j<counter_steps2;j++){
  2595. 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);
  2596. }
  2597. fclose(fp);
  2598. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement