Untitled
unknown
plain_text
2 years ago
4.1 kB
4
Indexable
#include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ //* variáveis*/ char jogo[3][3]; int l, c; //* inicializador de posições da matriz com espaço*/ void inicializarMatriz(){ for(l = 0; l < 3; l++){ for(c = 0; c < 3; c++) jogo[l][c] = ' '; } } //* impressão do jogo*/ void imprimir(){ printf("\n\n\t 0 1 2\n\n"); for(l = 0; l < 3; l++){ for(c = 0; c < 3; c++){ if(c == 0) printf("\t"); printf(" %c ", jogo[l][c]); if(c < 2) printf("|"); if(c == 2) printf(" %d", l); } printf("\n"); if(l < 2) printf("\t-----------\n"); } } //* verificador de vitória do jogador c na linha l*/ int ganhouPorLinha(int l, char c){ if(jogo[l][0] == c && jogo[l][1] == c && jogo[l][2] == c) return 1; else return 0; } //* verificador de vitória do jogador c nas linhas*/ int ganhouPorLinhas(char c){ int ganhou = 0; for(l = 0; l < 3; l++){ ganhou += ganhouPorLinha(l, c); } return ganhou; } //* verificador de vitória do jogador j na coluna c*/ int ganhouPorColuna(int c, char j){ if(jogo[0][c] == j && jogo[1][c] == j && jogo[2][c] == j) return 1; else return 0; } //* verificador de vitória do jogador j por colunas*/ int ganhouPorColunas(char j){ int ganhou = 0; for(c = 0; c < 3; c++){ ganhou += ganhouPorColuna(c, j); } return ganhou; } //* verificador de vitória do jogador c na diagonal principal*/ int ganhouPorDiagPrin(char c){ if(jogo[0][0] == c && jogo[1][1] == c && jogo[2][2] == c) return 1; else return 0; } //* função para verificar vitória do jogador c na diagonal secundária*/ int ganhouPorDiagSec(char c){ if(jogo[0][2] == c && jogo[1][1] == c && jogo[2][0] == c) return 1; else return 0; } //* função que diz se uma coordenada é válida ou não*/ int ehValida(int l, int c){ if(l >= 0 && l < 3 && c >= 0 && c < 3 && jogo[l][c] == ' ') return 1; else return 0; } //* ler as coordenadas digitadas pelo jogador*/ void lerCoordenadas(char j){ int linha, coluna; printf("Digite linha e coluna: "); scanf("%d%d", &linha, &coluna); while(ehValida(linha, coluna) == 0){ printf("Coordenadas invalidas! Digite outra linha e coluna: "); scanf("%d%d", &linha, &coluna); } jogo[linha][coluna] = j; } //* retorna a quantidade de posições ainda vazias*/ int quantVazias(){ int quantidade = 0; for(l = 0; l < 3; l++){ for(c = 0; c < 3; c++) if(jogo[l][c] == ' ') quantidade++; } return quantidade; } //* repetição principal do jogo*/ void jogar(){ int jogador = 1, vitoriaX = 0, vitoria0 = 0; char jogador1 = 'X', jogador2 = '0'; do{ imprimir(); if(jogador == 1){ lerCoordenadas(jogador1); jogador++; vitoriaX += ganhouPorLinhas(jogador1); vitoriaX += ganhouPorColunas(jogador1); vitoriaX += ganhouPorDiagPrin(jogador1); vitoriaX += ganhouPorDiagSec(jogador1); } else{ lerCoordenadas(jogador2); jogador = 1; vitoria0 += ganhouPorLinhas(jogador2); vitoria0 += ganhouPorColunas(jogador2); vitoria0 += ganhouPorDiagPrin(jogador2); vitoria0 += ganhouPorDiagSec(jogador2); } }while(vitoriaX == 0 && vitoria0 == 0 && quantVazias() > 0); imprimir(); if(vitoria0 == 1) printf("\nJogador 2 venceu!\n"); else if(vitoriaX == 1) printf("\nJogador 1 venceu!\n"); else printf("\nJogadores empataram!\n"); } //* opção para um novo jogo*/ int main(){ int opcao; do{ inicializarMatriz(); jogar(); printf("\nDigite 1 para jogar novamente: "); scanf("%d", &opcao); }while(opcao == 1); return 0; }
Editor is loading...