Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <string.h>
  5. char* board[9][9];
  6. char ch1,ch2;
  7. int n1,n2;
  8. char w_pawn='p';
  9. char w_rook='r';
  10. char w_knight='n';
  11. char w_bishop='b';
  12. char w_queen='q';
  13. char w_king='k';
  14. char b_pawn='P';
  15. char b_rook='R';
  16. char b_knight='N';
  17. char b_bishop='B';
  18. char b_queen='Q';
  19. char b_king='K';
  20. char black_block='-';
  21. char white_block='*';
  22. int a[4];
  23. int i1,j2,i2,j3;
  24. int counter1=0,counter2=0;
  25. char array1 [1][16];
  26. char array2 [1][16];
  27. void initializBoard ();
  28. int check_pawn_move();
  29. char *whitelost[16];
  30. char *blacklost[16];
  31. void repkace_black_white_blocks(int i1,int j1)
  32. {
  33. if ((i1+j1)%2==0)
  34. {
  35. board[i1][j1]=&white_block;
  36. }
  37. else if ((i1+j1)%2!=0)
  38. {
  39. board[i1][j1]=&black_block;
  40. }
  41. }
  42. void chessboard(){
  43. int i,j;printf(" A B C D E F G H\n");
  44. printf(" |---------|---------|---------|---------|---------|---------|---------|---------|\n");
  45.  
  46. initializBoard ();
  47. for(i=0;i<8;i++){
  48. printf("\n%d",i+1);
  49. for(j=0;j<8;j++){
  50. if (i!=0&&i!=1&&i!=6&&i!=7){
  51. if((i+j)%2==0){
  52. board [i][j]= &white_block ;
  53. printf(" %c",*board [i][j]);
  54.  
  55. }
  56. else{
  57. board [i][j]= &black_block ;
  58. printf(" %c",*board [i][j]);
  59. }}
  60. else
  61. {
  62. printf(" %c",*board [i][j]);
  63. }
  64. }
  65. printf(" %d",i+1);
  66. printf("\n\n |---------|---------|---------|---------|---------|---------|---------|---------|\n\n");
  67.  
  68. }
  69. printf("\n A B C D E F G H\n\n\n\n\n\n");
  70.  
  71. }
  72. void initializBoard ()
  73. {
  74. board[0][0]=&w_rook;
  75. board[0][1]=&w_knight;
  76. board[0][2]=&w_bishop;
  77. board[0][3]=&w_queen;
  78. board[0][4]=&w_king;
  79. board[0][5]=&w_bishop;
  80. board[0][6]=&w_knight;
  81. board[0][7]=&w_rook;
  82.  
  83. for(int i=0;i<8;i++){
  84. for(int j=0;j<8;j++){
  85. if(i==1){
  86. board[i][j]=&w_pawn;
  87. }
  88. }
  89. }
  90.  
  91. board[7][0]=&b_rook;
  92. board[7][1]=&b_knight;
  93. board[7][2]=&b_bishop;
  94. board[7][3]=&b_queen;
  95. board[7][4]=&b_king;
  96. board[7][5]=&b_bishop;
  97. board[7][6]=&b_knight;
  98. board[7][7]=&b_rook;
  99. for(int i=0;i<8;i++){
  100. for(int j=0;j<8;j++){
  101. if(i==6){
  102. board[i][j]=&b_pawn;
  103. }
  104. }
  105. }
  106. }
  107. void print ()
  108. {
  109. printf(" A B C D E F G H\n");
  110. printf(" |---------|---------|---------|---------|---------|---------|---------|---------|\n");
  111.  
  112. for (int i=0;i<8;i++)
  113. {
  114. printf("\n%d",i+1);
  115. for (int j=0;j<8;j++)
  116. {
  117. printf(" %c",*board [i][j]);
  118. }
  119. printf(" %d",i+1);
  120. if (i==2){
  121. printf(" NO. of pieces out of player 1: %d",counter1);
  122. printf("\n\n |---------|---------|---------|---------|---------|---------|---------|---------| pieces :");
  123. for (int j =0 ; j < strlen(array1 [ 0 ]); j++) printf("%c ",array1[ 0 ][ j ]);
  124. printf("\n\n");
  125. }
  126. else if (i==3)
  127. {
  128. printf(" NO. of pieces out of player 2: %d",counter2);
  129. printf("\n\n |---------|---------|---------|---------|---------|---------|---------|---------| pieces:");
  130. for (int j =0 ; j < strlen(array2 [ 0 ]); j++) printf("%c ",array2[ 0 ][ j ]);
  131. printf("\n\n");
  132.  
  133. }
  134. else
  135. {
  136. printf("\n\n |---------|---------|---------|---------|---------|---------|---------|---------|\n\n");
  137. }
  138. }
  139. printf("\n A B C D E F G H\n\n\n\n\n\n");
  140. }
  141.  
  142. void move ( char ch1,int n1,char ch2,int n2)
  143. {
  144.  
  145.  
  146. switch (ch1)
  147. {
  148. case 'A':
  149. case'a':j2=0; break;
  150. case 'B':
  151. case 'b':j2=1;break;
  152. case 'c':
  153. case 'C': j2=2; break;
  154. case 'd':
  155. case 'D': j2=3; break;
  156. case 'e':
  157. case 'E': j2=4; break;
  158. case 'f':
  159. case 'F': j2=5; break;
  160. case 'g':
  161. case 'G': j2=6; break;
  162. case 'h':
  163. case 'H': j2=7; break;
  164.  
  165. }
  166.  
  167. switch (n1)
  168. {
  169. case 1: i1=0; break;
  170. case 2: i1=1; break;
  171. case 3: i1=2; break;
  172. case 4: i1=3; break;
  173. case 5: i1=4; break;
  174. case 6: i1=5; break;
  175. case 7: i1=6; break;
  176. case 8: i1=7; break;
  177.  
  178. }
  179.  
  180. switch (ch2)
  181. {
  182. case 'A':
  183. case'a':j3=0; break;
  184. case 'B':
  185. case 'b':j3=1;break;
  186. case 'c':
  187. case 'C': j3=2; break;
  188. case 'd':
  189. case 'D': j3=3; break;
  190. case 'e':
  191. case 'E': j3=4; break;
  192. case 'f':
  193. case 'F': j3=5; break;
  194. case 'g':
  195. case 'G': j3=6; break;
  196. case 'h':
  197. case 'H': j3=7; break;
  198.  
  199. }
  200.  
  201. switch (n2)
  202. {
  203. case 1: i2=0; break;
  204. case 2: i2=1; break;
  205. case 3: i2=2; break;
  206. case 4: i2=3; break;
  207. case 5: i2=4; break;
  208. case 6: i2=5; break;
  209. case 7: i2=6; break;
  210. case 8: i2=7; break;
  211.  
  212. }
  213. a[0]=i1;
  214. a[1]=j2;
  215. a[2]=i2;
  216. a[3]=j3;
  217.  
  218. if(board[i1][j2]==&b_pawn)
  219. {
  220. char c;
  221. if ((a[2]==0)&&((board[0][a[3]]==&black_block)||(board[0][a[3]]==&white_block))) //promotion
  222. {
  223. printf("promotion to:");
  224. scanf("%c",&c);
  225. scanf("%c",&c);
  226. switch (c)
  227. {
  228. case 'Q': board[0][a[3]]=&b_queen; break;
  229. case 'B': board[0][a[3]]=&b_bishop; break;
  230. case 'R': board[0][a[3]]=&b_rook; break;
  231. case 'N': board[0][a[3]]=&b_knight; break;
  232. case 'K': board[0][a[3]]=&b_king; break;
  233. }
  234.  
  235. repkace_black_white_blocks(i1,j2);
  236. print();
  237. }
  238. else{
  239. int h=check_pawn_move();
  240. if (h==1)
  241. {
  242. if (board[i2][j3]==&w_pawn||board [a[2]][a[3]]==&w_bishop||board [a[2]][a[3]]==&w_queen||board [a[2]][a[3]]==&w_rook||board [a[2]][a[3]]==&w_knight||board [a[2]][a[3]]==&w_pawn)
  243. {
  244. array1[0][counter1]=*board[i2][j3];
  245. counter1++;
  246. }
  247. board[i2][j3]=&b_pawn;
  248. repkace_black_white_blocks(i1,j2);
  249. print();
  250. }
  251. else if (h==0)
  252. {
  253. printf("NOT VALID \n");
  254. }
  255. }
  256. }
  257.  
  258. if(board[i1][j2]==&w_pawn){
  259. char c;
  260. if ((a[2]==7)&&((board[7][a[3]]==&black_block)||(board[7][a[3]]==&white_block))) //promotion
  261. {
  262. printf("promotion to:");
  263. scanf("%c",&c);
  264. scanf("%c",&c);
  265. switch (c)
  266. {
  267. case 'q': board[7][a[3]]=&w_queen; break;
  268. case 'b': board[7][a[3]]=&w_bishop; break;
  269. case 'r': board[7][a[3]]=&w_rook; break;
  270. case 'n': board[7][a[3]]=&w_knight; break;
  271. case 'k': board[7][a[3]]=&w_king; break;
  272. }
  273.  
  274. repkace_black_white_blocks(i1,j2);
  275. print();
  276. }
  277. else{
  278. int h=check_pawn_move();
  279. if (h==1)
  280. {
  281. if (board[i2][j3]==&b_pawn||board [a[2]][a[3]]==&b_bishop||board [a[2]][a[3]]==&b_queen||board [a[2]][a[3]]==&b_rook||board [a[2]][a[3]]==&b_knight||board [a[2]][a[3]]==&b_pawn)
  282. {
  283. array2[0][counter2]=*board[i2][j2];
  284. counter2++;
  285. }
  286. board[i2][j3]=&w_pawn;
  287. repkace_black_white_blocks(i1,j2);
  288. print();
  289. }
  290. else if (h==0)
  291. {
  292. printf("NOT VALID \n");
  293. }
  294. }
  295. }
  296.  
  297. if(board[i1][j2]==&w_knight){
  298. int h=check_knight_move ();
  299. if (h==1)
  300. {
  301. if (board[i2][j3]==&b_pawn||board [a[2]][a[3]]==&b_bishop||board [a[2]][a[3]]==&b_queen||board [a[2]][a[3]]==&b_rook||board [a[2]][a[3]]==&b_knight||board [a[2]][a[3]]==&b_pawn)
  302. {
  303. array2[0][counter2]=*board[i2][j3];
  304. counter2++;
  305. }
  306. board[i2][j3]=&w_knight;
  307. repkace_black_white_blocks(i1,j2);
  308. print();
  309. }
  310. else if (h==0)
  311. {
  312. printf("NOT VALID \n");
  313. }}
  314. if(board[i1][j2]==&b_knight){
  315. int h=check_knight_move ();
  316. if (h==1)
  317. {
  318. if (board[i2][j3]==&w_pawn||board [a[2]][a[3]]==&w_bishop||board [a[2]][a[3]]==&w_queen||board [a[2]][a[3]]==&w_rook||board [a[2]][a[3]]==&w_knight||board [a[2]][a[3]]==&w_pawn)
  319. {
  320. array1[0][counter1]=*board[i2][j3];
  321. counter1++;
  322. }
  323. board[i2][j3]=&b_knight;
  324. repkace_black_white_blocks(i1,j2);
  325. print();
  326. }
  327. else if (h==0)
  328. {
  329. printf("NOT VALID \n");
  330. }}
  331.  
  332.  
  333.  
  334.  
  335. if(board[i1][j2]==&w_king){
  336. int h=check_king_move();
  337. if (h==1)
  338. {
  339. if (board[i2][j3]==&b_pawn||board [a[2]][a[3]]==&b_bishop||board [a[2]][a[3]]==&b_queen||board [a[2]][a[3]]==&b_rook||board [a[2]][a[3]]==&b_knight||board [a[2]][a[3]]==&b_pawn)
  340. {
  341. array2[0][counter2]=*board[i2][j3];
  342. counter2++;
  343. }
  344. board[i2][j3]=&w_king;
  345. repkace_black_white_blocks(i1,j2);
  346. print();
  347. }
  348. else if (h==0)
  349. {
  350. printf("NOT VALID \n");
  351. }}
  352.  
  353. if(board[i1][j2]==&b_king){
  354. int h=check_king_move();
  355. if (h==1)
  356. {
  357. if (board[i2][j3]==&w_pawn||board [a[2]][a[3]]==&w_bishop||board [a[2]][a[3]]==&w_queen||board [a[2]][a[3]]==&w_rook||board [a[2]][a[3]]==&w_knight||board [a[2]][a[3]]==&w_pawn)
  358. {
  359. array1[0][counter1]=*board[i2][j3];
  360. counter1++;
  361. }
  362. board[i2][j3]=&b_king;
  363. repkace_black_white_blocks(i1,j2);
  364. print();
  365. }
  366. else if (h==0)
  367. {
  368. printf("NOT VALID \n");
  369. }}
  370.  
  371. if(board[i1][j2]==&b_queen){
  372. int h=check_queen_move();
  373. if(h==1){
  374. if (board[i2][j3]==&w_pawn||board [a[2]][a[3]]==&w_bishop||board [a[2]][a[3]]==&w_queen||board [a[2]][a[3]]==&w_rook||board [a[2]][a[3]]==&w_knight||board [a[2]][a[3]]==&w_pawn)
  375. {
  376. array1[0][counter1]=*board[i2][j3];
  377. counter1++;
  378. }
  379.  
  380. board[i2][j3]=&b_queen;
  381. repkace_black_white_blocks(i1,j2);
  382. print();
  383. }else if (h==0)
  384. {
  385. printf("NOT VALID \n");
  386. }
  387. }
  388. if(board[i1][j2]==&w_queen){
  389. int h=check_queen_move();
  390. if(h==1){
  391. if (board[i2][j3]==&b_pawn||board [a[2]][a[3]]==&b_bishop||board [a[2]][a[3]]==&b_queen||board [a[2]][a[3]]==&b_rook||board [a[2]][a[3]]==&b_knight||board [a[2]][a[3]]==&b_pawn)
  392. {
  393. array2[0][counter2]=*board[i2][j3];
  394. counter2++;
  395. }
  396. board[i2][j3]=&w_queen;
  397. repkace_black_white_blocks(i1,j2);
  398. print();
  399. }else if (h==0)
  400. {
  401. printf("NOT VALID \n");
  402. }
  403. }
  404.  
  405.  
  406. if(board[i1][j2]==&b_rook){
  407. int h=check_rook_move();
  408. if(h==1){
  409. if (board[i2][j3]==&w_pawn||board [a[2]][a[3]]==&w_bishop||board [a[2]][a[3]]==&w_queen||board [a[2]][a[3]]==&w_rook||board [a[2]][a[3]]==&w_knight||board [a[2]][a[3]]==&w_pawn)
  410. {
  411. array1[0][counter1]=*board[i2][j3];
  412. counter1++;
  413. }
  414. board[i2][j3]=&b_rook;
  415. repkace_black_white_blocks(i1,j2);
  416. print();
  417. }else if (h==0)
  418. {
  419. printf("NOT VALID \n");
  420. }
  421. }
  422. if(board[i1][j2]==&w_rook){
  423. int h=check_rook_move();
  424. if(h==1){
  425. if (board[i2][j3]==&b_pawn||board [a[2]][a[3]]==&b_bishop||board [a[2]][a[3]]==&b_queen||board [a[2]][a[3]]==&b_rook||board [a[2]][a[3]]==&b_knight||board [a[2]][a[3]]==&b_pawn)
  426. {
  427. array2[0][counter2]=*board[i2][j3];
  428. counter2++;
  429. }
  430. board[i2][j3]=&w_rook;
  431. repkace_black_white_blocks(i1,j2);
  432. print();
  433. }else if (h==0)
  434. {
  435. printf("NOT VALID \n");
  436. }
  437. }
  438. if(board[i1][j2]==&b_bishop){
  439. int h=check_bishop_move();
  440. if(h==1){
  441. if (board[i2][j3]==&w_pawn||board [a[2]][a[3]]==&w_bishop||board [a[2]][a[3]]==&w_queen||board [a[2]][a[3]]==&w_rook||board [a[2]][a[3]]==&w_knight||board [a[2]][a[3]]==&w_pawn)
  442. {
  443. array1[0][counter1]=*board[i2][j3];
  444. counter1++;
  445. }
  446. board[i2][j3]=&b_bishop;
  447. repkace_black_white_blocks(i1,j1);
  448. print();
  449. }else if (h==0)
  450. {
  451. printf("NOT VALID \n");
  452. }
  453. }
  454. if(board[i1][j2]==&w_bishop){
  455. int h=check_bishop_move();
  456. if(h==1){
  457. if (board[i2][j3]==&b_pawn||board [a[2]][a[3]]==&b_bishop||board [a[2]][a[3]]==&b_queen||board [a[2]][a[3]]==&b_rook||board [a[2]][a[3]]==&b_knight||board [a[2]][a[3]]==&b_pawn)
  458. {
  459. array2[0][counter2]=*board[i2][j3];
  460. counter2++;
  461. }
  462. board[i2][j3]=&w_bishop;
  463. repkace_black_white_blocks(i1,j2);
  464. print();
  465. }else if (h==0)
  466. {
  467. printf("NOT VALID \n");
  468. }
  469. }
  470. }
  471.  
  472. int check_pawn_move(){
  473. int get;
  474. if(board[a[0]][a[1]]==&w_pawn){
  475. if(a[0]==1&&a[3]==a[1]){
  476. if((a[2]==2||a[2]==3)&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_king&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_bishop){
  477. get=1;
  478. }
  479. else{
  480. get=0;
  481. }
  482. }
  483. else{
  484. if (a[2]==a[0]+1&&(a[3]==a[1]+1||a[3]==a[1]-1)){
  485. if (board[a[2]][a[3]]==&b_pawn||board[a[2]][a[3]]==&b_rook||board[a[2]][a[3]]==&b_knight||board[a[2]][a[3]]==&b_bishop||board[a[2]][a[3]]==&b_queen)
  486. {
  487. get=1;
  488. }else
  489. {
  490. get=0;
  491. }
  492. }else if((a[0]==a[2]-1)&&a[3]==a[1])
  493. {
  494. if (board[a[2]][a[3]]== &black_block||board[a[2]][a[3]]== &white_block)
  495. {
  496. get=1;
  497. }
  498.  
  499. else
  500. {
  501. get=0;
  502. }
  503. }else
  504. {
  505. get=0;
  506. }
  507. }
  508. }
  509. if(board[a[0]][a[1]]==&b_pawn){
  510. if(a[0]==6&&a[3]==a[1]&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_bishop){
  511. if(a[2]==5||a[2]==4){
  512. get=1;
  513. }
  514. else{
  515. get=0;
  516. }}
  517.  
  518. else{
  519. if(a[2]==a[0]-1&&(a[3]==a[1]+1||a[3]==a[1]-1)){
  520. if (board[a[2]][a[3]]==&w_pawn||board[a[2]][a[3]]==&w_rook||board[a[2]][a[3]]==&w_knight||board[a[2]][a[3]]==&w_bishop||board[a[2]][a[3]]==&w_queen)
  521. {
  522. get=1;
  523. }
  524.  
  525. else
  526. {
  527. get=0;
  528. }
  529. }else if ((a[0]==a[2]+1)&&a[3]==a[1])
  530. {
  531. if (board[a[2]][a[3]]== &black_block||board[a[2]][a[3]]== &white_block)
  532. {
  533. get=1;
  534. }
  535.  
  536. else
  537. {
  538. get=0;
  539. }
  540. }else
  541. {
  542. get=0;
  543. }
  544. }
  545. }
  546. return get;
  547. }
  548.  
  549. int check_king_move()
  550. {
  551. int get;
  552. if(board[a[0]][a[1]]==&w_king)
  553. {
  554. if ((a[2]==a[0]||a[2]==a[0]+1||a[2]==a[0]-1)&&(a[1]==a[3]||a[1]==a[3]+1||a[1]==a[3]-1))
  555. {
  556. if (board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight)
  557. {
  558. get =1;
  559. }
  560. else
  561. {
  562. get=0;
  563. }
  564. }else
  565. {
  566. get=0;
  567. }
  568. }
  569. if(board[a[0]][a[1]]==&b_king)
  570. {
  571. if ((a[2]==a[0]||a[2]==a[0]+1||a[2]==a[0]-1)&&(a[1]==a[3]||a[1]==a[3]+1||a[1]==a[3]-1))
  572. {
  573. if (board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight)
  574. {
  575. get =1;
  576.  
  577. }
  578. else
  579. {
  580. get=0;
  581. }
  582. }
  583. else
  584. {
  585. get=0;
  586. }
  587. }
  588. return get;
  589. }
  590.  
  591. int check_knight_move()
  592. {int get;
  593. if(board[a[0]][a[1]]==&w_knight)
  594. {
  595. if (((a[2]==a[0]-1||a[2]==a[0]+1)&&(a[3]==a[1]-2||a[3]==a[1]+2))||((a[2]==a[0]-2||a[2]==a[0]+2)&&(a[3]==a[1]-1||a[3]==a[1]+1)))
  596. {
  597. if (board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight)
  598. {
  599. get=1;
  600. }else
  601. {
  602. get=0;
  603. }
  604. }else
  605. {
  606. get=0;
  607. }
  608. }
  609. if(board[a[0]][a[1]]==&b_knight)
  610. {
  611. if (((a[2]==a[0]-1||a[2]==a[0]+1)&&(a[3]==a[1]-2||a[3]==a[1]+2))||((a[2]==a[0]-2||a[2]==a[0]+2)&&(a[3]==a[1]-1||a[3]==a[1]+1)))
  612. {
  613. if (board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight)
  614. {
  615. get=1;
  616. }else
  617. {
  618. get=0;
  619. }
  620. }else
  621. {
  622. get=0;
  623. }
  624. }
  625. return get;
  626. }
  627.  
  628. int check_queen_move(){
  629. int check;
  630. int k=0;
  631. int get=0;
  632. if(board[a[0]][a[1]]==&b_queen){
  633. if(a[1]==a[3]&&a[0]>a[2]){ /*for straight moves*/
  634. for (int i=1;i<=(fabs(a[2]-a[0]));i++)
  635. {
  636. if (board[a[0]-i][a[3]]==&black_block||board[a[0]-i][a[3]]==&white_block)
  637. {
  638. check=1;
  639. if (i==(fabs(a[2]-a[0])-1))
  640.  
  641. {
  642. break;
  643. }
  644. }
  645. else
  646. {
  647. check=0;
  648. break;
  649. }
  650. }
  651. if (check==1){
  652. if(board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  653. get=1;
  654. }else {
  655. get=0;}
  656. }else
  657. {
  658. get=0;
  659. }
  660. return get;
  661. }
  662.  
  663. if(a[1]==a[3]&&a[0]<a[2]){ /*for straight moves*/
  664. for (int i=1;i<=(fabs(a[2]-a[0]));i++)
  665. {
  666. if (board[a[0]+i][a[3]]==&black_block||board[a[0]+i][a[3]]==&white_block)
  667. {
  668. check=1;
  669. if (i==(fabs(a[2]-a[0])-1))
  670.  
  671. {
  672. break;
  673. }
  674. }
  675. else
  676. {
  677. check=0;
  678. break;
  679. }
  680. }
  681. if (check==1){
  682. if(board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  683. get=1;
  684. }else {
  685. get=0;}
  686. }else
  687. {
  688. get=0;
  689. }
  690. return get;
  691. }
  692. if(a[0]==a[2]&&a[1]<a[3]){ /*for horizontal moves*/
  693. for (int i=1;i<=(fabs(a[1]-a[3]));i++)
  694. {
  695. if (board[a[0]][a[1]+i]==&black_block||board[a[0]][a[1]+i]==&white_block)
  696. {
  697. check=1;
  698. if (i==(fabs(a[1]-a[3])-1))
  699.  
  700. {
  701. break;
  702. }
  703. }
  704. else
  705. {
  706. check=0;
  707. break;
  708. }
  709. }
  710. if (check==1){
  711. if(board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  712. get=1;
  713. }else {
  714. get=0;}
  715. }else
  716. {
  717. get=0;
  718. }
  719. return get;
  720. }
  721. if(a[0]==a[2]&&a[1]>a[3]){ /*for horizontal moves*/
  722. for (int i=1;i<=(fabs(a[1]-a[3]));i++)
  723. {
  724. if (board[a[0]][a[1]-i]==&black_block||board[a[0]][a[1]-i]==&white_block)
  725. {
  726. check=1;
  727. if (i==(fabs(a[1]-a[3])-1))
  728.  
  729. {
  730. break;
  731. }
  732. }
  733. else
  734. {
  735. check=0;
  736. break;
  737. }
  738. }
  739. if (check==1){
  740. if(board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  741. get=1;
  742. }else {
  743. get=0;}
  744. }else
  745. {
  746. get=0;
  747. }
  748. return get;
  749. }
  750.  
  751. if(board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  752. get=1;
  753. }else {
  754. get=0;}
  755. return get;
  756.  
  757. /*for RIGHT diagonal move*/
  758. if(a[3]<a[1]){{if(a[3]==a[1]-fabs(a[0]-a[2])){
  759. board[a[2]][a[3]]=&b_queen;
  760. get=1;
  761. }else {
  762. get=0;}
  763. return get;
  764. }
  765. }/*for left diagonal move*/
  766. if(a[3]>a[1]){if(a[3]==fabs(a[0]-a[2])+a[1]){
  767. board[a[2]][a[3]]=&b_queen;
  768. get=1;
  769. }else {
  770. get=0;}
  771. return get;
  772. } }
  773. if(board[a[0]][a[1]]==&w_queen){
  774. if(a[1]==a[3]&&a[0]>a[2]){ /*for straight moves*/
  775. for (int i=1;i<=(fabs(a[2]-a[0]));i++)
  776. {
  777. if (board[a[0]-i][a[3]]==&black_block||board[a[0]-i][a[3]]==&white_block)
  778. {
  779. check=1;
  780. if (i==(fabs(a[2]-a[0])-1))
  781.  
  782. {
  783. break;
  784. }
  785. }
  786. else
  787. {
  788. check=0;
  789. break;
  790. }
  791. }
  792. if (check==1){
  793. if(board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&w_king&&board[a[2]][a[3]]!=&b_king){
  794. get=1;
  795. }else {
  796. get=0;}
  797. }else
  798. {
  799. get=0;
  800. }
  801. return get;
  802. }
  803.  
  804. if(a[1]==a[3]&&a[0]<a[2]){ /*for straight moves*/
  805. for (int i=1;i<=(fabs(a[2]-a[0]));i++)
  806. {
  807. if (board[a[0]+i][a[3]]==&black_block||board[a[0]+i][a[3]]==&white_block)
  808. {
  809. check=1;
  810. if (i==(fabs(a[2]-a[0])-1))
  811.  
  812. {
  813. break;
  814. }
  815. }
  816. else
  817. {
  818. check=0;
  819. break;
  820. }
  821. }
  822. if (check==1){
  823. if(board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&w_king&&board[a[2]][a[3]]!=&b_king){
  824. get=1;
  825. }else {
  826. get=0;}
  827. }else
  828. {
  829. get=0;
  830. }
  831. return get;
  832. }
  833. if(a[0]==a[2]&&a[1]<a[3]){ /*for horizontal moves*/
  834. for (int i=1;i<=(fabs(a[1]-a[3]));i++)
  835. {
  836. if (board[a[0]][a[1]+i]==&black_block||board[a[0]][a[1]+i]==&white_block)
  837. {
  838. check=1;
  839. if (i==(fabs(a[1]-a[3])-1))
  840.  
  841. {
  842. break;
  843. }
  844. }
  845. else
  846. {
  847. check=0;
  848. break;
  849. }
  850. }
  851. if (check==1){
  852. if(board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  853. get=1;
  854. }else {
  855. get=0;}
  856. }else
  857. {
  858. get=0;
  859. }
  860. return get;
  861. }
  862. if(a[0]==a[2]&&a[1]>a[3]){ /*for horizontal moves*/
  863. for (int i=1;i<=(fabs(a[1]-a[3]));i++)
  864. {
  865. if (board[a[0]][a[1]-i]==&black_block||board[a[0]][a[1]-i]==&white_block)
  866. {
  867. check=1;
  868. if (i==(fabs(a[1]-a[3])-1))
  869.  
  870. {
  871. break;
  872. }
  873. }
  874. else
  875. {
  876. check=0;
  877. break;
  878. }
  879. }
  880. if (check==1){
  881. if(board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  882. get=1;
  883. }else {
  884. get=0;}
  885. }else
  886. {
  887. get=0;
  888. }
  889. return get;
  890. }
  891.  
  892. if(board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  893. get=1;
  894. }else {
  895. get=0;}
  896. return get;
  897.  
  898. if(a[3]>a[1]){if(a[3]==fabs(a[0]-a[2])+a[1]){ /*for RIGHT diagonal move*/
  899. board[a[2]][a[3]]=&w_queen;
  900. get=1;
  901. }else {
  902. get=0;}
  903. return get;
  904.  
  905. }/*for left diagonal move*/
  906. if(a[3]<a[1]){if(a[3]==a[1]-fabs(a[0]-a[2])){
  907. board[a[2]][a[3]]=&w_queen;
  908. get=1;
  909. }else {
  910. get=0;}
  911. return get;
  912. }}
  913. }
  914. int check_rook_move(){
  915. int check=0;
  916. int get;
  917. if (a[0]==a[2]||a[1]==a[3]){
  918. if(board[a[0]][a[1]]==&b_rook){
  919. if(a[1]==a[3]&&a[0]>a[2]){ /*for straight moves*/
  920. for (int i=1;i<=(fabs(a[2]-a[0]));i++)
  921. {
  922. if (board[a[0]-i][a[3]]==&black_block||board[a[0]-i][a[3]]==&white_block)
  923. {
  924. check=1;
  925. if (i==(fabs(a[2]-a[0])-1))
  926.  
  927. {
  928. break;
  929. }
  930. }
  931. else
  932. {
  933. check=0;
  934. break;
  935. }
  936. }
  937. if (check==1){
  938. if(board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  939. get=1;
  940. }else {
  941. get=0;}
  942. }else
  943. {
  944. get=0;
  945. }
  946. return get;
  947. }
  948.  
  949. if(a[1]==a[3]&&a[0]<a[2]){ /*for straight moves*/
  950. for (int i=1;i<=(fabs(a[2]-a[0]));i++)
  951. {
  952. if (board[a[0]+i][a[3]]==&black_block||board[a[0]+i][a[3]]==&white_block)
  953. {
  954. check=1;
  955. if (i==(fabs(a[2]-a[0])-1))
  956.  
  957. {
  958. break;
  959. }
  960. }
  961. else
  962. {
  963. check=0;
  964. break;
  965. }
  966. }
  967. if (check==1){
  968. if(board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  969. get=1;
  970. }else {
  971. get=0;}
  972. }else
  973. {
  974. get=0;
  975. }
  976. return get;
  977. }
  978. if(a[0]==a[2]&&a[1]<a[3]){ /*for horizontal moves*/
  979. for (int i=1;i<=(fabs(a[1]-a[3]));i++)
  980. {
  981. if (board[a[0]][a[1]+i]==&black_block||board[a[0]][a[1]+i]==&white_block)
  982. {
  983. check=1;
  984. if (i==(fabs(a[1]-a[3])-1))
  985.  
  986. {
  987. break;
  988. }
  989. }
  990. else
  991. {
  992. check=0;
  993. break;
  994. }
  995. }
  996. if (check==1){
  997. if(board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  998. get=1;
  999. }else {
  1000. get=0;}
  1001. }else
  1002. {
  1003. get=0;
  1004. }
  1005. return get;
  1006. }
  1007. if(a[0]==a[2]&&a[1]>a[3]){ /*for horizontal moves*/
  1008. for (int i=1;i<=(fabs(a[1]-a[3]));i++)
  1009. {
  1010. if (board[a[0]][a[1]-i]==&black_block||board[a[0]][a[1]-i]==&white_block)
  1011. {
  1012. check=1;
  1013. if (i==(fabs(a[1]-a[3])-1))
  1014.  
  1015. {
  1016. break;
  1017. }
  1018. }
  1019. else
  1020. {
  1021. check=0;
  1022. break;
  1023. }
  1024. }
  1025. if (check==1){
  1026. if(board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  1027. get=1;
  1028. }else {
  1029. get=0;}
  1030. }else
  1031. {
  1032. get=0;
  1033. }
  1034. return get;
  1035. }
  1036.  
  1037. if(board[a[2]][a[3]]!=&b_bishop&&board[a[2]][a[3]]!=&b_rook&&board[a[2]][a[3]]!=&b_knight&&board[a[2]][a[3]]!=&b_pawn&&board[a[2]][a[3]]!=&b_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  1038. get=1;
  1039. }else {
  1040. get=0;}
  1041. return get;
  1042. }
  1043. if(board[a[0]][a[1]]==&w_rook){
  1044. if(a[1]==a[3]&&a[0]>a[2]){ /*for straight moves*/
  1045. for (int i=1;i<=(fabs(a[2]-a[0]));i++)
  1046. {
  1047. if (board[a[0]-i][a[3]]==&black_block||board[a[0]-i][a[3]]==&white_block)
  1048. {
  1049. check=1;
  1050. if (i==(fabs(a[2]-a[0])-1))
  1051.  
  1052. {
  1053. break;
  1054. }
  1055. }
  1056. else
  1057. {
  1058. check=0;
  1059. break;
  1060. }
  1061. }
  1062. if (check==1){
  1063. if(board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&w_king&&board[a[2]][a[3]]!=&b_king){
  1064. get=1;
  1065. }else {
  1066. get=0;}
  1067. }else
  1068. {
  1069. get=0;
  1070. }
  1071. return get;
  1072. }
  1073.  
  1074. if(a[1]==a[3]&&a[0]<a[2]){ /*for straight moves*/
  1075. for (int i=1;i<=(fabs(a[2]-a[0]));i++)
  1076. {
  1077. if (board[a[0]+i][a[3]]==&black_block||board[a[0]+i][a[3]]==&white_block)
  1078. {
  1079. check=1;
  1080. if (i==(fabs(a[2]-a[0])-1))
  1081.  
  1082. {
  1083. break;
  1084. }
  1085. }
  1086. else
  1087. {
  1088. check=0;
  1089. break;
  1090. }
  1091. }
  1092. if (check==1){
  1093. if(board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&w_king&&board[a[2]][a[3]]!=&b_king){
  1094. get=1;
  1095. }else {
  1096. get=0;}
  1097. }else
  1098. {
  1099. get=0;
  1100. }
  1101. return get;
  1102. }
  1103. if(a[0]==a[2]&&a[1]<a[3]){ /*for horizontal moves*/
  1104. for (int i=1;i<=(fabs(a[1]-a[3]));i++)
  1105. {
  1106. if (board[a[0]][a[1]+i]==&black_block||board[a[0]][a[1]+i]==&white_block)
  1107. {
  1108. check=1;
  1109. if (i==(fabs(a[1]-a[3])-1))
  1110.  
  1111. {
  1112. break;
  1113. }
  1114. }
  1115. else
  1116. {
  1117. check=0;
  1118. break;
  1119. }
  1120. }
  1121. if (check==1){
  1122. if(board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  1123. get=1;
  1124. }else {
  1125. get=0;}
  1126. }else
  1127. {
  1128. get=0;
  1129. }
  1130. return get;
  1131. }
  1132. if(a[0]==a[2]&&a[1]>a[3]){ /*for horizontal moves*/
  1133. for (int i=1;i<=(fabs(a[1]-a[3]));i++)
  1134. {
  1135. if (board[a[0]][a[1]-i]==&black_block||board[a[0]][a[1]-i]==&white_block)
  1136. {
  1137. check=1;
  1138. if (i==(fabs(a[1]-a[3])-1))
  1139.  
  1140. {
  1141. break;
  1142. }
  1143. }
  1144. else
  1145. {
  1146. check=0;
  1147. break;
  1148. }
  1149. }
  1150. if (check==1){
  1151. if(board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  1152. get=1;
  1153. }else {
  1154. get=0;}
  1155. }else
  1156. {
  1157. get=0;
  1158. }
  1159. return get;
  1160. }
  1161.  
  1162. if(board[a[2]][a[3]]!=&w_bishop&&board[a[2]][a[3]]!=&w_rook&&board[a[2]][a[3]]!=&w_knight&&board[a[2]][a[3]]!=&w_pawn&&board[a[2]][a[3]]!=&w_queen&&board[a[2]][a[3]]!=&b_king&&board[a[2]][a[3]]!=&w_king){
  1163. get=1;
  1164. }else {
  1165. get=0;}
  1166. return get;
  1167. }
  1168. }else
  1169. get =0;
  1170. return get;
  1171. }
  1172. int check_bishop_move(){int get=0;
  1173. if(board[a[0]][a[1]]==&b_bishop){
  1174. /*for RIGHT diagonal move*/
  1175. if(a[3]<a[1]){{if(a[3]==a[1]-fabs(a[0]-a[2])){
  1176. board[a[2]][a[3]]=&b_bishop;
  1177. get=1;
  1178. }else {
  1179. get=0;}
  1180. return get;
  1181. }
  1182. }/*for left diagonal move*/
  1183. if(a[3]>a[1]){if(a[3]==fabs(a[0]-a[2])+a[1]){
  1184. board[a[2]][a[3]]=&b_queen;
  1185. get=1;
  1186. }else {
  1187. get=0;}
  1188. return get;
  1189. }
  1190. }
  1191. if(board[a[0]][a[1]]==&w_bishop){
  1192. /*for RIGHT diagonal move*/
  1193. if(a[3]>a[1]){if(a[3]==fabs(a[0]-a[2])+a[1]){
  1194. board[a[2]][a[3]]=&w_bishop;
  1195. get=1;
  1196. }else {
  1197. get=0;}
  1198. return get;
  1199.  
  1200. }/*for left diagonal move*/
  1201. if(a[3]<a[1]){if(a[3]==a[1]-fabs(a[0]-a[2])){
  1202. board[a[2]][a[3]]=&w_bishop;
  1203. get=1;
  1204. }else {
  1205. get=0;}
  1206. return get;
  1207. }
  1208. }
  1209. }
  1210.  
  1211. int main(){
  1212. char ch1,ch2;
  1213. int n1,n2;
  1214.  
  1215. chessboard();
  1216. for (int i=0;i<100;i++){
  1217. scanf(" %c%d %c%d",&ch1,&n1,&ch2,&n2);
  1218. move(ch1,n1,ch2,n2);}
  1219. return 0;
  1220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement