#include #include // linux #include #define N 3 #define MAX 30 using namespace std; void imprime_matriz(char mat[N][N]) { int i, j; system("clear"); // ou system("cls") no windows i = 0; cout << " 0 1 2" << endl; while (i < N) { cout << i << " "; j = 0; while (j < N) { cout << mat[i][j] << " "; j = j + 1; } cout << endl; i = i +1; } } void inicializa(char mat[N][N]) { int i, j; i = 0; while (i < N) { j = 0; while (j < N) { mat[i][j] = '.'; j = j + 1; } i = i + 1; } } void joga(char mat[N][N], int jogador, char jogador1[MAX], char jogador2[MAX]) { int linha, coluna; if (jogador == 1) { cout << "Jogada do jogador " << jogador1 << ": "; } else { cout << "Jogada do jogador " << jogador2 << ": "; } if (jogador == 1) { cin >> linha >> coluna; } else { linha = rand()%3; coluna = rand()%3; } while (linha < 0 || linha >= N || coluna < 0 || coluna >= N || mat[linha][coluna] != '.') { cout << "Jogada invalida! Repita: "; if (jogador == 1) { cin >> linha >> coluna; } else { linha = rand()%3; coluna = rand()%3; } } if (jogador == 1) { mat[linha][coluna] = 'X'; } else { mat[linha][coluna] = 'O'; } } // retorna 0 se nao terminou // 1 se o jogador 1 ganhou // 2 se o jogador 2 ganhou // 3 se empatou int terminou(char mat[N][N]) { int i, j; // verifica linhas i = 0; while (i < N) { if (mat[i][0] == mat[i][1] && mat[i][0] == mat[i][2] && mat[i][0] != '.') { if (mat[i][0] == 'X') { return 1; } else { return 2; } } i = i+1; } // verifica colunas j = 0; while (j < N) { if (mat[0][j] == mat[1][j] && mat[0][j] == mat[2][j] && mat[0][j] != '.') { if (mat[0][j] == 'X') { return 1; } else { return 2; } } j = j+1; } // verifica diagonais if (mat[0][0] == mat[1][1] && mat[0][0] == mat[2][2] && mat[0][0] != '.') { if (mat[0][0] == 'X') { return 1; } else { return 2; } } if (mat[0][2] == mat[1][1] && mat[0][2] == mat[2][0] && mat[0][2] != '.') { if (mat[0][2] == 'X') { return 1; } else { return 2; } } // empate? i =0; while (i < N) { j = 0; while (j < N) { if (mat[i][j] == '.') { return 0; } j = j +1; } i = i + 1; } return 3; } int main() { // X = jogador 1, O = jogador 2, . = espaco vazio char matriz[N][N]; char jogador1[MAX], jogador2[MAX]; int jogatual; srand(time(0)); inicializa(matriz); imprime_matriz(matriz); cout << "Nome do jogador 1: "; cin >> jogador1; cout << "Nome do jogador 2: "; cin >> jogador2; jogatual = 1; while (terminou(matriz) == 0) { joga(matriz, jogatual, jogador1, jogador2); imprime_matriz(matriz); if (jogatual == 1) jogatual = 2; else jogatual = 1; } if (terminou(matriz) == 1) { cout << jogador1 << " venceu!" << endl; } else if (terminou(matriz) == 2) { cout << jogador2 << " venceu!" << endl; } else { cout << "Deu velha :(" << endl; } return 0; }