Advertisement
Cassimus

Warcaby

Jun 16th, 2024 (edited)
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <Windows.h>
  4. #include <math.h>
  5.  
  6. using namespace std;
  7.  
  8. const int ROZMIAR_PLANSZY = 8;
  9. const char PION = 'X';
  10. int liczbaPionowBialych = 12;
  11. int liczbaPionowCzarnych = 12;
  12.  
  13. enum Pole
  14. {
  15. Biale,
  16. Czarne,
  17. CzarnyPion,
  18. BialyPion
  19. };
  20.  
  21. void rysuj(int plansza[ROZMIAR_PLANSZY][ROZMIAR_PLANSZY], bool czyRuchBialych)
  22. {
  23. HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  24.  
  25. std::cout << "Pozostałe białe piony: " << liczbaPionowBialych << endl;
  26. std::cout << "Pozostałe piony czarne: " << liczbaPionowCzarnych << endl;
  27.  
  28. if (czyRuchBialych)
  29. {
  30. cout << "Ruch wykonują białe" << endl;
  31. }
  32. else
  33. {
  34. cout << "Ruch wykonują czarne" << endl;
  35. }
  36. cout << endl;
  37.  
  38. cout << " ABCDEFGH" << endl;
  39.  
  40. for (int wiersz = 0; wiersz < ROZMIAR_PLANSZY; wiersz++)
  41. {
  42. SetConsoleTextAttribute(hConsole, 15);
  43. std::cout << wiersz + 1;
  44.  
  45. for (int kolumna = 0; kolumna < ROZMIAR_PLANSZY; kolumna++)
  46. {
  47. if (plansza[wiersz][kolumna] == (int)Pole::Biale)
  48. {
  49. SetConsoleTextAttribute(hConsole, 15);
  50. cout << '\xFE';
  51. }
  52. else if (plansza[wiersz][kolumna] == (int)Pole::Czarne)
  53. {
  54. SetConsoleTextAttribute(hConsole, 0);
  55.  
  56. cout << '\xFE';
  57. }
  58. else if (plansza[wiersz][kolumna] == (int)Pole::CzarnyPion)
  59. {
  60. SetConsoleTextAttribute(hConsole, 12);
  61. cout << PION;
  62. }
  63. else if (plansza[wiersz][kolumna] == (int)Pole::BialyPion)
  64. {
  65. SetConsoleTextAttribute(hConsole, 15);
  66. cout << PION;
  67. }
  68. }
  69. cout << endl;
  70. }
  71. }
  72.  
  73. bool sprawdz_ruch(int plansza[ROZMIAR_PLANSZY][ROZMIAR_PLANSZY], bool czyRuchBialych,
  74. int kolumnaSkad, int wierszSkad, int kolumnaDokad, int wierszDokad)
  75. {
  76. if (kolumnaSkad > 8 || kolumnaSkad < 0 ||
  77. kolumnaDokad > 8 || kolumnaDokad < 0 ||
  78. wierszSkad > 8 || wierszSkad < 0 ||
  79. wierszDokad > 8 || wierszDokad < 0)
  80. {
  81. return false;
  82. }
  83. else if (plansza[wierszDokad][kolumnaDokad] == (int)Pole::Biale ||
  84. plansza[wierszDokad][kolumnaDokad] == (int)Pole::BialyPion ||
  85. plansza[wierszDokad][kolumnaDokad] == (int)Pole::CzarnyPion)
  86. {
  87. return false;
  88. }
  89. else if (wierszSkad == wierszDokad || kolumnaSkad == kolumnaDokad) // nie można się ruszać po prostej
  90. {
  91. return false;
  92. }
  93.  
  94. if (czyRuchBialych)
  95. {
  96. if (plansza[wierszSkad][kolumnaSkad] == (int)Pole::BialyPion)
  97. {
  98.  
  99. if (abs(wierszSkad - wierszDokad) == 1)
  100. {
  101. if (abs(kolumnaSkad - kolumnaDokad) == 1)
  102. {
  103. int tmp;
  104. tmp = plansza[wierszSkad][kolumnaSkad];
  105. plansza[wierszSkad][kolumnaSkad] = plansza[wierszDokad][kolumnaDokad];
  106. plansza[wierszDokad][kolumnaDokad] = tmp;
  107. return true;
  108. }
  109. else
  110. {
  111. return false;
  112. }
  113. }
  114. else if (abs(wierszSkad - wierszDokad) == 2) // bicie
  115. {
  116. if (abs(kolumnaSkad - kolumnaDokad) == 2)
  117. {
  118. if (plansza[(wierszSkad + wierszDokad) / 2][(kolumnaSkad + kolumnaDokad) / 2] ==
  119. (int)Pole::CzarnyPion)
  120. {
  121. int tmp;
  122. tmp = plansza[wierszSkad][kolumnaSkad];
  123. plansza[wierszSkad][kolumnaSkad] = plansza[wierszDokad][kolumnaDokad];
  124. plansza[wierszDokad][kolumnaDokad] = tmp;
  125.  
  126. plansza[(wierszSkad + wierszDokad) / 2][(kolumnaSkad + kolumnaDokad) / 2] =
  127. (int)Pole::Czarne;
  128.  
  129. liczbaPionowCzarnych--;
  130.  
  131. return true;
  132. }
  133. else
  134. {
  135. return false;
  136. }
  137. }
  138. else
  139. {
  140. return false;
  141. }
  142. }
  143. else
  144. {
  145. return false;
  146. }
  147. }
  148. }
  149. else
  150. {
  151. if (plansza[wierszSkad][kolumnaSkad] == (int)Pole::CzarnyPion)
  152. {
  153. if (abs(wierszSkad - wierszDokad) == 1)
  154. {
  155. if (abs(kolumnaSkad - kolumnaDokad) == 1)
  156. {
  157. int tmp;
  158. tmp = plansza[wierszSkad][kolumnaSkad];
  159. plansza[wierszSkad][kolumnaSkad] = plansza[wierszDokad][kolumnaDokad];
  160. plansza[wierszDokad][kolumnaDokad] = tmp;
  161. return true;
  162. }
  163. else
  164. {
  165. return false;
  166. }
  167. }
  168. else if (abs(wierszSkad - wierszDokad) == 2) // bicie
  169. {
  170. if (abs(kolumnaSkad - kolumnaDokad) == 2)
  171. {
  172. if (plansza[(wierszSkad + wierszDokad) / 2][(kolumnaSkad + kolumnaDokad) / 2] ==
  173. (int)Pole::BialyPion)
  174. {
  175. int tmp;
  176. tmp = plansza[wierszSkad][kolumnaSkad];
  177. plansza[wierszSkad][kolumnaSkad] = plansza[wierszDokad][kolumnaDokad];
  178. plansza[wierszDokad][kolumnaDokad] = tmp;
  179.  
  180. plansza[(wierszSkad + wierszDokad) / 2][(kolumnaSkad + kolumnaDokad) / 2] =
  181. (int)Pole::Czarne;
  182.  
  183. liczbaPionowBialych--;
  184.  
  185. return true;
  186. }
  187. else
  188. {
  189. return false;
  190. }
  191. }
  192. else
  193. {
  194. return false;
  195. }
  196. }
  197. else
  198. {
  199. return false;
  200. }
  201. }
  202. }
  203.  
  204. return false;
  205. }
  206.  
  207. int main(int argc, char const *argv[])
  208. {
  209. //setlocale(LC_ALL, "");
  210.  
  211. int plansza[ROZMIAR_PLANSZY][ROZMIAR_PLANSZY];
  212.  
  213. bool czyRuchBialych = true;
  214.  
  215. int kolumnaSkad;
  216. int wierszSkad;
  217.  
  218. int kolumnaDokad;
  219. int wierszDokad;
  220.  
  221. for (int wiersz = 0; wiersz < ROZMIAR_PLANSZY; wiersz++)
  222. {
  223. for (int kolumna = 0; kolumna < ROZMIAR_PLANSZY; kolumna++)
  224. {
  225. if ((wiersz + kolumna) % 2 == 0) // suma jest parzysta
  226. {
  227. plansza[wiersz][kolumna] = (int)Pole::Biale;
  228. }
  229. else
  230. {
  231. if (wiersz < 3)
  232. {
  233. plansza[wiersz][kolumna] = (int)Pole::CzarnyPion;
  234. }
  235. else if (wiersz >= 5)
  236. {
  237. plansza[wiersz][kolumna] = (int)Pole::BialyPion;
  238. }
  239. else
  240. {
  241. plansza[wiersz][kolumna] = (int)Pole::Czarne;
  242. }
  243. }
  244. }
  245. }
  246.  
  247. while (liczbaPionowBialych > 0 && liczbaPionowCzarnych > 0)
  248. {
  249. rysuj(plansza, czyRuchBialych);
  250. cout << "Którym pionem chcesz się ruszyć?\n";
  251. cout << "Podaj literę Kolumny: ";
  252. char wybranaKolumna;
  253. cin >> wybranaKolumna;
  254.  
  255. cout << "Podaj numer Wiersza: ";
  256. int wybranyWiersz;
  257. cin >> wybranyWiersz;
  258.  
  259. wybranaKolumna = toupper(wybranaKolumna);
  260.  
  261. // TO DO - zabezpieczyć przed wartościami większymi od 72 (litera H)
  262.  
  263. kolumnaSkad = (int)wybranaKolumna - 65;
  264. wierszSkad = wybranyWiersz - 1;
  265.  
  266. cout << "Gdzie ruszyć pionka?\n";
  267. cout << "Podaj literę Kolumny: ";
  268. cin >> wybranaKolumna;
  269.  
  270. cout << "Podaj numer Wiersza: ";
  271. cin >> wybranyWiersz;
  272.  
  273. wybranaKolumna = toupper(wybranaKolumna);
  274.  
  275. kolumnaDokad = (int)wybranaKolumna - 65;
  276. wierszDokad = wybranyWiersz - 1;
  277.  
  278. bool test =
  279. sprawdz_ruch(plansza, czyRuchBialych, kolumnaSkad, wierszSkad, kolumnaDokad, wierszDokad);
  280.  
  281. if (test)
  282. {
  283. czyRuchBialych = !czyRuchBialych;
  284. }
  285. else
  286. {
  287. cout << "Błędny ruch\n";
  288. }
  289. }
  290.  
  291. if (liczbaPionowBialych > 0)
  292. {
  293. cout << "Wygrały białe\n";
  294. }
  295. else
  296. {
  297. cout << "Wygrały czarne\n";
  298. }
  299.  
  300. return 0;
  301. }
  302.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement