Advertisement
Essam_khames

Untitled

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