main.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. // ConsoleApplication18.cpp : Defines the entry point for the console application.
  2. /*
  3. Scrivere un programma che permetta il gioco del tris, il gioco ha due modalità:
  4. giocatore vs giocatore e giocatore vs cpu
  5. Menu
  6. */
  7. #include "stdafx.h"
  8. #include <iostream>
  9. #include <time.h>
  10. #define N 3
  11. #define ZERO 0
  12. using namespace std;
  13. void menu();
  14. void inserisci(char *px, char *po);
  15. void inizializza(char tris[][N]);
  16. void visualizza(char tris[][N]);
  17. void user_vs_user(char x, char o, char tris[][N]);
  18. void user_vs_cpu(char x, char o, char tris[][N]);
  19. int check_xy(char tris[][N], int x, int y);
  20. int check_tris(char tris[][N], int cont);
  21. int main()
  22. {
  23. srand(time(NULL));
  24. menu();
  25. system("pause");
  26. return 0;
  27. }
  28. void menu()
  29. {
  30. int scelta;
  31. char x;
  32. char o;
  33. char tris[N][N];
  34. do
  35. {
  36. system("cls");
  37. printf("1. Inserisci simboli\n");
  38. printf("2. User VS User\n");
  39. printf("3. User VS CPU\n");
  40. scanf_s("%d", &scelta);
  41. switch (scelta)
  42. {
  43. case 1:
  44. inserisci(&x, &o);
  45. break;
  46. case 2:
  47. user_vs_user(x, o, tris);
  48. break;
  49. case 3:
  50. user_vs_cpu(x, o, tris);
  51. break;
  52. }
  53. } while (scelta != 0);
  54. }
  55. void inserisci(char *px, char *po)
  56. {
  57. char x;
  58. char o;
  59. printf("Inserisci il carattere da usare per il giocatore 1:\n");
  60. cin >> x;
  61. printf("Inserisci il carattere da usare per il giocatore 2:\n");
  62. cin >> o;
  63. *px = x;
  64. *po = o;
  65. }
  66. void inizializza(char tris[][N])
  67. {
  68. int cont = 0;
  69. for (int j = 0; j < N; j++)
  70. {
  71. for (int i = 0; i < N; i++)
  72. {
  73. tris[j][i] = (char)48+cont;
  74. cont++;
  75. }
  76. }
  77. }
  78. void visualizza(char tris[][N])
  79. {
  80. system("cls");
  81. for (int j = 0; j < N; j++)
  82. {
  83. for (int i = 0; i < N; i++)
  84. {
  85. printf("%c ", tris[j][i]);
  86. }
  87. printf("\n");
  88. }
  89. }
  90. void user_vs_user(char x, char o, char tris[][N])
  91. {
  92. inizializza(tris);
  93. int xn;
  94. int yn;
  95. int cont = 0;
  96. int utente = 1;
  97. do
  98. {
  99. if (cont == (N*N) - 1)
  100. break;
  101. visualizza(tris);
  102. if ((utente == 1) && cont != 0)
  103. utente = 2;
  104. else
  105. utente = 1;
  106. printf("\nTurno del giocatore %d\n", utente);
  107. switch (utente)
  108. {
  109. case 1:
  110. do
  111. {
  112. printf("X:\n");
  113. scanf("%d", &xn);
  114. printf("Y:\n");
  115. scanf("%d", &yn);
  116. } while (check_xy(tris, xn, yn) != 0);
  117. tris[xn][yn] = x;
  118. check_tris(tris, cont);
  119. break;
  120. case 2:
  121. do
  122. {
  123. printf("X:\n");
  124. scanf("%d", &xn);
  125. printf("Y:\n");
  126. scanf("%d", &yn);
  127. } while (check_xy(tris, xn, yn) != 0);
  128. tris[xn][yn] = o;
  129. check_tris(tris, cont);
  130. break;
  131. }
  132. cont++;
  133. } while (check_tris(tris, cont)==0);
  134. visualizza(tris);
  135. printf("Ha vinto l'utente %d\n", utente);
  136. // printf("Return %d", check_tris(tris, cont));
  137. system("pause");
  138. }
  139. void user_vs_cpu(char x, char o, char tris[][N])
  140. {
  141. inizializza(tris);
  142. int xn;
  143. int yn;
  144. int utente = 1;
  145. int cont = 0;
  146. do
  147. {
  148. if (cont == (N*N) - 1)
  149. break;
  150. visualizza(tris);
  151. if ((utente == 1)&&cont!=0)
  152. utente = 2;
  153. else
  154. utente = 1;
  155. printf("\nTurno del giocatore %d\n", utente);
  156. switch (utente)
  157. {
  158. case 1:
  159. do
  160. {
  161. printf("X:\n");
  162. scanf("%d", &xn);
  163. printf("Y:\n");
  164. scanf("%d", &yn);
  165. } while (check_xy(tris, xn, yn) != 0);
  166. tris[xn][yn] = x;
  167. check_tris(tris, cont);
  168. break;
  169. case 2:
  170. do
  171. {
  172. xn = rand() % N;
  173. yn = rand() % N;
  174. } while (check_xy(tris, xn, yn) != 0);
  175. tris[xn][yn] = o;
  176. check_tris(tris, cont);
  177. break;
  178. }
  179. cont++;
  180. } while (check_tris(tris, cont) == 0);
  181. visualizza(tris);
  182. printf("Ha vinto l'utente %d\n", utente);
  183. // printf("Return %d", check_tris(tris, cont));
  184. system("pause");
  185. }
  186. int check_xy(char tris[][N], int x, int y)
  187. {
  188. if (x <= ZERO-1)
  189. return 1;
  190. else
  191. if (y <= ZERO-1)
  192. return 2;
  193. else
  194. if (x >= N)
  195. return 3;
  196. else
  197. if (y >= N)
  198. return 4;
  199. else
  200. return 0;
  201. }
  202. int check_tris(char tris[][N], int cont) //Non funziona
  203. {
  204. for (int j = 0; j < N; j++)
  205. {
  206. for (int i = 0; i < N; i++)
  207. {
  208. if ((tris[j][i] == tris[j + 1][i]) && (tris[j][i] == tris[j + 2][i]))
  209. return 1;
  210. else
  211. if ((tris[j][i] == tris[j][i + 1]) && (tris[j][i] == tris[j][i + 2]))
  212. return 2;
  213. else
  214. if ((tris[j][i] == tris[j + 1][i + 1]) && (tris[j][i] == tris[j + 2][i + 2]))
  215. return 3;
  216. else
  217. if ((tris[j][i] == tris[N - 1][N - 1]) && (tris[j][i] == tris[N - 2][N - 2]))
  218. return 4;
  219. else
  220. return 0;
  221. }
  222. }
  223. }