123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- // ConsoleApplication18.cpp : Defines the entry point for the console application.
- /*
- Scrivere un programma che permetta il gioco del tris, il gioco ha due modalità:
- giocatore vs giocatore e giocatore vs cpu
- Menu
- */
- #include "stdafx.h"
- #include <iostream>
- #include <time.h>
- #define N 3
- #define ZERO 0
- using namespace std;
- void menu();
- void inserisci(char *px, char *po);
- void inizializza(char tris[][N]);
- void visualizza(char tris[][N]);
- void user_vs_user(char x, char o, char tris[][N]);
- void user_vs_cpu(char x, char o, char tris[][N]);
- int check_xy(char tris[][N], int x, int y);
- int check_tris(char tris[][N], int cont);
- int main()
- {
- srand(time(NULL));
- menu();
- system("pause");
- return 0;
- }
- void menu()
- {
- int scelta;
- char x;
- char o;
- char tris[N][N];
- do
- {
- system("cls");
- printf("1. Inserisci simboli\n");
- printf("2. User VS User\n");
- printf("3. User VS CPU\n");
- scanf_s("%d", &scelta);
- switch (scelta)
- {
- case 1:
- inserisci(&x, &o);
- break;
- case 2:
- user_vs_user(x, o, tris);
- break;
- case 3:
- user_vs_cpu(x, o, tris);
- break;
- }
- } while (scelta != 0);
- }
- void inserisci(char *px, char *po)
- {
- char x;
- char o;
- printf("Inserisci il carattere da usare per il giocatore 1:\n");
- cin >> x;
- printf("Inserisci il carattere da usare per il giocatore 2:\n");
- cin >> o;
- *px = x;
- *po = o;
- }
- void inizializza(char tris[][N])
- {
- int cont = 0;
- for (int j = 0; j < N; j++)
- {
- for (int i = 0; i < N; i++)
- {
- tris[j][i] = (char)48+cont;
- cont++;
- }
- }
- }
- void visualizza(char tris[][N])
- {
- system("cls");
- for (int j = 0; j < N; j++)
- {
- for (int i = 0; i < N; i++)
- {
- printf("%c ", tris[j][i]);
- }
- printf("\n");
- }
- }
- void user_vs_user(char x, char o, char tris[][N])
- {
- inizializza(tris);
- int xn;
- int yn;
- int cont = 0;
- int utente = 1;
- do
- {
- if (cont == (N*N) - 1)
- break;
- visualizza(tris);
- if ((utente == 1) && cont != 0)
- utente = 2;
- else
- utente = 1;
- printf("\nTurno del giocatore %d\n", utente);
- switch (utente)
- {
- case 1:
- do
- {
- printf("X:\n");
- scanf("%d", &xn);
- printf("Y:\n");
- scanf("%d", &yn);
- } while (check_xy(tris, xn, yn) != 0);
- tris[xn][yn] = x;
- check_tris(tris, cont);
- break;
- case 2:
- do
- {
- printf("X:\n");
- scanf("%d", &xn);
- printf("Y:\n");
- scanf("%d", &yn);
- } while (check_xy(tris, xn, yn) != 0);
- tris[xn][yn] = o;
- check_tris(tris, cont);
- break;
- }
- cont++;
- } while (check_tris(tris, cont)==0);
- visualizza(tris);
- printf("Ha vinto l'utente %d\n", utente);
- // printf("Return %d", check_tris(tris, cont));
- system("pause");
- }
- void user_vs_cpu(char x, char o, char tris[][N])
- {
- inizializza(tris);
- int xn;
- int yn;
- int utente = 1;
- int cont = 0;
- do
- {
- if (cont == (N*N) - 1)
- break;
- visualizza(tris);
- if ((utente == 1)&&cont!=0)
- utente = 2;
- else
- utente = 1;
- printf("\nTurno del giocatore %d\n", utente);
- switch (utente)
- {
- case 1:
- do
- {
- printf("X:\n");
- scanf("%d", &xn);
- printf("Y:\n");
- scanf("%d", &yn);
- } while (check_xy(tris, xn, yn) != 0);
- tris[xn][yn] = x;
- check_tris(tris, cont);
- break;
- case 2:
- do
- {
- xn = rand() % N;
- yn = rand() % N;
- } while (check_xy(tris, xn, yn) != 0);
- tris[xn][yn] = o;
- check_tris(tris, cont);
- break;
- }
- cont++;
- } while (check_tris(tris, cont) == 0);
- visualizza(tris);
- printf("Ha vinto l'utente %d\n", utente);
- // printf("Return %d", check_tris(tris, cont));
- system("pause");
- }
- int check_xy(char tris[][N], int x, int y)
- {
- if (x <= ZERO-1)
- return 1;
- else
- if (y <= ZERO-1)
- return 2;
- else
- if (x >= N)
- return 3;
- else
- if (y >= N)
- return 4;
- else
- return 0;
- }
- int check_tris(char tris[][N], int cont) //Non funziona
- {
- for (int j = 0; j < N; j++)
- {
- for (int i = 0; i < N; i++)
- {
- if ((tris[j][i] == tris[j + 1][i]) && (tris[j][i] == tris[j + 2][i]))
- return 1;
- else
- if ((tris[j][i] == tris[j][i + 1]) && (tris[j][i] == tris[j][i + 2]))
- return 2;
- else
- if ((tris[j][i] == tris[j + 1][i + 1]) && (tris[j][i] == tris[j + 2][i + 2]))
- return 3;
- else
- if ((tris[j][i] == tris[N - 1][N - 1]) && (tris[j][i] == tris[N - 2][N - 2]))
- return 4;
- else
- return 0;
- }
- }
- }
|