giganciprogramowania

l18 Warcaby

May 15th, 2023
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include<stdio.h>
  3. using namespace std;
  4.  
  5. int pionkiBiale = 12;
  6. int pionkiCzarne = 12;
  7.  
  8. void rysuj(int plansza[8][8], bool ruchBialy)
  9. {
  10. cout << "Pozostale biale pionki:" << pionkiBiale << endl <<"Pozostale czarne pionki:" << pionkiCzarne << endl;
  11. if (ruchBialy)
  12. {
  13. cout << "Ruch wykonuja biale" << endl;
  14. }
  15. else
  16. {
  17. cout << "Ruch wykonuja czarne" << endl;
  18. }
  19.  
  20. cout << " ABCDEFGH" << endl;
  21. for (int i = 0; i < 8; i++)
  22. {
  23. printf("\033[37m");
  24. cout << i+1;
  25. for (int j = 0; j < 8; j++)
  26. {
  27. if (plansza[i][j]==0)
  28. {
  29. //rysowanie białego pola
  30. printf("\033[37m");
  31. cout << '\xFE';
  32. }
  33. else if (plansza[i][j]==1)
  34. {
  35. //rysowanie czarnego pola
  36. printf("\033[30m");
  37. cout << ' ';
  38. }
  39. else if (plansza[i][j] == 2)
  40. {
  41. //rysowanie czerwonego(czarnego) pionka
  42. printf("\033[31m");
  43. cout << "X";
  44. }
  45. else if (plansza[i][j] == 3)
  46. {
  47. //rysowanie bialego pionka
  48. printf("\033[37m");
  49. cout << "X";
  50. }
  51. }
  52. cout << endl;
  53. }
  54. }
  55.  
  56. //funkcja wykonujaca ruch, zwraca false jezeli ruch sie nie odbyl i true jezeli ruch
  57. //zostal wykonany
  58. bool sprawdz_ruch(int plansza[8][8],bool czyBiale, int kolumnaSkad, int wierszSkad, int kolumnaDokad, int wierszDokad)
  59. {
  60. //sprawdzamy czy ruch mieści się w planszy
  61. if (kolumnaSkad > 8 || kolumnaSkad < 0 || kolumnaDokad >8 || kolumnaDokad < 0 || wierszSkad >8 || wierszSkad < 0 || wierszDokad >8 || wierszDokad < 0)
  62. {
  63. return false;
  64. }
  65. //sprawdzamy czy nie ruszamy się z/na białego pola
  66. else if (plansza[wierszSkad][kolumnaSkad] == 0 || plansza[wierszDokad][kolumnaDokad] != 1 || plansza[wierszSkad][kolumnaSkad] == 1)
  67. {
  68. return false;
  69. }
  70. //sprawdzamy czy nie podalismy dwa razy tego samego pola
  71. else if (kolumnaSkad == kolumnaDokad || wierszDokad == wierszSkad)
  72. {
  73. return false;
  74. }
  75. //ruch bialych
  76. if (czyBiale)
  77. {
  78. //sprawdzamy czy pionek ktory ma sie ruszyc nalezy do bialego gracza
  79. if (plansza[wierszSkad][kolumnaSkad] == 3)
  80. {
  81. //sprawdzamy czy przesuwamy sie o jeden wiersz
  82. if (wierszSkad - wierszDokad == 1 || wierszSkad - wierszDokad == -1)
  83. {
  84. //sprawdzamy czy przesuwamy sie o jedna kolumne
  85. if (kolumnaSkad - kolumnaDokad == 1 || kolumnaSkad - kolumnaDokad == -1)
  86. {
  87. //zamieniamy zawartosc pol skad i dokada (pionek idzie na puste pole, a pole na
  88. //ktorym byl pionek staje sie puste)
  89. int tmp;
  90. tmp = plansza[wierszSkad][kolumnaSkad];
  91. plansza[wierszSkad][kolumnaSkad] = plansza[wierszDokad][kolumnaDokad];
  92. plansza[wierszDokad][kolumnaDokad] = tmp;
  93. return true;
  94. }
  95. // przesuwamy sie na niedozwolona kolumne
  96. else
  97. {
  98. return false;
  99. }
  100. }
  101. //sprawdzamy czy przesuwamy sie o 2 wiersze (w trakcie bicia)
  102. else if (wierszSkad - wierszDokad == 2 || wierszSkad - wierszDokad == -2)
  103. {
  104. //sprawdzamy czy przesuwamy sie o dwie kolumny
  105. if (kolumnaSkad - kolumnaDokad == 2 || kolumnaSkad - kolumnaDokad == -2)
  106. {
  107. //sprawdzamy czy przeskakujemy nad pionkiem przeciwnika
  108. if (plansza[(wierszSkad+wierszDokad)/2][(kolumnaSkad + kolumnaDokad) / 2] == 2)
  109. {
  110. int tmp;
  111. tmp = plansza[wierszSkad][kolumnaSkad];
  112. plansza[wierszSkad][kolumnaSkad] = plansza[wierszDokad][kolumnaDokad];
  113. plansza[wierszDokad][kolumnaDokad] = tmp;
  114. plansza[(wierszSkad + wierszDokad) / 2][(kolumnaSkad + kolumnaDokad) / 2] = 1;
  115. pionkiCzarne -= 1;
  116. return true;
  117. }
  118. //dany ruch nie jest biciem, wiec jest niedozwolony
  119. else
  120. {
  121. return false;
  122. }
  123. }
  124. // przesuwamy sie na niedozwolona kolumne
  125. else
  126. {
  127. return false;
  128. }
  129.  
  130. }
  131. //przesuwamy sie na niedozwolony wiersz
  132. else
  133. {
  134. return false;
  135. }
  136. }
  137. //wybrany pionek nie nalezy do gracza
  138. else
  139. {
  140. return false;
  141. }
  142. }
  143. //ruch czarnych
  144. else
  145. {
  146. if (plansza[wierszSkad][kolumnaSkad] == 2)
  147. {
  148. if (wierszSkad - wierszDokad == -1 || wierszSkad - wierszDokad == 1)
  149. {
  150. if (kolumnaSkad - kolumnaDokad == 1 || kolumnaSkad - kolumnaDokad == -1)
  151. {
  152. cout << "Ruch mozliwy" << endl;
  153. int tmp;
  154. tmp = plansza[wierszSkad][kolumnaSkad];
  155. plansza[wierszSkad][kolumnaSkad] = plansza[wierszDokad][kolumnaDokad];
  156. plansza[wierszDokad][kolumnaDokad] = tmp;
  157. return true;
  158. }
  159. //Pola nie sa w przyleglych rzedach
  160. else
  161. {
  162. return false;
  163. }
  164. }
  165.  
  166. else if (wierszSkad - wierszDokad == 2 || wierszSkad - wierszDokad == -2)
  167. {
  168. //sprawdzamy czy przesuwamy sie o dwie kolumny
  169. if (kolumnaSkad - kolumnaDokad == 2 || kolumnaSkad - kolumnaDokad == -2)
  170. {
  171. //sprawdzamy czy przeskakujemy nad pionkiem przeciwnika
  172. if (plansza[(wierszSkad + wierszDokad) / 2][(kolumnaSkad + kolumnaDokad) / 2] == 3)
  173. {
  174. int tmp;
  175. tmp = plansza[wierszSkad][kolumnaSkad];
  176. plansza[wierszSkad][kolumnaSkad] = plansza[wierszDokad][kolumnaDokad];
  177. plansza[wierszDokad][kolumnaDokad] = tmp;
  178. plansza[(wierszSkad + wierszDokad) / 2][(kolumnaSkad + kolumnaDokad) / 2] = 1;
  179. pionkiBiale -= 1;
  180. return true;
  181. }
  182. //dany ruch nie jest biciem, wiec jest niedozwolony
  183. else
  184. {
  185. return false;
  186. }
  187. }
  188. // przesuwamy sie na niedozwolona kolumne
  189. else
  190. {
  191. return false;
  192. }
  193.  
  194. }
  195.  
  196. // Pola nie są w kolejnych wierszach
  197. else
  198. {
  199. return false;
  200. }
  201. }
  202. //to nie jest pionek gracza
  203. else
  204. {
  205. return false;
  206. }
  207. }
  208. }
  209.  
  210. int main()
  211. {
  212. bool ruchBialy = true;
  213.  
  214. int plansza[8][8];
  215. int kolumnaSkad;
  216. int wierszSkad;
  217. int kolumnaDokad;
  218. int wierszDokad;
  219. for (int i = 0; i < 8; i++)
  220. {
  221. for (int j = 0; j < 8; j++)
  222. {
  223. if ((i + j) % 2 == 0)
  224. {
  225. //pola biale
  226. plansza[i][j] = 0;
  227. }
  228. else
  229. {
  230. if (i < 3)
  231. {
  232. //pionki czarne
  233. plansza[i][j] = 2;
  234. }
  235. else if (i >= 5)
  236. {
  237. //pionki biale
  238. plansza[i][j] = 3;
  239. }
  240. else
  241. {
  242. //pola czarne
  243. plansza[i][j] = 1;
  244. }
  245. }
  246. }
  247. }
  248.  
  249.  
  250. while (pionkiBiale > 0 and pionkiCzarne > 0)
  251. {
  252. printf("\033[H\033[J");
  253. rysuj(plansza, ruchBialy);
  254. cout << "Podaj litere z ktorej kolumny pionek chcesz poruszyc" << endl;
  255. char tmp;
  256. cin >> tmp;
  257. kolumnaSkad = int(tmp) - 65;
  258. cout << "Podaj cyfre z ktorego wiersza pionek chcesz poruszyc" << endl;
  259. cin >> wierszSkad;
  260. wierszSkad = wierszSkad - 1;
  261.  
  262. cout << "Podaj litere do ktorej kolumny pionek chcesz poruszyc" << endl;
  263. cin >> tmp;
  264. kolumnaDokad = int(tmp) - 65;
  265. cout << "Podaj cyfre do ktorego wiersza pionek chcesz poruszyc" << endl;
  266. cin >> wierszDokad;
  267. wierszDokad = wierszDokad - 1;
  268.  
  269. // wykonujemy ruch, jezeli udalo sie go wykonac rusza sie przeciwnik, natomiast
  270. //jezeli ruch byl niemozliwy do wykonania gracz ponawia ruch
  271. bool test = sprawdz_ruch(plansza, ruchBialy, kolumnaSkad, wierszSkad, kolumnaDokad, wierszDokad);
  272. if (test)
  273. {
  274. ruchBialy = !ruchBialy;
  275. }
  276. }
  277. if (pionkiBiale > 0)
  278. {
  279. cout << "Wygraly biale" << endl;
  280. }
  281. else
  282. {
  283. cout << "Wygraly czarne" << endl;
  284. }
  285.  
  286. }
  287.  
  288.  
Add Comment
Please, Sign In to add comment