Advertisement
Essam_khames

Untitled

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