Advertisement
Essam_khames

Untitled

Dec 21st, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 103.16 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.  
  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.  
  613.  
  614. if(occupied[n][m++])
  615. {
  616. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  617. movement();
  618. return;
  619. }
  620.  
  621. }
  622. }
  623.  
  624.  
  625.  
  626.  
  627. else if(j1>j2 && i2>i1)
  628. {
  629. m=j1-1;
  630. for(n=i1+1;n<i2;n++)
  631. {
  632.  
  633.  
  634. if(occupied[n][m--])
  635. {
  636. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  637. movement();
  638. return;
  639. }
  640.  
  641. }
  642. }
  643. else if (i1>i2 && j2>j1)
  644. {
  645. for(n=i1-1;n>i2;n--)
  646. {
  647.  
  648. m=j1+1;
  649. if(occupied[n][m++])
  650. {
  651. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  652. movement();
  653. return;
  654. }
  655.  
  656. }
  657.  
  658. }
  659. else if(i2<i1 && j2<j1)
  660. {
  661. for(n=i1-1;n>i2;n--)
  662. {
  663. m=j1-1;
  664.  
  665. if(occupied[n][m--])
  666. {
  667. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  668. movement();
  669. return;
  670. }
  671.  
  672. }
  673. }}
  674. else{
  675. printf("Incorrect move.\nPlease re-enter your move.");
  676. movement();
  677. return;
  678. }
  679. if(occupied[i2][j2]==1)
  680. {
  681. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  682. movement();
  683. return;
  684. }
  685. if(occupied[i2][j2]==2)
  686. {
  687. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  688. occupied[i1][j1]=0;
  689. occupied[i2][j2]=1;
  690. killed2[number_killed2]=domain[i2][j2];
  691. domain[i2][j2]=domain[i1][j1];
  692. number_killed2++;
  693. }
  694. if(occupied[i2][j2]==0)
  695. {
  696. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  697. domain[i2][j2]=domain[i1][j1];
  698. occupied[i1][j1]=0;
  699. occupied[i2][j2]=1;
  700. }
  701.  
  702. }
  703.  
  704.  
  705.  
  706. }
  707. if(domain[i1][j1]=='q')
  708. {
  709. int n,m;
  710. if(j2-j1==i2-i1 || j2-j1==i1-i2)
  711. {
  712. if(j2>j1&&i2>i1)
  713. {
  714. m=j1+1;
  715. for(n=i1+1;n<i2;n++)
  716. {
  717.  
  718.  
  719. if(occupied[n][m++])
  720. {
  721. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  722. movement();
  723. goto OUT;
  724. }
  725.  
  726. }
  727. }
  728.  
  729.  
  730.  
  731.  
  732. else if(j1>j2 && i2>i1)
  733. {
  734. m=j1-1;
  735. for(n=i1+1;n<i2;n++)
  736. {
  737.  
  738.  
  739. if(occupied[n][m--])
  740. {
  741. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  742. movement();
  743. return;
  744. }
  745.  
  746. }
  747. }
  748. else if (i1>i2 && j2>j1)
  749. {
  750. for(n=i1-1;n>i2;n--)
  751. {
  752.  
  753. m=j1+1;
  754. if(occupied[n][m++])
  755. {
  756. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  757. movement();
  758. return;
  759. }
  760.  
  761. }
  762.  
  763. }
  764. else if(i2<i1 && j2<j1)
  765. {
  766. for(n=i1-1;n>i2;n--)
  767. {
  768. m=j1-1;
  769.  
  770. if(occupied[n][m--])
  771. {
  772. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  773. movement();
  774. return;
  775. }
  776.  
  777. }
  778. }
  779. if(occupied[i2][j2]==1)
  780. {
  781. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  782. movement();
  783. return;
  784. }
  785. if(occupied[i2][j2]==2)
  786. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  787. occupied[i1][j1]=0;
  788. occupied[i2][j2]=1;
  789. killed2[number_killed2]=domain[i2][j2];
  790. domain[i2][j2]=domain[i1][j1];
  791. number_killed2++;
  792. }
  793. if(occupied[i2][j2]==0)
  794. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  795. domain[i2][j2]=domain[i1][j1];
  796. occupied[i1][j1]=0;
  797. occupied[i2][j2]=1;
  798. }
  799. }
  800. else if(i2==i1)
  801. {
  802. int n;
  803. if(j2>j1){
  804. for(n=j1+1;n<j2;n++)
  805. {
  806. if(occupied[i1][n])
  807. {
  808. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  809. movement();
  810. return;
  811. }}}
  812. if(j1>j2)
  813. {
  814. for(n=j1-1;n>j2;n--)
  815. {
  816. if(occupied[i1][n])
  817. {
  818. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  819. movement();
  820. return;
  821. }}
  822. }
  823. if(occupied[i1][j2]==1)
  824. {
  825. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  826. movement();
  827. return;
  828. }
  829. if(occupied[i2][j2]==2)
  830. {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  831. occupied[i2][j2]=1;
  832. occupied[i1][j1]=0;
  833. killed2[number_killed2]=domain[i2][j2];
  834. domain[i2][j2]=domain[i1][j1];
  835. number_killed2++;
  836. }
  837. if(occupied[i2][j2]==0)
  838. {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  839. domain[i2][j2]=domain[i1][j1];
  840. occupied[i1][j1]=0;
  841. occupied[i2][j2]=1;
  842.  
  843. }
  844. }
  845. else if(j2==j1)
  846. {
  847. int n;
  848. if(i2>i1)
  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. if(i1>i2)
  860. {
  861. for(n=i1-1;n>i2;n--)
  862. {
  863. if(occupied[n][j1])
  864. {
  865. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  866. movement();
  867. return;
  868.  
  869. }}
  870. }
  871. if(occupied[i2][j2]==1)
  872. {
  873. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  874. movement();
  875. }
  876. if(occupied[i2][j2]==2)
  877. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  878. occupied[i1][j1]=0;
  879. occupied[i2][j2]=1;
  880. killed2[number_killed2]=domain[i2][j2];
  881. domain[i2][j2]=domain[i1][j1];
  882. number_killed2++;
  883. }
  884. if(occupied[i2][j2]==0)
  885. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  886. occupied[i1][j1]=0;
  887. occupied[i2][j2]=1;
  888. domain[i2][j2]=domain[i1][j1];
  889. }
  890.  
  891. }
  892. else
  893. {
  894. printf("Incorrect move.\nPlease re-enter your move.");
  895. movement();
  896. }
  897.  
  898. }
  899.  
  900. if(domain[i1][j1]=='k')
  901. {
  902. move_king(i1,j1,i2,j2);
  903. }
  904.  
  905. /******* PLAYER 2**********/
  906. if(turn==2)
  907. {
  908. if(domain[i1][j1]=='P')
  909. {
  910.  
  911.  
  912. if(i1==6){
  913. /*if next square is correct and empty*/
  914. if((i1-i2==1||i1-i2==2)&&j1==j2&& occupied[i2][j2]==0&&occupied[i1-1][j2]==0){
  915. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  916. domain[i2][j2]=domain[i1][j1];
  917. occupied[i1][j1]=0;
  918. occupied[i2][j2]=2;
  919.  
  920. }else if((i1-i2==1)&&j1==j2&& occupied[i2][j2]==0){
  921. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  922. domain[i2][j2]=domain[i1][j1];
  923. occupied[i1][j1]=0;
  924. occupied[i2][j2]=2;
  925.  
  926.  
  927.  
  928.  
  929. }
  930. else
  931. {
  932. printf("Incorrect move.\nPlease re-enter your move.");
  933. movement();
  934. }
  935. }
  936. else if((i1-i2==1)&&j1==j2&& occupied[i2][j2]==0){
  937. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  938. if(i2==0)
  939. {
  940. premote(&domain[i1][j1]);
  941. }
  942.  
  943. domain[i2][j2]=domain[i1][j1];
  944. occupied[i1][j1]=0;
  945. occupied[i2][j2]=2;
  946.  
  947.  
  948.  
  949.  
  950. }
  951.  
  952. /*eaten player 1 piece*/
  953. else if(i2==i1-1&&(j2==j1-1||j2==j1+1)&&occupied[i2][j2]==1)
  954. {
  955. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  956. if(i2==0)
  957. {
  958. premote(&domain[i1][j1]);
  959.  
  960. }
  961.  
  962. killed1[number_killed1]=domain[i2][j2];
  963. domain[i2][j2]=domain[i1][j1];
  964. number_killed1++;
  965. occupied[i1][j1]=0;
  966. occupied[i2][j2]=2;
  967.  
  968.  
  969.  
  970. }
  971.  
  972. else
  973. {
  974. printf("Incorrect move.\nPlease re-enter your move.");
  975. movement();
  976. return;
  977. }
  978. return;
  979.  
  980. }
  981. if(domain[i1][j1]=='R')
  982. {
  983. if(i2==i1)
  984. {
  985. int n;
  986. if(j2>j1){
  987. for(n=j1+1;n<j2;n++)
  988. {
  989. if(occupied[i1][n])
  990. {
  991. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  992. movement();
  993. return;
  994. }}}
  995. if(j1>j2)
  996. {
  997. for(n=j1-1;n>j2;n--)
  998. {
  999. if(occupied[i1][n])
  1000. {
  1001. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1002. movement();
  1003. return;
  1004. }}
  1005. }
  1006. if(occupied[i1][j2]==2)
  1007. {
  1008. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1009. movement();
  1010. return;
  1011. }
  1012. if(occupied[i2][j2]==1)
  1013. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1014. occupied[i2][j2]=2;
  1015. occupied[i1][j1]=0;
  1016. killed1[number_killed1]=domain[i2][j2];
  1017. domain[i2][j2]=domain[i1][j1];
  1018. number_killed1++;
  1019. }
  1020. if(occupied[i2][j2]==0)
  1021. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1022. domain[i2][j2]=domain[i1][j1];
  1023. occupied[i1][j1]=0;
  1024. occupied[i2][j2]=2;
  1025.  
  1026. }
  1027. }
  1028. else if(j2==j1)
  1029. {
  1030. int n;
  1031. if(i2>i1)
  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. if(i1>i2)
  1043. {
  1044. for(n=i1-1;n>i2;n--)
  1045. {
  1046. if(occupied[n][j1])
  1047. {
  1048. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1049. movement();
  1050. return;
  1051.  
  1052. }}
  1053. }
  1054. if(occupied[i2][j2]==2)
  1055. {
  1056. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1057. movement();
  1058. return;
  1059. }
  1060. if(occupied[i2][j2]==1)
  1061. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1062. occupied[i1][j1]=0;
  1063. occupied[i2][j2]=2;
  1064. killed1[number_killed1]=domain[i2][j2];
  1065. domain[i2][j2]=domain[i1][j1];
  1066. number_killed1++;
  1067. }
  1068. if(occupied[i2][j2]==0)
  1069. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1070. occupied[i1][j1]=0;
  1071. occupied[i2][j2]=2;
  1072. domain[i2][j2]=domain[i1][j1];
  1073. }
  1074.  
  1075. }else
  1076. {
  1077. printf("Incorrect move.\nPlease re-enter your move.");
  1078. movement();
  1079. return;
  1080. }
  1081.  
  1082. }
  1083. if(domain[i1][j1]=='N')
  1084. {
  1085. 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)))
  1086. {
  1087. if(occupied[i2][j2]==2)
  1088. {
  1089. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1090. movement();
  1091. return;
  1092. }
  1093. if(occupied[i2][j2]==1)
  1094. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1095. occupied[i1][j1]=0;
  1096. occupied[i2][j2]=2;
  1097. killed1[number_killed1]=domain[i2][j2];
  1098. domain[i2][j2]=domain[i1][j1];
  1099. number_killed1++;
  1100. }
  1101. if(occupied[i2][j2]==0)
  1102. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1103. domain[i2][j2]=domain[i1][j1];
  1104. occupied[i1][j1]=0;
  1105. occupied[i2][j2]=2;
  1106. }
  1107. }else
  1108. {
  1109. printf("Incorrect move.\nPlease re-enter your move.");
  1110. movement();
  1111. }
  1112. }
  1113. if(domain[i1][j1]=='B')
  1114. {
  1115.  
  1116. int n,m;
  1117. if(j2-j1==i2-i1 || j2-j1==i1-i2)
  1118. {
  1119. if(j2>j1&&i2>i1)
  1120. {
  1121. m=j1+1;
  1122. for(n=i1+1;n<i2;n++)
  1123. {
  1124.  
  1125.  
  1126. if(occupied[n][m++])
  1127. {
  1128. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1129. movement();
  1130. goto OUT;
  1131. }
  1132.  
  1133. }
  1134. }
  1135.  
  1136.  
  1137.  
  1138.  
  1139. else if(j1>j2 && i2>i1)
  1140. {
  1141. m=j1-1;
  1142. for(n=i1+1;n<i2;n++)
  1143. {
  1144.  
  1145.  
  1146. if(occupied[n][m--])
  1147. {
  1148. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1149. movement();
  1150. goto OUT;
  1151. }
  1152.  
  1153. }
  1154. }
  1155. else if (i1>i2 && j2>j1)
  1156. {
  1157. for(n=i1-1;n>i2;n--)
  1158. {
  1159.  
  1160. m=j1+1;
  1161. if(occupied[n][m++])
  1162. {
  1163. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1164. movement();
  1165. return;
  1166. }
  1167.  
  1168. }
  1169.  
  1170. }
  1171. else if(i2<i1 && j2<j1)
  1172. {
  1173. for(n=i1-1;n>i2;n--)
  1174. {
  1175. m=j1-1;
  1176.  
  1177. if(occupied[n][m--])
  1178. {
  1179. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1180. movement();
  1181. return;
  1182. }
  1183.  
  1184. }
  1185. }}
  1186. else{
  1187. printf("Incorrect move.\nPlease re-enter your move.");
  1188. movement();
  1189. return;
  1190. }
  1191. if(occupied[i2][j2]==2)
  1192. {
  1193. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1194. movement();
  1195. return;
  1196. }
  1197. if(occupied[i2][j2]==1)
  1198. {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1199. occupied[i1][j1]=0;
  1200. occupied[i2][j2]=2;
  1201. killed1[number_killed1]=domain[i2][j2];
  1202. domain[i2][j2]=domain[i1][j1];
  1203. number_killed1++;
  1204. }
  1205. if(occupied[i2][j2]==0)
  1206. {save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1207. domain[i2][j2]=domain[i1][j1];
  1208. occupied[i1][j1]=0;
  1209. occupied[i2][j2]=2;
  1210. }
  1211.  
  1212.  
  1213.  
  1214.  
  1215. }
  1216. if(domain[i1][j1]=='Q')
  1217. {
  1218. int n,m;
  1219. if(j2-j1==i2-i1 || j2-j1==i1-i2)
  1220. {
  1221. if(j2>j1&&i2>i1)
  1222. {
  1223. m=j1+1;
  1224. for(n=i1+1;n<i2;n++)
  1225. {
  1226.  
  1227.  
  1228. if(occupied[n][m++])
  1229. {
  1230. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1231. movement();
  1232. return;
  1233. }
  1234.  
  1235. }
  1236. }
  1237.  
  1238.  
  1239.  
  1240.  
  1241. else if(j1>j2 && i2>i1)
  1242. {
  1243. m=j1-1;
  1244. for(n=i1+1;n<i2;n++)
  1245. {
  1246.  
  1247.  
  1248. if(occupied[n][m--])
  1249. {
  1250. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1251. movement();
  1252. return;
  1253. }
  1254.  
  1255. }
  1256. }
  1257. else if (i1>i2 && j2>j1)
  1258. {
  1259. for(n=i1-1;n>i2;n--)
  1260. {
  1261.  
  1262. m=j1+1;
  1263. if(occupied[n][m++])
  1264. {
  1265. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1266. movement();
  1267. return;
  1268. }
  1269.  
  1270. }
  1271.  
  1272. }
  1273. else if(i2<i1 && j2<j1)
  1274. {
  1275. for(n=i1-1;n>i2;n--)
  1276. {
  1277. m=j1-1;
  1278.  
  1279. if(occupied[n][m--])
  1280. {
  1281. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1282. movement();
  1283. return;
  1284. }
  1285.  
  1286. }
  1287. }
  1288. if(occupied[i2][j2]==2)
  1289. {
  1290. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1291. movement();
  1292. }
  1293. if(occupied[i2][j2]==1)
  1294. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1295. occupied[i1][j1]=0;
  1296. occupied[i2][j2]=2;
  1297. killed1[number_killed1]=domain[i2][j2];
  1298. domain[i2][j2]=domain[i1][j1];
  1299. number_killed1++;
  1300. }
  1301. if(occupied[i2][j2]==0)
  1302. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1303. domain[i2][j2]=domain[i1][j1];
  1304. occupied[i1][j1]=0;
  1305. occupied[i2][j2]=2;
  1306. }
  1307. }
  1308. else if(i2==i1)
  1309. {
  1310. int n;
  1311. if(j2>j1){
  1312. for(n=j1+1;n<j2;n++)
  1313. {
  1314. if(occupied[i1][n])
  1315. {
  1316. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1317. movement();
  1318. return;
  1319. }}}
  1320. if(j1>j2)
  1321. {
  1322. for(n=j1-1;n>j2;n--)
  1323. {
  1324. if(occupied[i1][n])
  1325. {
  1326. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1327. movement();
  1328. return;
  1329. }}
  1330. }
  1331. if(occupied[i1][j2]==2)
  1332. {
  1333. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1334. movement();
  1335. return;
  1336. }
  1337. if(occupied[i2][j2]==1)
  1338. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1339. occupied[i2][j2]=2;
  1340. occupied[i1][j1]=0;
  1341. killed1[number_killed1]=domain[i2][j2];
  1342. domain[i2][j2]=domain[i1][j1];
  1343. number_killed1++;
  1344. }
  1345. if(occupied[i2][j2]==0)
  1346. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1347. domain[i2][j2]=domain[i1][j1];
  1348. occupied[i1][j1]=0;
  1349. occupied[i2][j2]=2;
  1350.  
  1351. }
  1352. }
  1353. else if(j2==j1)
  1354. {
  1355. int n;
  1356. if(i2>i1)
  1357. {
  1358. for(n=i1+1;n<i2;n++)
  1359. {
  1360. if(occupied[n][j1])
  1361. {
  1362. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1363. movement();
  1364. return;
  1365.  
  1366. }}}
  1367. if(i1>i2)
  1368. {
  1369. for(n=i1-1;n>i2;n--)
  1370. {
  1371. if(occupied[n][j1])
  1372. {
  1373. printf("Incorrect move(a piece inside the path).\nPlease re-enter your move.");
  1374. movement();
  1375. return;
  1376.  
  1377. }}
  1378. }
  1379. if(occupied[i2][j2]==2)
  1380. {
  1381. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1382. movement();
  1383. return;
  1384. }
  1385. if(occupied[i2][j2]==1)
  1386. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1387. occupied[i1][j1]=0;
  1388. occupied[i2][j2]=2;
  1389. killed1[number_killed1]=domain[i2][j2];
  1390. domain[i2][j2]=domain[i1][j1];
  1391. number_killed1++;
  1392. }
  1393. if(occupied[i2][j2]==0)
  1394. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1395. occupied[i1][j1]=0;
  1396. occupied[i2][j2]=2;
  1397. domain[i2][j2]=domain[i1][j1];
  1398. }
  1399.  
  1400. }
  1401. else
  1402. {
  1403. printf("Incorrect move.\nPlease re-enter your move.");
  1404. movement();
  1405. return;
  1406. }
  1407.  
  1408. }
  1409. if(domain[i1][j1]=='K')
  1410. {
  1411. move_king(i1,j1,i2,j2);
  1412. }
  1413. }
  1414.  
  1415.  
  1416. OUT : return;
  1417. }
  1418.  
  1419.  
  1420. void premote(char *a)
  1421. {
  1422. if(promotion=='o')
  1423. {
  1424. printf("please enter a promotion for your pawn :");
  1425. scanf(" %c",a);
  1426. if(isupper(*a))
  1427. *a=tolower(*a);
  1428.  
  1429. }
  1430. if(*a!= 'o' && *a!='r' && *a!='n' && *a!='b' && *a != 'q')
  1431. {
  1432. do
  1433. {
  1434.  
  1435.  
  1436. printf("Incorrect promotion\nPlease enter a correct promotion : ");
  1437. scanf(" %c",a);
  1438. if(isupper(*a))
  1439. *a=tolower(*a);
  1440. }
  1441.  
  1442. while(*a!='r' && *a!='n' && *a!='b' && *a != 'q');
  1443. }
  1444. if(turn==1&&isupper(*a))
  1445. *a=tolower(*a);
  1446. if(turn==2&&islower(*a))
  1447. *a=toupper(*a);
  1448. }
  1449. void move_king(int i1,int j1,int i2,int j2)
  1450. {
  1451. if((j2-j1==-1 || j2-j1==0 || j2-j1==1) && (i2-i1==-1 || i2-i1==0 || i2-i1==1)){
  1452. int k,q;
  1453. if(domain[i1][j1]=='k')
  1454. {
  1455. for(k=i1-1; k<=i1+1; k++)
  1456. {
  1457. for(q=j1-1; q<=j1+1; q++)
  1458. {
  1459. if((k==i1 && q==j1) || (k<0 || k>7 || q<0 || q>7) )
  1460. continue;
  1461.  
  1462. if(!checkedby2[k+1][q+1] && occupied[k][q] != 1)
  1463. {
  1464. goto CONT2;
  1465. }
  1466. }
  1467. }
  1468. printf("You can't move the king\nPlease enter an-other move.");
  1469. movement();
  1470. return;
  1471. CONT2 :
  1472.  
  1473. if(checkedby2[i2+1][j2+1])
  1474. {
  1475. printf("You can't move the king to this position or you will lose.");
  1476. movement();
  1477. return;
  1478. }else
  1479. {
  1480. if(occupied[i2][j2]==1)
  1481. {
  1482. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1483. movement();
  1484. return;
  1485. }
  1486. if(occupied[i2][j2]==2)
  1487. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1488. kp1i=i2;
  1489. kp1j=j2;
  1490. occupied[i1][j1]=0;
  1491. occupied[i2][j2]=1;
  1492. killed2[number_killed2]=domain[i2][j2];
  1493. domain[i2][j2]=domain[i1][j1];
  1494. number_killed2++;
  1495. }
  1496. if(occupied[i2][j2]==0)
  1497. {
  1498.  
  1499. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1500. kp1i=i2;
  1501. kp1j=j2;
  1502. domain[i2][j2]=domain[i1][j1];
  1503. occupied[i1][j1]=0;
  1504. occupied[i2][j2]=1;
  1505. }
  1506.  
  1507. }
  1508. }else if(domain[i1][j1]=='K')
  1509. {
  1510.  
  1511. for(k=i1-1; k<=i1+1; k++)
  1512. {
  1513. for(q=j1-1; q<=j1+1; q++)
  1514. {
  1515. if((k==i1 && q==j1) || (k<0 || k>7 || q<0 || q>7) )
  1516. continue;
  1517.  
  1518. if(!checkedby1[k+1][q+1] && occupied[k][q] != 2)
  1519. {
  1520. goto CONT3;
  1521. }
  1522. }
  1523. }
  1524. printf("You can't move the king\nPlease enter an-other move.");
  1525. movement();
  1526. return;
  1527. CONT3 :
  1528.  
  1529. if(checkedby1[i2+1][j2+1])
  1530. {
  1531. printf("You can't move the king to this position or you will lose.");
  1532. movement();
  1533. return;
  1534. }else
  1535. {
  1536. if(occupied[i2][j2]==2)
  1537. {
  1538. printf("Incorrect move(moving over your own piece).\nPlease re-enter your move.");
  1539. movement();
  1540. return;
  1541. }
  1542. if(occupied[i2][j2]==1)
  1543. {
  1544. save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1545. kp2i=i2;
  1546. kp2j=j2;
  1547. occupied[i1][j1]=0;
  1548. occupied[i2][j2]=2;
  1549. killed1[number_killed1]=domain[i2][j2];
  1550. domain[i2][j2]=domain[i1][j1];
  1551. number_killed1++;
  1552. }
  1553. if(occupied[i2][j2]==0)
  1554. { save_step(i1,j1,i2,j2,domain[i2][j2],domain[i1][j1]);
  1555. kp2i=i2;
  1556. kp2j=j2;
  1557. domain[i2][j2]=domain[i1][j1];
  1558. occupied[i1][j1]=0;
  1559. occupied[i2][j2]=2;
  1560. }
  1561.  
  1562. }
  1563. }}
  1564. else
  1565. {
  1566. printf("Incorrect move for the king.\nPlease re-enter your move");
  1567. movement();
  1568. }
  1569. }
  1570. void set_checks1(void)
  1571. {
  1572.  
  1573. int i,j,k,q;
  1574.  
  1575. for(i=0; i<ROWS;i++)
  1576. {
  1577. for(j=0; j<COLUMNS; j++)
  1578. {
  1579. if(occupied[i][j]==1){
  1580.  
  1581. if(domain[i][j]=='r')
  1582. {
  1583. k=i+1;
  1584. while(!occupied[k][j]&&k<ROWS)
  1585. {
  1586. checkedby1[k+1][j+1]=1;
  1587. movability1[k++][j]=1;
  1588.  
  1589. }
  1590. if(k<8&&k>=0){
  1591. if(occupied[k][j]==2 ||occupied[k][j]==0)
  1592. {
  1593. checkedby1[k+1][j+1]=1;
  1594. movability1[k][j]=1;
  1595. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][j]=='K'){
  1596. k--;
  1597. zone2[k][j]=1;
  1598. while(!occupied[k][j]&&k>=0)
  1599. zone2[--k][j]=1;
  1600. }
  1601. }
  1602. else
  1603. {
  1604. checkedby1[k+1][j+1]=1;
  1605. }}
  1606. k=i-1;
  1607. while(!occupied[k][j]&&k>0)
  1608. {
  1609. checkedby1[k+1][j+1]=1;
  1610. movability1[k--][j]=1;
  1611. }
  1612.  
  1613. if(k<8&&k>=0){
  1614. if(occupied[k][j]==2 ||occupied[k][j]==0)
  1615. {
  1616. checkedby1[k+1][j+1]=1;
  1617. movability1[k][j]=1;
  1618. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][j]=='K'){
  1619. k++;
  1620. zone2[k][j]=1;
  1621. while(!occupied[k][j]&&k<8)
  1622. zone2[++k][j]=1;
  1623. }
  1624. }
  1625. else
  1626. {
  1627. checkedby1[k+1][j+1]=1;
  1628. }}
  1629. k=j+1;
  1630. while(!occupied[i][k]&&k<COLUMNS)
  1631. {
  1632. checkedby1[i+1][k+1]=1;
  1633. movability1[i][k++]=1;
  1634.  
  1635. }if(k<8&&k>=0){
  1636. if(occupied[i][k]==2 || occupied[i][k]==0 )
  1637. {
  1638. checkedby1[i+1][k+1]=1;
  1639. movability1[i][k]=1;
  1640. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[i][k]=='K'){
  1641. k--;
  1642. zone2[i][k]=1;
  1643. while(!occupied[i][k]&&k>=0)
  1644. zone2[i][--k]=1;
  1645. }
  1646.  
  1647. }
  1648. else
  1649. {
  1650. checkedby1[i+1][k+1]=1;
  1651. }}
  1652. k=j-1;
  1653. while(!occupied[i][k]&&k>0)
  1654. {
  1655. checkedby1[i+1][k+1]=1;
  1656. movability1[i][k--]=1;
  1657.  
  1658. }if(k<8&&k>=0){
  1659. if(occupied[i][k]==2 || occupied[i][k]==0)
  1660. {
  1661. checkedby1[i+1][k+1]=1;
  1662. movability1[i][k]=1;
  1663. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[i][k]=='K'){
  1664. k++;
  1665. zone2[i][k]=1;
  1666. while(!occupied[i][k]&&k<8)
  1667. zone2[i][++k]=1;
  1668. }
  1669. }
  1670. else
  1671. {
  1672. checkedby1[i+1][k+1]=1;
  1673. }}
  1674. }
  1675. if(domain[i][j]=='b')
  1676. {
  1677. k=i+1;
  1678. q=j+1;
  1679. while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
  1680. {
  1681. checkedby1[k+1][q+1]=1;
  1682. movability1[k++][q++]=1;
  1683. }
  1684. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1685. if(occupied[k][q]==2 || occupied[k][q]==0 )
  1686. {
  1687. checkedby1[k+1][q+1]=1;
  1688. movability1[k][q]=1;
  1689. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1690. k--;q--;
  1691. zone2[k][q]=1;
  1692. while(!occupied[k][q]&&k>=0&&q>=0)
  1693. zone2[--k][--q]=1;
  1694. }
  1695. }else
  1696. {
  1697. checkedby1[k+1][q+1]=1;
  1698. }}
  1699. k=i-1;
  1700. q=j-1;
  1701. while(!occupied[k][q]&&k>0&&q>0)
  1702. {
  1703. checkedby1[k+1][q+1]=1;
  1704. movability1[k--][q--]=1;
  1705. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1706. if(occupied[k][q]==2 || occupied[k][q]==0)
  1707. {
  1708. checkedby1[k+1][q+1]=1;
  1709. movability1[k][q]=1;
  1710. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1711. k++;q++;
  1712. zone2[k][q]=1;
  1713. while(!occupied[k][q]&&k<8&&q<8)
  1714. zone2[++k][++q]=1;
  1715. }
  1716. }else
  1717. {
  1718. checkedby1[k+1][q+1]=1;
  1719. }}
  1720. k=i-1;
  1721. q=j+1;
  1722. while(!occupied[k][q]&&k>0&&q<COLUMNS)
  1723. {
  1724. checkedby1[k+1][q+1]=1;
  1725. movability1[k--][q++]=1;
  1726. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1727. if(occupied[k][q]==2 || occupied[k][q]==0)
  1728. {
  1729. checkedby1[k+1][q+1]=1;
  1730. movability1[k][q]=1;
  1731. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1732. k++;q--;
  1733. zone2[k][q]=1;
  1734. while(!occupied[k][q]&&k<8&&q>=0)
  1735. zone2[++k][--q]=1;
  1736. }
  1737. }else
  1738. {
  1739. checkedby1[k+1][q+1]=1;
  1740. }}
  1741. k=i+1;
  1742. q=j-1;
  1743. while(!occupied[k][q]&&k<ROWS&&q>0)
  1744. {
  1745. checkedby1[k+1][q+1]=1;
  1746. movability1[k++][q--]=1;
  1747. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1748. if(occupied[k][q]==2 || occupied[k][q]==0)
  1749. {
  1750. checkedby1[k+1][q+1]=1;
  1751. movability1[k][q]=1;
  1752. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1753. k--;q++;
  1754. zone2[k][q]=1;
  1755. while(!occupied[k][q]&&k>=0&&q<8)
  1756. zone2[--k][++q]=1;
  1757. }
  1758. }else
  1759. {
  1760. checkedby1[k+1][q+1]=1;
  1761. }}
  1762. }
  1763. if(domain[i][j]=='n')
  1764. {
  1765. q=j+2;
  1766. k=i-1;
  1767. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1768. checkedby1[k+1][q+1]=1;
  1769. if(occupied[k][q]!=1)
  1770. movability1[k][q]=1;
  1771. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1772. zone2[i][j]=1;
  1773. }}
  1774. q=j+2;
  1775. k=i+1;
  1776. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1777. checkedby1[k+1][q+1]=1;
  1778. if(occupied[k][q]!=1)
  1779. movability1[k][q]=1;
  1780. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1781. zone2[i][j]=1;
  1782. }
  1783. }
  1784. q=j-2;
  1785. k=i-1;
  1786. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1787.  
  1788. checkedby1[k+1][q+1]=1;
  1789. if(occupied[k][q]!=1)
  1790. movability1[k][q]=1;
  1791. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1792. zone2[i][j]=1;
  1793. }
  1794. }
  1795. q=j-2;
  1796. k=i+1;
  1797. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1798. checkedby1[k+1][q+1]=1;
  1799. if(occupied[k][q]!=1)
  1800. movability1[k][q]=1;
  1801. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1802. zone2[i][j]=1;
  1803. }
  1804. }
  1805. q=j-1;
  1806. k=i-2;
  1807. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1808. checkedby1[k+1][q+1]=1;
  1809. if(occupied[k][q]!=1)
  1810. movability1[k][q]=1;
  1811. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1812. zone2[i][j]=1;
  1813. }
  1814. }
  1815. q=j+1;
  1816. k=i-2;
  1817. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1818. checkedby1[k+1][q+1]=1;
  1819. if(occupied[k][q]!=1)
  1820. movability1[k][q]=1;
  1821. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1822. zone2[i][j]=1;
  1823. }
  1824. }
  1825. q=j+1;
  1826. k=i+2;
  1827. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1828. checkedby1[k+1][q+1]=1;
  1829. if(occupied[k][q]!=1)
  1830. movability1[k][q]=1;
  1831. }
  1832. q=j-1;
  1833. k=i+2;
  1834. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1835. checkedby1[k+1][q+1]=1;
  1836. if(occupied[k][q]!=1)
  1837. movability1[k][q]=1;
  1838. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1839. zone2[i][j]=1;
  1840. }
  1841. }
  1842.  
  1843. }
  1844. if(domain[i][j]=='q')
  1845. {
  1846.  
  1847. k=i+1;
  1848. q=j+1;
  1849. while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
  1850. {
  1851. checkedby1[k+1][q+1]=1;
  1852. movability1[k++][q++]=1;
  1853. }
  1854. if((k<8 && q<8)&&(k>=0 && q>=0)){
  1855. if(occupied[k][q]==2 || occupied[k][q]==0 )
  1856. {
  1857. checkedby1[k+1][q+1]=1;
  1858. movability1[k][q]=1;
  1859. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1860. k--;q--;
  1861. zone2[k][q]=1;
  1862. while(!occupied[k][q]&&k>=0&&q>=0)
  1863. zone2[--k][--q]=1;
  1864. }
  1865. }else
  1866. {
  1867. checkedby1[k+1][q+1]=1;
  1868. }}
  1869. k=i-1;
  1870. q=j-1;
  1871. while(!occupied[k][q]&&k>0&&q>0)
  1872. {
  1873. checkedby1[k+1][q+1]=1;
  1874. movability1[k--][q--]=1;
  1875. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1876. if(occupied[k][q]==2 || occupied[k][q]==0)
  1877. {
  1878. checkedby1[k+1][q+1]=1;
  1879. movability1[k][q]=1;
  1880. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1881. k++;q++;
  1882. zone2[k][q]=1;
  1883. while(!occupied[k][q]&&k<8&&q<8)
  1884. zone2[++k][++q]=1;
  1885. }
  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>0&&q<COLUMNS)
  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. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1902. k++;q--;
  1903. zone2[k][q]=1;
  1904. while(!occupied[k][q]&&k<8&&q>=0)
  1905. zone2[++k][--q]=1;
  1906. }
  1907. }else
  1908. {
  1909. checkedby1[k+1][q+1]=1;
  1910. }}
  1911. k=i+1;
  1912. q=j-1;
  1913. while(!occupied[k][q]&&k<ROWS&&q>0)
  1914. {
  1915. checkedby1[k+1][q+1]=1;
  1916. movability1[k++][q--]=1;
  1917. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  1918. if(occupied[k][q]==2 || occupied[k][q]==0)
  1919. {
  1920. checkedby1[k+1][q+1]=1;
  1921. movability1[k][q]=1;
  1922. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  1923. k--;q++;
  1924. zone2[k][q]=1;
  1925. while(!occupied[k][q]&&k>=0&&q<8)
  1926. zone2[--k][++q]=1;
  1927. }
  1928. }else
  1929. {
  1930. checkedby1[k+1][q+1]=1;
  1931. }}
  1932.  
  1933. k=i+1;
  1934. while(!occupied[k][j]&&k<ROWS)
  1935. {
  1936. checkedby1[k+1][j+1]=1;
  1937. movability1[k++][j]=1;
  1938.  
  1939. }
  1940. if(k<8&&k>=0){
  1941. if(occupied[k][j]==2 ||occupied[k][j]==0)
  1942. {
  1943. checkedby1[k+1][j+1]=1;
  1944. movability1[k][j]=1;
  1945. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][j]=='K'){
  1946. k--;
  1947. zone2[k][j]=1;
  1948. while(!occupied[k][j]&&k>=0)
  1949. zone2[--k][j]=1;
  1950. }
  1951. }
  1952. else
  1953. {
  1954. checkedby1[k+1][j+1]=1;
  1955. }}
  1956. k=i-1;
  1957. while(!occupied[k][j]&&k>0)
  1958. {
  1959. checkedby1[k+1][j+1]=1;
  1960. movability1[k--][j]=1;
  1961. }
  1962.  
  1963. if(k<8&&k>=0){
  1964. if(occupied[k][j]==2 ||occupied[k][j]==0)
  1965. {
  1966. checkedby1[k+1][j+1]=1;
  1967. movability1[k][j]=1;
  1968. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][j]=='K'){
  1969. k++;
  1970. zone2[k][j]=1;
  1971. while(!occupied[k][j]&&k<8)
  1972. zone2[++k][j]=1;
  1973. }
  1974. }
  1975. else
  1976. {
  1977. checkedby1[k+1][j+1]=1;
  1978. }}
  1979. k=j+1;
  1980. while(!occupied[i][k]&&k<COLUMNS)
  1981. {
  1982. checkedby1[i+1][k+1]=1;
  1983. movability1[i][k++]=1;
  1984.  
  1985. }if(k<8&&k>=0){
  1986. if(occupied[i][k]==2 || occupied[i][k]==0 )
  1987. {
  1988. checkedby1[i+1][k+1]=1;
  1989. movability1[i][k]=1;
  1990. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[i][k]=='K'){
  1991. k--;
  1992. zone2[i][k]=1;
  1993. while(!occupied[i][k]&&k>=0)
  1994. zone2[i][--k]=1;
  1995. }
  1996.  
  1997. }
  1998. else
  1999. {
  2000. checkedby1[i+1][k+1]=1;
  2001. }}
  2002. k=j-1;
  2003. while(!occupied[i][k]&&k>0)
  2004. {
  2005. checkedby1[i+1][k+1]=1;
  2006. movability1[i][k--]=1;
  2007.  
  2008. }if(k<8&&k>=0){
  2009. if(occupied[i][k]==2 || occupied[i][k]==0)
  2010. {
  2011. checkedby1[i+1][k+1]=1;
  2012. movability1[i][k]=1;
  2013. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[i][k]=='K'){
  2014. k++;
  2015. zone2[i][k]=1;
  2016. while(!occupied[i][k]&&k<8)
  2017. zone2[i][++k]=1;
  2018. }
  2019. }
  2020. else
  2021. {
  2022. checkedby1[i+1][k+1]=1;
  2023. }}
  2024. }
  2025. if(domain[i][j]=='p')
  2026. {
  2027. k=i+1;
  2028. q=j+1;
  2029. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2030. checkedby1[k+1][q+1]=1;
  2031. if(occupied[k][q]==2){
  2032. movability1[k][q]=1;
  2033. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  2034. zone2[i][j]=1;
  2035. }}
  2036. q=j-1;
  2037. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2038.  
  2039. checkedby1[k+1][q+1]=1;
  2040. if(occupied[k][q]==2){
  2041. movability1[k][q]=1;
  2042. if(checkedby1[kp2i+1][kp2j+1]==1&&domain[k][q]=='K'){
  2043. zone2[i][j]=1;
  2044. }
  2045. }
  2046. }
  2047. if(i==1)
  2048. {
  2049. k=i+1;
  2050. if(!occupied[k][j]){
  2051. movability1[k][j]=1;
  2052. k++;
  2053. if(!occupied[k][j])
  2054. movability1[k][j]=1;}
  2055. }else{
  2056. if(k<8&&k>=0){
  2057. k=i+1;
  2058. if(!occupied[k][j])
  2059. movability1[k][j]=1;}
  2060. }
  2061.  
  2062.  
  2063. }
  2064.  
  2065. }
  2066. }
  2067. }
  2068. }}
  2069. void set_checks2(void)
  2070. {
  2071.  
  2072. int i,j,k,q;
  2073. for(i=0; i<ROWS;i++)
  2074. {
  2075. for(j=0; j<COLUMNS; j++)
  2076. {
  2077. if(occupied[i][j]==2)
  2078. {
  2079. if(domain[i][j]=='R')
  2080. {
  2081. k=i+1;
  2082. while(!occupied[k][j]&&k<ROWS)
  2083. {
  2084. checkedby2[k+1][j+1]=1;
  2085. movability2[k++][j]=1;
  2086.  
  2087. }if(k<8 &&k>=0){
  2088. if(occupied[k][j]==1 ||occupied[k][j]==0)
  2089. {
  2090. checkedby2[k+1][j+1]=1;
  2091. movability2[k][j]=1;
  2092. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][j]=='k'){
  2093. k--;
  2094. zone1[k][j]=1;
  2095. while(!occupied[k][j]&&k>=0)
  2096. zone1[--k][j]=1;
  2097. }
  2098. }
  2099. else
  2100. {
  2101. checkedby2[k+1][j+1]=1;
  2102. }}
  2103. k=i-1;
  2104. while(!occupied[k][j]&&k>0)
  2105. {
  2106. checkedby2[k+1][j+1]=1;
  2107. movability2[k--][j]=1;
  2108.  
  2109. }if(k<8 &&k>=0){
  2110. if(occupied[k][j]==1 ||occupied[k][j]==0)
  2111. {
  2112. checkedby2[k+1][j+1]=1;
  2113. movability2[k][j]=1;
  2114. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][j]=='k'){
  2115. k++;
  2116. zone1[k][j]=1;
  2117. while(!occupied[k][j]&&k>=0)
  2118. zone1[++k][j]=1;
  2119. }
  2120. }
  2121. else
  2122. {
  2123. checkedby2[k+1][j+1]=1;
  2124. }}
  2125. k=j+1;
  2126. while(!occupied[i][k]&&k<COLUMNS)
  2127. {
  2128. checkedby2[i+1][k+1]=1;
  2129. movability2[i][k++]=1;
  2130.  
  2131. }if(k<8 &&k>=0){
  2132. if(occupied[i][k]==1 || occupied[i][k]==0 )
  2133. {
  2134. checkedby2[i+1][k+1]=1;
  2135. movability2[i][k]=1;
  2136. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[i][k]=='k'){
  2137. k--;
  2138. zone1[i][k]=1;
  2139. while(!occupied[i][k]&&k>=0)
  2140. zone1[i][--k]=1;
  2141. }
  2142.  
  2143. }
  2144. else
  2145. {
  2146. checkedby2[i+1][k+1]=1;
  2147. }}
  2148. k=j-1;
  2149. while(!occupied[i][k]&&k>0)
  2150. {
  2151. checkedby2[i+1][k+1]=1;
  2152. movability2[i][k--]=1;
  2153.  
  2154. }if(k<8 &&k>=0){
  2155. if(occupied[i][k]==1 || occupied[i][k]==0)
  2156. {
  2157. checkedby2[i+1][k+1]=1;
  2158. movability2[i][k]=1;
  2159. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[i][k]=='k'){
  2160. k++;
  2161. zone1[i][k]=1;
  2162. while(!occupied[i][k]&&k>=0)
  2163. zone1[i][++k]=1;
  2164. }
  2165. }
  2166. else
  2167. {
  2168. checkedby2[i+1][k+1]=1;
  2169. }}
  2170. }
  2171. if(domain[i][j]=='B')
  2172. {
  2173. k=i+1;
  2174. q=j+1;
  2175. while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
  2176. {
  2177. checkedby2[k+1][q+1]=1;
  2178. movability2[k++][q++]=1;
  2179. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2180. if(occupied[k][q]==1 || occupied[k][q]==0)
  2181. {
  2182. checkedby2[k+1][q+1]=1;
  2183. movability2[k][q]=1;
  2184. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2185. k--;
  2186. q--;
  2187. zone1[k][q]=1;
  2188. while(!occupied[k][q]&&k>=0)
  2189. zone1[--k][--q]=1;
  2190. }
  2191. }else
  2192. {
  2193. checkedby2[k+1][q+1]=1;
  2194. }}
  2195. k=i-1;
  2196. q=j-1;
  2197. while(!occupied[k][q]&&k>0&&q>0)
  2198. {
  2199. checkedby2[k+1][q+1]=1;
  2200. movability2[k--][q--]=1;
  2201. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2202. if(occupied[k][q]==1 || occupied[k][q]==0)
  2203. {
  2204. checkedby2[k+1][q+1]=1;
  2205. movability2[k][q]=1;
  2206. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2207. k++;
  2208. q++;
  2209. zone1[k][q]=1;
  2210. while(!occupied[k][q]&&k>=0)
  2211. zone1[++k][++q]=1;
  2212. }
  2213. }else
  2214. {
  2215. checkedby2[k+1][q+1]=1;
  2216. }}
  2217. k=i-1;
  2218. q=j+1;
  2219. while(!occupied[k][q]&&k>0&&q<COLUMNS)
  2220. {
  2221. checkedby2[k+1][q+1]=1;
  2222. movability2[k--][q++]=1;
  2223. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2224. if(occupied[k][q]==1 || occupied[k][q]==0)
  2225. {
  2226. checkedby2[k+1][q+1]=1;
  2227. movability2[k][q]=1;
  2228. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2229. k++;
  2230. q--;
  2231. zone1[k][q]=1;
  2232. while(!occupied[k][q]&&k>=0)
  2233. zone1[++k][--q]=1;
  2234. }
  2235. }else
  2236. {
  2237. checkedby2[k+1][q+1]=1;
  2238. }}
  2239. k=i+1;
  2240. q=j-1;
  2241. while(!occupied[k][q]&&k<ROWS&&q>0)
  2242. {
  2243. checkedby2[k+1][q+1]=1;
  2244. movability2[k++][q--]=1;
  2245. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2246. if(occupied[k][q]==1 || occupied[k][q]==0)
  2247. {
  2248. checkedby2[k+1][q+1]=1;
  2249. movability2[k][q]=1;
  2250. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2251. k--;
  2252. q++;
  2253. zone1[k][q]=1;
  2254. while(!occupied[k][q]&&k>=0)
  2255. zone1[--k][++q]=1;
  2256. }
  2257. }else
  2258. {
  2259. checkedby2[k+1][q+1]=1;
  2260. }}
  2261. }
  2262. if(domain[i][j]=='N')
  2263. {
  2264. q=j+2;
  2265. k=i-1;
  2266. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2267. checkedby2[k+1][q+1]=1;
  2268. if(occupied[k][q]!=2)
  2269. movability2[k][q]=1;
  2270. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2271. zone1[i][j]=1;
  2272. }}
  2273. q=j+2;
  2274. k=i+1;
  2275. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2276. checkedby2[k+1][q+1]=1;
  2277. if(occupied[k][q]!=2)
  2278. movability2[k][q]=1;
  2279. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2280. zone1[i][j]=1;
  2281. }
  2282. }
  2283. q=j-2;
  2284. k=i-1;
  2285. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2286. checkedby2[k+1][q+1]=1;
  2287. if(occupied[k][q]!=2)
  2288. movability2[k][q]=1;
  2289. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2290. zone1[i][j]=1;
  2291. }
  2292. }
  2293. q=j+2;
  2294. k=i+1;
  2295. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2296. checkedby2[k+1][q+1]=1;
  2297. if(occupied[k][q]!=2)
  2298. movability2[k][q]=1;
  2299. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2300. zone1[i][j]=1;
  2301. }
  2302. }
  2303. q=j-1;
  2304. k=i-2;
  2305. if(k>-2&&q>-2){
  2306. checkedby2[k+1][q+1]=1;
  2307. if(occupied[k][q]!=2)
  2308. movability2[k][q]=1;
  2309. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2310. zone1[i][j]=1;
  2311. }
  2312. }
  2313. q=j+1;
  2314. k=i-2;
  2315. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2316. checkedby2[k+1][q+1]=1;
  2317. if(occupied[k][q]!=2)
  2318. movability2[k][q]=1;
  2319. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2320. zone1[i][j]=1;
  2321. }
  2322. }
  2323. q=j+1;
  2324. k=i+2;
  2325. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2326. checkedby2[k+1][q+1]=1;
  2327. if(occupied[k][q]!=2)
  2328. movability2[k][q]=1;
  2329. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2330. zone1[i][j]=1;
  2331. }
  2332. }
  2333. q=j-1;
  2334. k=i+2;
  2335. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2336. checkedby2[k+1][q+1]=1;
  2337. if(occupied[k][q]!=2)
  2338. movability2[k][q]=1;
  2339. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2340. zone1[i][j]=1;
  2341. }
  2342. }
  2343.  
  2344. }
  2345. if(domain[i][j]=='Q')
  2346. {
  2347.  
  2348. k=i+1;
  2349. q=j+1;
  2350. while(!occupied[k][q]&&k<ROWS&&q<COLUMNS)
  2351. {
  2352. checkedby2[k+1][q+1]=1;
  2353. movability2[k++][q++]=1;
  2354. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2355. if(occupied[k][q]==1 || occupied[k][q]==0)
  2356. {
  2357. checkedby2[k+1][q+1]=1;
  2358. movability2[k][q]=1;
  2359. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2360. k--;
  2361. q--;
  2362. zone1[k][q]=1;
  2363. while(!occupied[k][q]&&k>=0)
  2364. zone1[--k][--q]=1;
  2365. }
  2366. }else
  2367. {
  2368. checkedby2[k+1][q+1]=1;
  2369. }}
  2370. k=i-1;
  2371. q=j-1;
  2372. while(!occupied[k][q]&&k>0&&q>0)
  2373. {
  2374. checkedby2[k+1][q+1]=1;
  2375. movability2[k--][q--]=1;
  2376. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2377. if(occupied[k][q]==1 || occupied[k][q]==0)
  2378. {
  2379. checkedby2[k+1][q+1]=1;
  2380. movability2[k][q]=1;
  2381. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2382. k++;
  2383. q++;
  2384. zone1[k][q]=1;
  2385. while(!occupied[k][q]&&k>=0)
  2386. zone1[++k][++q]=1;
  2387. }
  2388. }else
  2389. {
  2390. checkedby2[k+1][q+1]=1;
  2391. }}
  2392. k=i-1;
  2393. q=j+1;
  2394. while(!occupied[k][q]&&k>0&&q<COLUMNS)
  2395. {
  2396. checkedby2[k+1][q+1]=1;
  2397. movability2[k--][q++]=1;
  2398. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2399. if(occupied[k][q]==1 || occupied[k][q]==0)
  2400. {
  2401. checkedby2[k+1][q+1]=1;
  2402. movability2[k][q]=1;
  2403. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2404. k++;
  2405. q--;
  2406. zone1[k][q]=1;
  2407. while(!occupied[k][q]&&k>=0)
  2408. zone1[++k][--q]=1;
  2409. }
  2410. }else
  2411. {
  2412. checkedby2[k+1][q+1]=1;
  2413. }}
  2414. k=i+1;
  2415. q=j-1;
  2416. while(!occupied[k][q]&&k<ROWS&&q>0)
  2417. {
  2418. checkedby2[k+1][q+1]=1;
  2419. movability2[k++][q--]=1;
  2420. }if((k<8 && q<8)&&(k>=0 && q>=0)){
  2421. if(occupied[k][q]==1 || occupied[k][q]==0)
  2422. {
  2423. checkedby2[k+1][q+1]=1;
  2424. movability2[k][q]=1;
  2425. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][j]=='k'){
  2426. k--;
  2427. q++;
  2428. zone1[k][q]=1;
  2429. while(!occupied[k][q]&&k>=0)
  2430. zone1[--k][++q]=1;
  2431. }
  2432. }else
  2433. {
  2434. checkedby2[k+1][q+1]=1;
  2435. }}
  2436.  
  2437. k=i+1;
  2438. while(!occupied[k][j]&&k<ROWS)
  2439. {
  2440. checkedby2[k+1][j+1]=1;
  2441. movability2[k++][j]=1;
  2442.  
  2443. }if(k<8 &&k>=0){
  2444. if(occupied[k][j]==1 ||occupied[k][j]==0)
  2445. {
  2446. checkedby2[k+1][j+1]=1;
  2447. movability2[k][j]=1;
  2448. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][j]=='k'){
  2449. k--;
  2450. zone1[k][j]=1;
  2451. while(!occupied[k][j]&&k>=0)
  2452. zone1[--k][j]=1;
  2453. }
  2454. }
  2455. else
  2456. {
  2457. checkedby2[k+1][j+1]=1;
  2458. }}
  2459. k=i-1;
  2460. while(!occupied[k][j]&&k>0)
  2461. {
  2462. checkedby2[k+1][j+1]=1;
  2463. movability2[k--][j]=1;
  2464.  
  2465. }if(k<8 &&k>=0){
  2466. if(occupied[k][j]==1 ||occupied[k][j]==0)
  2467. {
  2468. checkedby2[k+1][j+1]=1;
  2469. movability2[k][j]=1;
  2470. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][j]=='k'){
  2471. k++;
  2472. zone1[k][j]=1;
  2473. while(!occupied[k][j]&&k>=0)
  2474. zone1[++k][j]=1;
  2475. }
  2476. }
  2477. else
  2478. {
  2479. checkedby2[k+1][j+1]=1;
  2480. }}
  2481. k=j+1;
  2482. while(!occupied[i][k]&&k<COLUMNS)
  2483. {
  2484. checkedby2[i+1][k+1]=1;
  2485. movability2[i][k++]=1;
  2486.  
  2487. }if(k<8 &&k>=0){
  2488. if(occupied[i][k]==1 || occupied[i][k]==0 )
  2489. {
  2490. checkedby2[i+1][k+1]=1;
  2491. movability2[i][k]=1;
  2492. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[i][k]=='k'){
  2493. k--;
  2494. zone1[i][k]=1;
  2495. while(!occupied[i][k]&&k>=0)
  2496. zone1[i][--k]=1;
  2497. }
  2498.  
  2499. }
  2500. else
  2501. {
  2502. checkedby2[i+1][k+1]=1;
  2503. }}
  2504. k=j-1;
  2505. while(!occupied[i][k]&&k>0)
  2506. {
  2507. checkedby2[i+1][k+1]=1;
  2508. movability2[i][k--]=1;
  2509.  
  2510. }if(k<8 &&k>=0){
  2511. if(occupied[i][k]==1 || occupied[i][k]==0)
  2512. {
  2513. checkedby2[i+1][k+1]=1;
  2514. movability2[i][k]=1;
  2515. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[i][k]=='k'){
  2516. k++;
  2517. zone1[i][k]=1;
  2518. while(!occupied[i][k]&&k>=0)
  2519. zone1[i][++k]=1;
  2520. }
  2521. }
  2522. else
  2523. {
  2524. checkedby2[i+1][k+1]=1;
  2525. }}
  2526. }
  2527. if(domain[i][j]=='P')
  2528. {
  2529. k=i-1;
  2530. q=j+1;
  2531. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2532. checkedby2[k+1][q+1]=1;
  2533. if(occupied[k][q]==1)
  2534. movability2[k][q]=1;
  2535. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2536. zone1[i][j]=1;
  2537. }
  2538. }
  2539.  
  2540. q=j-1;
  2541. if((k<8 && q<8)&&(k>=0 && q>=0)){
  2542. checkedby2[k+1][q+1]=1;
  2543. if(occupied[k][q]==1)
  2544. movability2[k][q]=1;
  2545. if(checkedby2[kp1i+1][kp1j+1]==1&&domain[k][q]=='k'){
  2546. zone1[i][j]=1;
  2547. }
  2548. }
  2549. if(i==6)
  2550. {
  2551. k=i-1;
  2552. if(k<8 && k>=0){
  2553. if(!occupied[k][j]){
  2554. movability2[k][j]=1;}
  2555. k--;
  2556. if(k<8 && k>=0){
  2557. if(!occupied[k][j])
  2558. movability2[k][j]=1;}}
  2559. }else{
  2560. k=i-1;
  2561. if(k<8 && k>=0){
  2562. if(!occupied[k][j])
  2563. movability2[k][j]=1;}
  2564. }
  2565. }
  2566.  
  2567. }
  2568. }
  2569. }
  2570. }
  2571. void check_mate(void)
  2572. {
  2573. int i,j,k,q;
  2574. if (turn==1){
  2575.  
  2576. printf("Your King is checked by player 2!\n");
  2577. for( i=kp1i-1; i<=kp1i+1; i++)
  2578. {
  2579. for(j=kp1j-1; j<=kp1j+1; j++){
  2580. if(!checkedby2[i+1][j+1] && occupied[i][j]!=1 && (i<8 && i>=0 && j>=0 && j<8 ))
  2581. {
  2582. printf("Move your king or a piece to end the check\n");
  2583.  
  2584. movement();
  2585. set1();
  2586. set2();
  2587. set_checks1();
  2588. set_checks2();
  2589. if(checkedby2[kp1i+1][kp1j+1]){
  2590. do
  2591. {
  2592. printf("Incorrect move(doesn't end the check),Please Enter another move.\n");
  2593. switch_turns();
  2594. undo();
  2595. switch_turns();
  2596. set1();
  2597. set2();
  2598. set_checks1();
  2599. set_checks2();
  2600. movement();
  2601. set1();
  2602. set2();
  2603. set_checks1();
  2604. set_checks2();
  2605. }while(checkedby2[kp1i+1][kp1j+1]);
  2606. }return;
  2607. }
  2608. }
  2609. }
  2610. for(i=0;i<ROWS;i++)
  2611. {
  2612. for(j=0;j<COLUMNS;j++)
  2613. {
  2614. if(movability1[i][j]==1 && zone1[i][j]==1)
  2615. {
  2616.  
  2617. printf("Move a piece to end the check\n");
  2618. movement();
  2619. set1();
  2620. set2();
  2621. set_checks1();
  2622. set_checks2();
  2623. if(checkedby1[kp2i+1][kp2j+1]){
  2624. do
  2625. {
  2626. printf("Incorrect move(doesn't end the check),Please Enter another move.\n");
  2627. switch_turns();
  2628. undo();
  2629. switch_turns();
  2630. set1();
  2631. set2();
  2632. set_checks1();
  2633. set_checks2();
  2634. movement();
  2635. set1();
  2636. set2();
  2637. set_checks1();
  2638. set_checks2();
  2639. }while(checkedby2[kp1i+1][kp1j+1]);
  2640. }
  2641. }return;
  2642.  
  2643.  
  2644. }
  2645. }
  2646. end_game();
  2647.  
  2648. }
  2649. else
  2650. {
  2651.  
  2652. printf("\nYour King is checked by player 1!\n");
  2653. for( i=kp2i-1; i<=kp2i+1; i++)
  2654. {
  2655. for(j=kp2j-1; j<=kp2j+1; j++){
  2656. if(!checkedby1[i+1][j+1] && occupied[i][j]!=1 && (i<8 && i>=0 && j>=0 && j<8 ))
  2657. {
  2658. printf("Move your king or a piece to end the check\n");
  2659.  
  2660. movement();
  2661. set1();
  2662. set2();
  2663. set_checks1();
  2664. set_checks2();
  2665. if(checkedby1[kp2i+1][kp2j+1]){
  2666. do
  2667. {
  2668. printf("Incorrect move(doesn't end the check),Please Enter another move.\n");
  2669. switch_turns();
  2670. undo();
  2671. switch_turns();
  2672. set1();
  2673. set2();
  2674. set_checks1();
  2675. set_checks2();
  2676. movement();
  2677. set1();
  2678. set2();
  2679. set_checks1();
  2680. set_checks2();
  2681. }while(checkedby1[kp2i+1][kp2j+1]);
  2682. }return;
  2683. }
  2684. }
  2685. }
  2686. for(i=0;i<ROWS;i++)
  2687. {
  2688. for(j=0;j<COLUMNS;j++)
  2689. {
  2690. if(movability2[i][j]==1 && zone2[i][j]==1)
  2691. {
  2692. printf("Move a piece to end the check");
  2693.  
  2694. movement();
  2695. set1();
  2696. set2();
  2697. set_checks1();
  2698. set_checks2();
  2699. if(checkedby1[kp2i+1][kp2j+1]){
  2700. counter_steps2--;
  2701. do
  2702. {
  2703. printf("Incorrect move(doesn't end the check),Please Enter another move.\n");
  2704. switch_turns();
  2705. undo();
  2706. switch_turns();
  2707. set1();
  2708. set2();
  2709. set_checks1();
  2710. set_checks2();
  2711. movement();
  2712. set1();
  2713. set2();
  2714. set_checks1();
  2715. set_checks2();
  2716. }while(checkedby1[kp2i+1][kp2j+1]);
  2717. }return;
  2718. }
  2719.  
  2720.  
  2721. }
  2722. }
  2723. end_game();
  2724. }
  2725. }
  2726. void save_step(int i1,int j1,int i2,int j2,char eaten,char piece)
  2727. {
  2728. if(turn==1)
  2729. {
  2730. pointer1++;
  2731. counter_steps1=pointer1;
  2732.  
  2733.  
  2734. steps1[counter_steps1].domain1i=i1;
  2735. steps1[counter_steps1].domain1j=j1;
  2736. steps1[counter_steps1].domain2i=i2;
  2737. steps1[counter_steps1].domain2j=j2;
  2738. steps1[counter_steps1].eaten=eaten;
  2739. steps1[counter_steps1].piece=piece;
  2740.  
  2741.  
  2742. }else
  2743. {
  2744. pointer2++;
  2745. counter_steps2=pointer2;
  2746. steps2[counter_steps2].domain1i=i1;
  2747. steps2[counter_steps2].domain1j=j1;
  2748. steps2[counter_steps2].domain2i=i2;
  2749. steps2[counter_steps2].domain2j=j2;
  2750. steps2[counter_steps2].eaten=eaten;
  2751. steps2[counter_steps2].piece=piece;
  2752.  
  2753. }
  2754. }
  2755. void undo(void)
  2756. {
  2757. int i1,j1,i2,j2;
  2758. char eaten;
  2759. char piece;
  2760. int checker;
  2761.  
  2762.  
  2763.  
  2764. if(turn==2)
  2765. {
  2766.  
  2767. if(pointer1<=0){
  2768. printf("No thing to undo.\nPlease play a move.");
  2769. movement();
  2770. return;
  2771. }else{
  2772.  
  2773. i2=steps1[pointer1].domain1i;
  2774. j2=steps1[pointer1].domain1j;
  2775. i1=steps1[pointer1].domain2i;
  2776. j1=steps1[pointer1].domain2j;
  2777. eaten=steps1[pointer1].eaten;
  2778. piece=steps1[pointer1].piece;
  2779.  
  2780. domain[i2][j2]=piece;
  2781. domain[i1][j1]=eaten;
  2782. if(domain[i1][j1]=='k')
  2783. {
  2784. kp1i=i2;
  2785. kp1j=j2;
  2786. }
  2787. if(isupper(domain[i1][j1])){
  2788. number_killed2--;}
  2789. pointer1--;
  2790. }
  2791. blackandwhite(i1,j1);
  2792.  
  2793. }
  2794. else
  2795. {
  2796.  
  2797. if(pointer2<=0){
  2798. printf("No thing to undo.\nPlease play a move.");
  2799. movement();
  2800. return;
  2801. }else{
  2802.  
  2803. i2=steps2[pointer2].domain1i;
  2804. j2=steps2[pointer2].domain1j;
  2805. i1=steps2[pointer2].domain2i;
  2806. j1=steps2[pointer2].domain2j;
  2807. eaten=steps2[pointer2].eaten;
  2808. piece=steps2[pointer2].piece;
  2809. domain[i2][j2]=piece;
  2810. domain[i1][j1]=eaten;
  2811. if(domain[i1][j1]=='K')
  2812. {
  2813. kp2i=i2;
  2814. kp2j=j2;
  2815. }
  2816. if(islower(domain[i1][j1])){
  2817. number_killed1--;}
  2818. }
  2819. blackandwhite(i1,j1);
  2820. pointer2--;
  2821. }
  2822.  
  2823. }
  2824. void redo(void)
  2825. {
  2826. int i1,j1,i2,j2;
  2827. char eaten,piece;
  2828. if(turn==1)
  2829. {
  2830. if(pointer1==counter_steps1)
  2831. {
  2832. printf("You can't re-do.\nPlease play a move.");
  2833. movement();
  2834. return;
  2835. }
  2836. else
  2837. {
  2838. pointer1++;
  2839. i1=steps1[pointer1].domain1i;
  2840. j1=steps1[pointer1].domain1j;
  2841. i2=steps1[pointer1].domain2i;
  2842. j2=steps1[pointer1].domain2j;
  2843. eaten=steps1[pointer1].eaten;
  2844. piece=steps1[pointer1].piece;
  2845.  
  2846. if(isupper(domain[i2][j2])){
  2847.  
  2848. killed2[number_killed2]=eaten;
  2849. number_killed2++;
  2850. }
  2851.  
  2852.  
  2853. if(domain[i1][j1]=='p' && i2==7)
  2854. {
  2855. premote(&domain[i1][j1]);
  2856. }
  2857. domain[i2][j2]=domain[i1][j1];
  2858. occupied[i1][j1]=0;
  2859. if(domain[i2][j2]=='k')
  2860. {
  2861. kp1i=i2;
  2862. kp1j=j2;
  2863. }
  2864.  
  2865. blackandwhite(i1,j1);
  2866.  
  2867.  
  2868. }
  2869. }else
  2870. {
  2871.  
  2872. if(pointer2==counter_steps2)
  2873. {
  2874. printf("You can't re-do.\nPlease play a move.");
  2875. movement();
  2876. return;
  2877. }
  2878. else
  2879. {
  2880. pointer2++;
  2881. i1=steps2[pointer2].domain1i;
  2882. j1=steps2[pointer2].domain1j;
  2883. i2=steps2[pointer2].domain2i;
  2884. j2=steps2[pointer2].domain2j;
  2885. eaten=steps2[pointer2].eaten;
  2886. piece=steps1[pointer1].piece;
  2887. if(islower(domain[i2][j2]))
  2888. {
  2889. killed1[number_killed1]=eaten;
  2890. number_killed1++;
  2891. }
  2892. if(domain[i1][j1]=='P' && i2==0)
  2893. {
  2894. premote(&domain[i1][j1]);
  2895. }
  2896. domain[i2][j2]=domain[i1][j1];
  2897. occupied[i1][j1]=0;
  2898. if(domain[i2][j2]=='K')
  2899. {
  2900. kp2i=i2;
  2901. kp2j=j2;
  2902. }
  2903.  
  2904. blackandwhite(i1,j1);
  2905.  
  2906. }
  2907. }
  2908.  
  2909. }
  2910. void read(char *i1,char *j1,char *i2,char *j2,char *promo)
  2911. {
  2912. int ch , i=0;
  2913. ch=getchar();
  2914. while(ch==' ' || ch=='\n')
  2915. {
  2916. ch=getchar();
  2917. }
  2918. *i1 = ch;
  2919. if(ch=='s' || ch=='l' || ch=='u' || ch=='r')
  2920. return;
  2921. *j1 = getchar();
  2922. *i2 = getchar();
  2923. *j2 = getchar();
  2924.  
  2925.  
  2926. while((ch = getchar()) != '\n')
  2927. {
  2928. if(i==0)
  2929. {
  2930. *promo=ch;
  2931. i++;
  2932. }
  2933. ch = ' ';
  2934. }
  2935.  
  2936.  
  2937.  
  2938. }
  2939. void save (void){
  2940.  
  2941. FILE *fp;
  2942. char save_name[20];
  2943. int ch , i=0,j=0;
  2944.  
  2945. printf("Enter file name : ");
  2946. ch=getchar();
  2947. while(ch==' ')
  2948. {
  2949. ch=getchar();
  2950. }
  2951. ch=getchar();
  2952. while(ch!='\n')
  2953. {
  2954. save_name[i++]=ch;
  2955. ch=getchar();
  2956.  
  2957. }
  2958. save_name[i++]='.';
  2959. save_name[i++]='t';
  2960. save_name[i++]='x';
  2961. save_name[i++]='t';
  2962. save_name[i++]='\0';
  2963.  
  2964. fp=fopen(save_name,"w");
  2965.  
  2966. for(i=0;i<ROWS;i++){
  2967. for( j=0;j<ROWS;j++){
  2968. fprintf(fp,"%c\n",domain[i][j]);
  2969. }}
  2970.  
  2971. 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);
  2972.  
  2973. for( j=0;j<number_killed1;j++){
  2974. fprintf(fp,"%c\n",killed1[j]);
  2975. }
  2976. for( j=0;j<number_killed2;j++){
  2977. fprintf(fp,"%c\n",killed2[j]);
  2978. }
  2979. for(j=0;j<counter_steps1+1;j++){
  2980. 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);
  2981. }
  2982. for(j=0;j<counter_steps2+1;j++){
  2983. 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);
  2984. }
  2985. fclose(fp);
  2986. }
  2987.  
  2988.  
  2989. void load (void){
  2990.  
  2991. FILE *fp;
  2992.  
  2993.  
  2994.  
  2995. int ch , i=0,j=0;
  2996.  
  2997. i=0;
  2998. j=0;
  2999. char save_name[20];
  3000. printf("Enter file name: ");
  3001. ch=getchar();
  3002. while((ch=getchar())!='\n')
  3003. {
  3004. save_name[i++]=ch;
  3005. }
  3006. save_name[i++]='.';
  3007. save_name[i++]='t';
  3008. save_name[i++]='x';
  3009. save_name[i++]='t';
  3010. save_name[i++]='\0';
  3011.  
  3012. fp=fopen(save_name,"r");
  3013. if(fp==NULL)
  3014. {
  3015. printf("FILE DOESN'T EXIST!\n");
  3016. return movement();
  3017. return;
  3018.  
  3019. }
  3020. for(i=0;i<ROWS;i++){
  3021. for( j=0;j<ROWS;j++){
  3022. fscanf(fp,"%c\n",&domain[i][j]);
  3023. }}
  3024.  
  3025. 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);
  3026.  
  3027. for( j=0;j<number_killed1;j++){
  3028. fscanf(fp,"%c\n",&killed1[j]);
  3029. }
  3030. for( j=0;j<number_killed2;j++){
  3031. fscanf(fp,"%c\n",&killed2[j]);
  3032. }
  3033. for(j=0;j<counter_steps1+1;j++){
  3034. 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);
  3035. }
  3036. for(j=0;j<counter_steps2+1;j++){
  3037. 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);
  3038. }
  3039. fclose(fp);
  3040. }
  3041. void end_game(void)
  3042. {
  3043. if(turn==1)
  3044. {
  3045. winner==2;
  3046. system("COLOR B");
  3047. printf("The Winner is PLAYER 2! CONGRATULATION!\n Goodluck Player 1 in another game :\). \a");
  3048. }else
  3049. {
  3050.  
  3051. winner==1;
  3052. system("COLOR B");
  3053. printf("The Winner is PLAYER 1! CONGRATULATION!\n Goodluck Player 2 in another game :\). \a");
  3054. }
  3055. }
  3056. void set1(void)
  3057. {
  3058. int i,j,k,q;
  3059. for(k=0;k<ROWS;k++)
  3060. {
  3061. for(q=0;q<COLUMNS;q++)
  3062. {
  3063. movability1[k][q]=0;
  3064. checkedby1[k+1][q+1]=0;
  3065. zone1[k][q]=0;
  3066. if(islower(domain[k][q]))
  3067. occupied[k][q]=1;
  3068. else if(isupper(domain[k][q]))
  3069. occupied[k][q]=2;
  3070. else
  3071. occupied[k][q]=0;
  3072. }
  3073. }
  3074. }
  3075. void set2(void)
  3076. {
  3077. int i,j,k,q;
  3078. for(k=0;k<ROWS;k++)
  3079. {
  3080. for(q=0;q<COLUMNS;q++)
  3081. {
  3082. movability2[k][q]=0;
  3083. checkedby2[k+1][q+1]=0;
  3084. zone2[k][q]=0;
  3085. if(islower(domain[k][q]))
  3086. occupied[k][q]=1;
  3087. else if(isupper(domain[k][q]))
  3088. occupied[k][q]=2;
  3089. else
  3090. occupied[k][q]=0;
  3091. }
  3092. }
  3093. }
  3094. void switch_turns(void)
  3095. {
  3096. if(turn==1)
  3097. turn=2;
  3098. else
  3099. turn=1;
  3100. }
  3101. void checking_move (void){
  3102.  
  3103. if(turn==1){
  3104. if(checkedby2[kp1i+1][kp1j+1]==1){
  3105. do{
  3106. printf("Your king will be checkd");
  3107. switch_turns();
  3108. undo();
  3109. switch_turns();
  3110. set1();
  3111. set2();
  3112. set_checks1();
  3113. set_checks2();
  3114. movement();
  3115. set1();
  3116. set2();
  3117. set_checks1();
  3118. set_checks2();
  3119. }while(checkedby2[kp1i+1][kp1j+1]);
  3120.  
  3121. }
  3122. }else{ if(checkedby1[kp2i+1][kp2j+1]==1){
  3123. do
  3124. {
  3125. printf("Your king will be checkd");
  3126. switch_turns();
  3127. undo();
  3128. switch_turns();
  3129. set1();
  3130. set2();
  3131. set_checks1();
  3132. set_checks2();
  3133. movement();
  3134. set1();
  3135. set2();
  3136. set_checks1();
  3137. set_checks2();
  3138. }while(checkedby1[kp2i+1][kp2j+1]);}
  3139.  
  3140. }
  3141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement