Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define GRACZ_O 'O'
  5. #define GRACZ_X 'X'
  6. #define GRACZ_NIEZNANY '\0'
  7. #define GRACZ_REMIS (char)-1
  8.  
  9. void planszaInicjalizuj(char plansza[3][3]);
  10. void planszaRysuj(char plansza[3][3]);
  11. char planszaWynik(char plansza[3][3]);
  12. int planszaCzyWygral(char plansza[3][3], char gracz);
  13. int planszaCzyJestWolnePole(char plansza[3][3]);
  14. void planszaPobierzRuch(char plansza[3][3], char gracz);
  15. int planszaCzyPoleJestPrawidlowe(char plansza[3][3], int pole, int *ii, int *jj);
  16. int pobierzLiczbe();
  17.  
  18. int main()
  19. {
  20. char plansza[3][3];
  21. char gracz, wynik;
  22.  
  23. planszaInicjalizuj(plansza);
  24. gracz = GRACZ_O;
  25.  
  26. while ((wynik = planszaWynik(plansza)) == GRACZ_NIEZNANY)
  27. {
  28. planszaRysuj(plansza);
  29. planszaPobierzRuch(plansza, gracz);
  30.  
  31. if (gracz == GRACZ_O)
  32. {
  33. gracz = GRACZ_X;
  34. }
  35. else
  36. {
  37. gracz = GRACZ_O;
  38. }
  39. }
  40.  
  41. if (wynik == GRACZ_O || wynik == GRACZ_X)
  42. {
  43. printf("Wygrał gracz %c\n", wynik);
  44. }
  45. else
  46. {
  47. printf("REMIS\n");
  48. }
  49.  
  50. return 0;
  51. }
  52.  
  53. void planszaInicjalizuj(char plansza[3][3])
  54. {
  55. for (int i = 0; i < 3; i++)
  56. {
  57. for (int j = 0; j < 3; j++)
  58. {
  59. plansza[i][j] = GRACZ_NIEZNANY;
  60. }
  61. }
  62. }
  63.  
  64. /*
  65. -------------
  66. | 1 | 2 | 3 |
  67. -------------
  68. | 4 | 5 | 6 |
  69. -------------
  70. | 7 | 8 | 9 |
  71. -------------
  72. */
  73.  
  74. void planszaRysuj(char plansza[3][3])
  75. {
  76. int n;
  77.  
  78. n = 1;
  79.  
  80. for (int i = 0; i < 3; i++)
  81. {
  82. printf("-------------\n");
  83. printf("|");
  84.  
  85. for (int j = 0; j < 3; j++)
  86. {
  87. if (plansza[i][j] == GRACZ_NIEZNANY)
  88. {
  89. printf(" %d |", n);
  90. }
  91. else
  92. {
  93. printf(" %c |", plansza[i][j]);
  94. }
  95. n++;
  96. }
  97.  
  98. printf("\n");
  99. }
  100. printf("-------------\n");
  101. }
  102.  
  103. char planszaWynik(char plansza[3][3])
  104. {
  105. if (planszaCzyWygral(plansza, GRACZ_O))
  106. {
  107. return GRACZ_O;
  108. }
  109.  
  110. if (planszaCzyWygral(plansza, GRACZ_X))
  111. {
  112. return GRACZ_X;
  113. }
  114.  
  115. if (planszaCzyJestWolnePole(plansza))
  116. {
  117. return GRACZ_NIEZNANY;
  118. }
  119.  
  120. return GRACZ_REMIS;
  121. }
  122.  
  123. int planszaCzyWygral(char plansza[3][3], char gracz)
  124. {
  125. if (plansza[0][0] == gracz && plansza[0][1] == gracz && plansza[0][2] == gracz) return 1;
  126. if (plansza[1][0] == gracz && plansza[1][1] == gracz && plansza[1][2] == gracz) return 1;
  127. if (plansza[2][0] == gracz && plansza[2][1] == gracz && plansza[2][2] == gracz) return 1;
  128.  
  129. if (plansza[0][0] == gracz && plansza[1][0] == gracz && plansza[2][0] == gracz) return 1;
  130. if (plansza[0][1] == gracz && plansza[1][1] == gracz && plansza[2][1] == gracz) return 1;
  131. if (plansza[0][2] == gracz && plansza[1][2] == gracz && plansza[2][2] == gracz) return 1;
  132.  
  133. if (plansza[0][0] == gracz && plansza[1][1] == gracz && plansza[2][2] == gracz) return 1;
  134. if (plansza[2][0] == gracz && plansza[1][1] == gracz && plansza[0][2] == gracz) return 1;
  135.  
  136. return 0;
  137. }
  138.  
  139. int planszaCzyJestWolnePole(char plansza[3][3])
  140. {
  141. for (int i = 0; i < 3; i++)
  142. {
  143. for (int j = 0; j < 3; j++)
  144. {
  145. if (plansza[i][j] == GRACZ_NIEZNANY)
  146. {
  147. return 1;
  148. }
  149. }
  150. }
  151.  
  152. return 0;
  153. }
  154.  
  155. void planszaPobierzRuch(char plansza[3][3], char gracz)
  156. {
  157. int pole, i, j;
  158.  
  159. printf("GRACZ %c: ", gracz);
  160.  
  161. while (1)
  162. {
  163. pole = pobierzLiczbe();
  164.  
  165. if (planszaCzyPoleJestPrawidlowe(plansza, pole, &i, &j))
  166. {
  167. plansza[i][j] = gracz;
  168. break;
  169. }
  170. else
  171. {
  172. printf("Podaj prawidłowe pole: ");
  173. }
  174. }
  175. }
  176.  
  177. int planszaCzyPoleJestPrawidlowe(char plansza[3][3], int pole, int *ii, int *jj)
  178. {
  179. int n;
  180.  
  181. n = 1;
  182.  
  183. for (int i = 0; i < 3; i++)
  184. {
  185. for (int j = 0; j < 3; j++)
  186. {
  187. if (plansza[i][j] == GRACZ_NIEZNANY && n == pole)
  188. {
  189. *ii = i;
  190. *jj = j;
  191.  
  192. return 1;
  193. }
  194.  
  195. n++;
  196. }
  197. }
  198.  
  199. return 0;
  200. }
  201.  
  202. int pobierzLiczbe()
  203. {
  204. int liczba;
  205.  
  206. while (1)
  207. {
  208. if (scanf("%d", &liczba) == 1)
  209. {
  210. return liczba;
  211. }
  212.  
  213. fseek(stdin, SEEK_END, 0);
  214. printf("Podaj prawidłową liczbę: ");
  215. }
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement