#include <stdlib.h>
#include <conio.h>
// Procedimentos
void Jogo();
void Instrucao();
void Estatisticas();
void Renomear_Jogadores();
void Sobre();
void Obter_Linha_Coluna();
void Declarando_Vencedor(int jogador);
// Variáveis globais
int A[3][3], linha, coluna;
int NumeroDeVitoriasDoJogador1 = 0;
int NumeroDeVitoriasDoJogador2 = 0;
int NumeroDeEmpates = 0;
char NomeDoJogador1[12] = "JOGADOR 1", NomeDoJogador2[12] = "JOGADOR 2";
int main(){
int op=0;
while (op != 6){
printf("\t\t---------------------------------------------------\n");
printf("\t\t\t\tJOGO DA VELHA\n");
printf("\t\t---------------------------------------------------\n\n");
// Menu de opções
printf(" 1 - JOGAR\n");
printf(" 2 - INSTRU%c%cES\n",384,229);
printf(" 3 - ESTAT%cSTICAS\n",470);
printf(" 4 - RENOMEAR JOGADORES\n");
printf(" 5 - SOBRE\n");
printf(" 6 - SAIR\n\n");
op=0;
while (op<1 || op>6){
printf(" Digite op%c%co: ",135,454);
scanf("%d",&op);
}
system("cls");
// Desvio para o procedimento
if (op == 1) Jogo();
if (op == 2) Instrucao();
if (op == 3) Estatisticas();
if (op == 4) Renomear_Jogadores();
if (op == 5) Sobre();
if (op != 6){
printf(" ");
system("pause");
system("cls");
}
}
return 0;
}
void Jogo(){
int Jogador=1;
int cont_A=0, cont_B=0;
int FimDoJogo=0;
//Inicializando a matriz
for (int i=0; i<3; ++i){
for (int j=0; j<3; ++j)
A[i][j]=0;
}
while (FimDoJogo == 0){
// Verifica se existe alguma coluna totalmente preenchida por um mesmo caractere
cont_A=0, cont_B=0;
for (int i=0; i<3; ++i){
for (int j=0; j<3; ++j){
if (A[i][j]==1) cont_A++;
if (A[i][j]==2) cont_B++;
}
if (cont_A == 3) break; else cont_A=0;
if (cont_B == 3) break; else cont_B=0;
} if ((cont_A == 3) || (cont_B == 3)) {Declarando_Vencedor(Jogador); FimDoJogo=1;}
// Verifica se existe alguma linha totalmente preenchida por um mesmo caractere
cont_A=0, cont_B=0;
for (int i=0; i<3; ++i){
for (int j=0; j<3; ++j){
if (A[j][i]==1) cont_A++;
if (A[j][i]==2) cont_B++;
}
if (cont_A == 3) break; else cont_A=0;
if (cont_B == 3) break; else cont_B=0;
} if ((cont_A == 3) || (cont_B == 3)) {Declarando_Vencedor(Jogador); FimDoJogo=1;}
// Verifica a Diagonal Principal
cont_A = 0; cont_B = 0;
for (int i=0; i<3; ++i){
if (A[i][i]==1) cont_A++;
if (A[i][i]==2) cont_B++;
} if ((cont_A == 3) || (cont_B == 3)) {Declarando_Vencedor(Jogador); FimDoJogo=1;}
// Verifica a Diagonal Secundaria
cont_A = 0; cont_B = 0;
for (int i=0; i<3; ++i){
if (A[i][2-i]==1) cont_A++;
if (A[i][2-i]==2) cont_B++;
} if ((cont_A == 3) || (cont_B == 3)) {Declarando_Vencedor(Jogador); FimDoJogo=1;}
// Verifica se houve empate
cont_A = 0;
for (int i=0; i<3; ++i){
for (int j=0; j<3; ++j){
if (A[i][j]!=0) cont_A++;
}
} if ((cont_A == 9) && (FimDoJogo != 1)) {printf("\n\tEMPATE! TENTEM NOVAMENTE!"); FimDoJogo=2;}
if (FimDoJogo == 0){
if (Jogador==1) printf("\n\t%s",NomeDoJogador1);
else printf("\n\t%s",NomeDoJogador2);
}
printf("\n\n");
// Estética do jogo
for (int i=0; i<5; ++i){
if (i == 0) printf("\n\t\tC 1 C 2 C 3\n");
if (i%2==0){
printf("\n\t L %d\t",i/2+1);
for (int a=0; a<3; ++a){
if (A[a][i/2] == 0) printf(" "); else {if (A[a][i/2] == 1) printf(" X "); else printf(" 0 ");}
if (a!=2) printf("|");
}
}
else printf("\n\t\t---------------");
} printf("\n\n\n");
if ((FimDoJogo == 1) || (FimDoJogo==2)){
if ((FimDoJogo == 1) && (Jogador == 1)) NumeroDeVitoriasDoJogador2++;
if ((FimDoJogo == 1) && (Jogador == 2)) NumeroDeVitoriasDoJogador1++;
if (FimDoJogo == 2) NumeroDeEmpates++;
}
else {
// Obtem as coordenada do usuário (verificando se estas são válidas)
Obter_Linha_Coluna();
// Atualiza o jogo
if (Jogador == 1) {A[coluna-1][linha-1]=1; Jogador = 2;}
else {A[coluna-1][linha-1]=2; Jogador = 1;}
system("cls");
}
}
}
void Declarando_Vencedor(int jogador){
if (jogador == 1) printf("\n\tPARABENS %s! VOCE GANHOU!",NomeDoJogador2);
else printf("\n\tPARABENS %s! VOCE GANHOU!",NomeDoJogador1);
}
void Obter_Linha_Coluna(){
linha=0;
// Só serão aceitos valores entre 1(inclusive) e 3(inclusive)
while (linha<1 || linha>3){
printf(" [L] Linha..: ");
scanf("%d",&linha);
}
coluna=0;
// Só serão aceitos valores entre 1(inclusive) e 3(inclusive)
while (coluna<1 || coluna>3){
printf(" [C] Coluna.: ");
scanf("%d",&coluna);
}
// Recursividade
while (A[coluna-1][linha-1] != 0) Obter_Linha_Coluna();
}
void Instrucao(){
printf("\n\n\t- O TABULEIRO %c UMA MATRIZ DE TR%cS LINHAS POR TR%cS COLUNAS.\n\n",144,210,210);
printf("\t- OS JOGADORES JOGAM ALTERNADAMENTE, UMA MARCA%c%cO POR VEZ,\n\t",384,455);
printf("NUMA POSI%c%cO QUE ESTEJA VAZIA.\n\n",384,455);
printf("\t- A MISS%cO %c CONSEGUIR TR%cS X'S OU TR%cS 0'S, NA HORIZONTAL\n\t",455,144,210,210);
printf("OU VERTICAL OU DIAGONAL, E AO MESMO TEMPO, QUANDO POSS%cVEL,\n\t",470);
printf("IMPEDIR O ADVERS%cRIO DE GANHAR NA PR%cXIMA JOGADA.\n\n",181,224);
}
void Estatisticas(){
printf("\n\n\tN%cMERO DE VIT%cRIAS DO JOGADOR 1.: %d\n",233,224,NumeroDeVitoriasDoJogador1);
printf("\tN%cMERO DE VIT%cRIAS DO JOGADOR 2.: %d\n",233,224,NumeroDeVitoriasDoJogador2);
printf("\tN%cMERO DE EMPATES...............: %d\n\n",233,NumeroDeEmpates);
}
void Renomear_Jogadores(){
int op = 0;
printf("\n\n 1 - RENOMEAR JOGADOR 1\n");
printf(" 2 - RENOMEAR JOGADOR 2\n");
printf(" 3 - SAIR\n");
while (op!=3){
op = 0;
while ((op<1) || (op>3)){
printf("\n Digite op%c%co: ",135,454);
scanf("%d",&op);
}
if (op == 1){
printf("\n NOME DO JOGADOR 1: ");
scanf("%s",&NomeDoJogador1);
}
if (op == 2){
printf("\n NOME DO JOGADOR 2: ");
scanf("%s",&NomeDoJogador2);
}
}
}
void Sobre(){
printf("\n IFBA: INSTITUTO FEDERAL DE EDUCA%c%cO, CI%cNCIA E TECNOLOGIA DA BAHIA.\n",384,455,210);
printf(" CAMPUS VALEN%cA.\n\n\n",384);
printf(" FUNDADOR: JO%cO MATHEUS SANTOS ASSIS.\n\n",455);
printf(" CO-FUNDADOR: MATHIAS SANTOS ASSIS.\n\n");
}
Artigos relacionados em C/C++:
Feito no Dev C++ 4.9.9.2 | Executável |
Feito no Dev C++ 4.9.9.2 | Executável |
|
Feito no Dev C++ 4.9.9.2 | Executável |