Untitled
unknown
plain_text
3 years ago
4.1 kB
5
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...