Advertisement
Essam_khames

Untitled

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