Boa Tarde pessoal,
Este é o meu primeiro post no forum. Sou iniciante em programação C.
Gostaria de uma ajuda no meu código, estou tentando fazer um jogo da velha.
Estou quebrando cabeça a horas e não consegui decifrar onde esta o meu erro. Então gostaria de pedir uma ajudinha aos colegas experts em programação.
#include <cstdlib>
#include <iostream>
using namespace std;
char tabuleiro[3][3];
char jog1[20],jog2[20],simb_jog1,simb_jog2,linha,coluna;
int prox_jogador = 1;//Controla o jogador da vez
void jogar (int jogador)
{
int i = 0; //inicializando contador da estrutura while
char nome_jog[20],simb_jog;
if (jogador == 1){
nome_jog = jog1;
simb_jog = simb_jog1;
prox_jogador=2;
}else{
nome_jog = jog2;
simb_jog = simb_jog2;
prox_jogador=1;
}
//Definindo o jogador da vez
linha = 0; //inicializando valor da linha
coluna = 0; //inicializando valor da coluna
while (linha < 1 || linha > 3) //Controla se o valor ir a ser digitado certo
{
printf("\n\n Vez do Jogador %d. Escolha a Linha (1,2,3): ", nome_jog);
scanf("%d", &linha); //lendo linha escolhida
if (linha < 1 || linha > 3) printf("\nAviso: Linha invalida! Voce so pode escolher as linhas de 1 a 3.\n"); //Aviso de linha inválida, caso o jogador tenha escolhido linha menor que 1 ou maior que 3
}
while (coluna < 1 || coluna > 3)
{
printf("\n\n Vez do Jogador %d. Escolha a Coluna (1,2,3): ", nome_jog);
scanf("%d", &coluna); //lendo coluna escolhida
if (coluna < 1 || coluna > 3) printf("\nAviso: Coluna invalida! Voce so pode escolher as colunas de 1 a 3.\n"); //Aviso de coluna inválida, caso o jogador tenha escolhido coluna menor que 1 ou maior que 3
}
}
linha--;//Subtrair o indice digitado pelo usuario, para o indice comecar do 0 nao por 1
coluna--;////Subtrair o indice digitado pelo usuario, para o indice comecar do 0 nao por 1
while(i==0){
if (tabuleiro[linha][coluna] == ' ') //se não estiver marcado
{
tabuleiro[linha][coluna] = simb_jog; //marcar com o símbolo do jogador da vez
i=1;
} else { //se o campo escolhido já estivar marcado
Printf ("Ja houve jogada nesta casa! Escolha outra casa.\n"); //aviso
}
}
imprime_tabuleiro(prox_jogador);
}
int status()
{ /*
retorna 0 se n?o h? ganhador;
retorna 1 se o jogador 1 ganhar;
retorna 2 se o jogador 2 ganhar;
retorna 3 se houver empate;
*/
//verifica se tem ganhador na linha 0
if(tabuleiro[0][0]==simb_jog1 && tabuleiro[1][0]==simb_jog1 && tabuleiro[2][0]==simb_jog1) return 1;
if(tabuleiro[0][0]==simb_jog2 && tabuleiro[1][0]==simb_jog2 && tabuleiro[2][0]==simb_jog2) return 2;
//verifica se tem ganhador na linha 1
if(tabuleiro[0][1]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][1]==simb_jog1) return 1;
if(tabuleiro[0][1]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][1]==simb_jog2) return 2;
//verifica se tem ganhador na linha 2
if(tabuleiro[0][2]==simb_jog1 && tabuleiro[1][2]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
if(tabuleiro[0][2]==simb_jog2 && tabuleiro[1][2]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;
//verifica se tem ganhador na coluna 0
if(tabuleiro[0][0]==simb_jog1 && tabuleiro[0][1]==simb_jog1 && tabuleiro[0][2]==simb_jog1) return 1;
if(tabuleiro[0][0]==simb_jog2 && tabuleiro[0][1]==simb_jog2 && tabuleiro[0][2]==simb_jog2) return 2;
//verifica se tem ganhador na coluna 1
if(tabuleiro[1][0]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[1][2]==simb_jog1) return 1;
if(tabuleiro[1][0]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[1][2]==simb_jog2) return 2;
//verifica se tem ganhador na coluna 2
if(tabuleiro[2][0]==simb_jog1 && tabuleiro[2][1]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
if(tabuleiro[2][0]==simb_jog2 && tabuleiro[2][1]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;
//verifica diagonal 1
if(tabuleiro[0][0]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][2]==simb_jog1) return 1;
if(tabuleiro[0][0]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][2]==simb_jog2) return 2;
//verifica diagonal 2
if(tabuleiro[0][2]==simb_jog1 && tabuleiro[1][1]==simb_jog1 && tabuleiro[2][0]==simb_jog1) return 1;
if(tabuleiro[0][2]==simb_jog2 && tabuleiro[1][1]==simb_jog2 && tabuleiro[2][0]==simb_jog2) return 2;
//verifica se empate
if(tabuleiro[0][0]!=' ' && tabuleiro[1][0]!=' ' && tabuleiro[2][0]!=' ')
{
if(tabuleiro[0][1]!=' ' && tabuleiro[1][1]!=' ' && tabuleiro[2][1]!=' ')
{
if(tabuleiro[0][1]!=' ' && tabuleiro[1][1]!=' ' && tabuleiro[2][1]!=' ')
{
return 3;
}else{
return 0;
}
}else{
return 0;
}
}else{
return 0;
}
}
int imprime_tabuleiro(prox_jogador){
printf(" %c | %c | %c\n",tabuleiro[0][0],tabuleiro[1][0],tabuleiro[2][0]);
printf("---+---+---\n");
printf(" %c | %c | %c\n",tabuleiro[0][1],tabuleiro[1][1],tabuleiro[2][1]);
printf("---+---+---\n");
printf(" %c | %c | %c\n",tabuleiro[0][2],tabuleiro[1][2],tabuleiro[2][2]);
if (status()==1){
printf("\nStatus do jogo: Vencedor - %s\n",jog1);
}
if (status()==2){
printf("\nStatus do jogo: Vencedor - %s\n",jog2);
}
if (status()==3){
printf("\nStatus do jogo: Empate\n");
}
if (status()==0){
printf("\nStatus do jogo: Em andamento\n");
printf("\nDigite sua posicao\n");
//jogar(prox_jogador);
}
return 0;
}
void zerarMatriz()
{
int i,j = 0;
for(i=0;i<=3;i++){
for(j=0;j<3;j++){
tabuleiro[i][j]=' ';
}
}
}
int main(int argc, char *argv[])
{
zerarMatriz();
printf("Digite o nome do Jogador 1: ");
fflush(stdin);
scanf("%s",jog1);
printf("Digite o simbolo usado pelo Jogador 1: ");
fflush(stdin);
scanf("%c",&simb_jog1);
printf("Digite o nome do Jogador 2: ");
fflush(stdin);
scanf("%s",jog2);
printf("Digite o simbolo usado pelo Jogador 2: ");
fflush(stdin);
scanf("%c",&simb_jog2);
while(simb_jog1==simb_jog2)
{
printf("\nO simbolo deve ser diferente do jogador 1!!!\nDigite novamente o simbolo do jogador 2:");
fflush(stdin);
scanf("%c",&simb_jog2);
}
system("CLS");//limpa a tela
imprime_tabuleiro(prox_jogador);
system("PAUSE");
return EXIT_SUCCESS;
}
