#include #include #define DEBUG 0 char** cria_tabuleiro(int n){ char** tab = (char**) malloc(n * sizeof(char*)); for(int i = 0; i < n; i++){ tab[i] = (char*) malloc(n * sizeof(char)); } for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ tab[i][j] = '0'; } } return tab; } void imprime_tabuleiro(char** tabuleiro, int n){ printf("y\\x|"); for(int x = 0; x < n-1; x++) printf (" %d ", x); printf (" %d\n----", n-1); for(int x = 0; x < n-1; x++) printf ("---"); printf ("--\n"); for(int y = 0; y < n; y++){ printf (" %d | ", y); for(int x = 0; x < n; x++){ printf("%c ", tabuleiro[x][y]); } printf("\n"); } return; } //devolve '0' se ninguem ganhou //devolve '1' se '1' ganhou //devolve '2' se '2' ganhou char verifica_vitoria(char **tabuleiro, int n){ char jogador; int ganhou; //verifica colunas for(int x = 0; x < n; x++){ //coloca em jogador o primeiro daquela coluna jogador = tabuleiro[x][0]; if(jogador == '0') continue; //se for '0' vai para proxima coluna //verifica se ganhou naquela coluna ganhou = 1; for(int y = 1; y < n; y++){ if(tabuleiro[x][y] != jogador) ganhou = 0; } if(ganhou == 1) return jogador; } //verifica linhas for(int y = 0; y < n; y++){ jogador = tabuleiro[0][y]; if(jogador == '0') continue; ganhou = 1; for(int x = 1; x < n; x++){ if(tabuleiro[x][y] != jogador) ganhou = 0; } if(ganhou == 1) return jogador; } //verificando diagonais jogador = tabuleiro[0][0]; if(jogador != '0'){ ganhou = 1; for(int x = 1; x < n; x++){ if(tabuleiro[x][x] != jogador) ganhou = 0; } if(ganhou == 1) return jogador; } jogador = tabuleiro[0][n-1]; if(jogador != '0'){ ganhou = 1; for(int x = 1; x < n; x++){ if(tabuleiro[x][n-1-x] != jogador) ganhou = 0; } if(ganhou == 1) return jogador; } return '0'; } int main(){ char** tabuleiro; int n; //Lendo o tamanho do tabuleiro e criando scanf("%d", &n); tabuleiro = cria_tabuleiro(n); //Imprime tabuleiro vazio imprime_tabuleiro(tabuleiro, n); char jogador = '1'; for(int i = 0; i < n*n; i++){ int x, y; printf("\nCoordenadas do jogador %c: ", jogador); scanf("%d %d", &x, &y); tabuleiro[x][y] = jogador; imprime_tabuleiro(tabuleiro, n); char resultado = verifica_vitoria(tabuleiro, n); if(resultado != '0'){ printf("Jogador %c ganhou!\n", resultado); break; } if(jogador == '1') jogador = '2'; else jogador = '1'; } char resultado = verifica_vitoria(tabuleiro, n); if(resultado == '0'){ printf("Empate!\n"); } return 0; }