Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- //Matriz principal.
- int m[3][3];
- //Variáveis auxiliares para os laços FOR.
- int i, j;
- //Variáveis que indicarão a linha e a coluna escolhidas pelo(s) usuário(s) em cada jogada.
- int linha = 0, coluna = 0;
- //Variável que indicará se ainda há jogadas possiveis ou não (game loop).
- int jogoAcabou = 0;
- //Atribui o valor 0 para todas as posições da matriz principal.
- void inicializaMatriz();
- //Função que mostra a matriz a cada jogada, mostrando 'X' se o valor for 1, 'O' se for -1 e '.' se for 0.
- void imprimeMatriz();
- /*Checa se a linha ou a coluna digitadas pelo usuário já estão preenchidas, se são um valor inválido, e, se não for, preenche
- a posição indicada pelo usuário.*/
- void checaRepetidoInvalidoEPreencheMatriz(int l, int c, int turno);
- //Checa se algum dos jogadores ganhou a partida ou se deu velha.
- int checaVitoria(int n);
- int main(){
- inicializaMatriz();
- imprimeMatriz();
- while(jogoAcabou == 0){
- printf("Jogador 1 (linha, coluna):\n");
- scanf("%d %d", &linha, &coluna);
- checaRepetidoInvalidoEPreencheMatriz(linha, coluna, 1);
- imprimeMatriz();
- jogoAcabou = checaVitoria(1);
- if(jogoAcabou == 0){
- printf("Jogador 2 (linha, coluna):\n");
- scanf("%d %d", &linha, &coluna);
- checaRepetidoInvalidoEPreencheMatriz(linha, coluna, -1);
- imprimeMatriz();
- jogoAcabou = checaVitoria(-1);
- }
- }
- if(jogoAcabou == 1){
- printf("O jogador 1 ganhou!\n");
- }else if(jogoAcabou == -1){
- printf("O jogador 2 ganhou!\n");
- }else{
- printf("Deu velha!\n");
- }
- return 0;
- }
- void inicializaMatriz(){
- for(i = 0; i < 3; i++){
- for(j = 0; j < 3; j++){
- m[i][j] = 0;
- }
- }
- }
- void imprimeMatriz(){
- for(i = 0; i < 3; i++){
- printf(" |");
- for(j = 0; j < 3; j++){
- if(m[i][j] == 0){
- printf(" . |");
- }else if(m[i][j] == 1){
- printf(" X |");
- }else{
- printf(" O |");
- }
- }
- printf("\n");
- printf("----------------");
- printf("\n");
- }
- }
- int checaVitoria(int n){
- int res = 0, numOc = 0;
- for(i = 0; i < 3; i++){
- for(j = 0; j < 3; j++){
- if(i == 0){
- if(m[i][j] == n && m[i+1][j] == n && m[i+2][j] == n){
- //Checa as colunas
- res = n;
- }else if(j == 0 && m[i][j] == n && m[i+1][j+1] == n && m[i+2][j+2] == n){
- //Checa a diagonal principal
- res = n;
- }
- }
- if(j == 0){
- if(m[i][j] == n && m[i][j+1] == n && m[i][j+2] == n){
- //Checa as linhas
- res = n;
- }else if(i == 2 && m[i][j] == n && m[i-1][j+1] == n && m[i-2][j+2] == n){
- //Checa a diagonal secundária
- res = n;
- }
- }
- }
- }
- if(res == 0){
- for(i = 0; i < 3; i++){
- for(j = 0; j < 3; j++){
- if(m[i][j] == 0){
- numOc++;
- }
- }
- }
- if(numOc == 0){
- //Deu velha
- res = 2;
- }
- }
- return res;
- }
- void checaRepetidoInvalidoEPreencheMatriz(int l, int c, int turno){
- while(m[l-1][c-1] != 0 || l > 3 || l < 1 || c > 3 || c < 1){
- printf("Valores invalidos ou ja preenchidos. Digite um valor valido:\n");
- scanf("%d %d", &l, &c);
- }
- if(turno == 1){
- m[l-1][c-1] = 1;
- }else{
- m[l-1][c-1] = -1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment