Jogo da velha em c++, duvidas?

Pessoal, preciso fazer um jogo da velha, mas ele roda apenas uma vez para o jogador 1 e uma para o jogador 2, não consigo encontrar o erro, podem me ajudar?

O programa não precisa ter mensagem de vencedor e nem de velha, apenas quando alguém ganhar, ou quando dar velha o programa encerra e tem que permanecer a janela aberta.

Veja que você tem um do/while cuja condição é while(m[l][c] == 'x' or m[i][c] =='o'), logo após você tem um aninhamento com dois for e, novamente, um outro do/while com a mesma condição do anterior.

Ocorre que, assim, o teu jogo só vai executar 1 vez para cada jogador, você precisa de um laço externo, algo como

int count = 0;
while(count < 9) 
{
  //Coloca todo o teu código aqui
  //Aqui você precisa verificar se existe alguma linha ou coluna ou diagonal 
  //com três símbolos iguais. se houver, faz com que count receba 10 e termine 
  //o loop externo.
    count++;//Vai rodar 9 vezes
}

###Recomendação:
No lugar da imagem poste sempre o código isso dificulta muito a solução do seu problemas não tem como testar o seu código e por isso é ruim de uma solução.

Obrigada pela dica, meu código:

void velha(){
    char m[3][3] = {{'-', '-', '-'},{'-','-','-'},{'-','-','-'}};
    int l, c;
    int jogada = 0;

    do{
        cout<<" Jogador 1, escolha uma linha e coluna: ";
        cin>>l>>c;

    }while(m[l][c] == 'x' or m[l][c] == 'o');
    m[l][c] = 'o';
    cout<<"\n\n  0 1 2";
    for (int i=0; i<3; i++){
        cout<< endl;
        cout<<i<<" ";
        for (int j=0; j<3; j++){
            cout<< m[i][j]<<" ";
        }
    }
    cout<< "\n\n\n";
do{
   cout<<" Jogador 2, escolha uma linha e coluna: ";
   cin>>l>>c;

   }while(m[l][c] == 'x' or m[l][c] == 'o');
   m[l][c]='x';

   cout<<"\n\n  0 1 2";
    for (int i=0; i<3; i++){
        cout<< endl;
        cout<<i<<" ";
        for (int j=0; j<3; j++){
            cout<< m[i][j]<<" ";
        }
    }
    cout<< "\n\n\n";


    /// horizontal
    if((m[0][0]==m[0][1]) and (m[0][1]==m[0][2])and (m[0][0]!=' ')){
       return;
    }else
    if((m[1][0]==m[1][1]) and (m[1][1]==m[1][2])and (m[1][0]!=' ')){
        return;
    }else
    if((m[2][0]==m[2][1]) and (m[2][1]==m[2][2])and (m[2][0]!=' ')){
        return;

    ///vertical
    }else
    if((m[0][0]==m[1][0]) and (m[1][0]==m[2][0])and (m[0][0]!=' ')){
        return;
    }else
    if((m[0][1]==m[1][1]) and (m[1][1]==m[2][1])and (m[0][1]!=' ')){
        return;
    }else
    if((m[0][2]==m[1][2]) and (m[1][2]==m[2][2])and (m[0][2]!=' ')){
        return;
    }else

    ///diagonal
    if((m[0][0]==m[1][1]) and (m[1][1]==m[2][2])and (m[0][2]!=' ')){
        return;
    }else
    if((m[0][2]==m[1][1]) and (m[1][1]==m[2][0])and (m[0][2]!=' ')){
        return;
    }else
    if(jogada == 9){
        return;
        }
    }



int main()
{
    setlocale(LC_ALL, "portuguese");


    velha();
    return 0;
}

Meu código

void velha(){
    char m[3][3] = {{'-', '-', '-'},{'-','-','-'},{'-','-','-'}};
    int l, c;
    int jogada = 0;

    do{
        cout<<" Jogador 1, escolha uma linha e coluna: ";
        cin>>l>>c;

    }while(m[l][c] == 'x' or m[l][c] == 'o');
    m[l][c] = 'o';
    cout<<"\n\n  0 1 2";
    for (int i=0; i<3; i++){
        cout<< endl;
        cout<<i<<" ";
        for (int j=0; j<3; j++){
            cout<< m[i][j]<<" ";
        }
    }
    cout<< "\n\n\n";
do{
   cout<<" Jogador 2, escolha uma linha e coluna: ";
   cin>>l>>c;

   }while(m[l][c] == 'x' or m[l][c] == 'o');
   m[l][c]='x';

   cout<<"\n\n  0 1 2";
    for (int i=0; i<3; i++){
        cout<< endl;
        cout<<i<<" ";
        for (int j=0; j<3; j++){
            cout<< m[i][j]<<" ";
        }
    }
    cout<< "\n\n\n";


    /// horizontal
    if((m[0][0]==m[0][1]) and (m[0][1]==m[0][2])and (m[0][0]!=' ')){
       return;
    }else
    if((m[1][0]==m[1][1]) and (m[1][1]==m[1][2])and (m[1][0]!=' ')){
        return;
    }else
    if((m[2][0]==m[2][1]) and (m[2][1]==m[2][2])and (m[2][0]!=' ')){
        return;

    ///vertical
    }else
    if((m[0][0]==m[1][0]) and (m[1][0]==m[2][0])and (m[0][0]!=' ')){
        return;
    }else
    if((m[0][1]==m[1][1]) and (m[1][1]==m[2][1])and (m[0][1]!=' ')){
        return;
    }else
    if((m[0][2]==m[1][2]) and (m[1][2]==m[2][2])and (m[0][2]!=' ')){
        return;
    }else

    ///diagonal
    if((m[0][0]==m[1][1]) and (m[1][1]==m[2][2])and (m[0][2]!=' ')){
        return;
    }else
    if((m[0][2]==m[1][1]) and (m[1][1]==m[2][0])and (m[0][2]!=' ')){
        return;
    }else
    if(jogada == 9){
        return;
        }
    }



int main()
{
    setlocale(LC_ALL, "portuguese");


    velha();
    return 0;
}
1 curtida

Conceitualmente, qualquer jogo depende de um loop, pois o mesmo exige uma série de ações repetidas (solicitar ao usuário 1 ou 2 que informe a posição, validar se a posição está vazia e colocar o valor informado pelo usuário na referida posição. Validar se há combinação de três símbolos iguais em uma linha, coluna ou diagonal).

Este loop deve rodar, no máximo, o número de casas disponíveis para a execução do jogo, ou seja, 9 para o padrão.
É óbvio que 5 jogadas é o mínimo necessário para um dos jogadores marcar seus símbolos em uma linha, coluna ou diagonal.
Sendo assim, a condição de parada (saída do loop, fim do jogo) deve contemplar ambas as situações, logo, você pode criar um contador e uma variável que será a condição de jogo completo.

Sem o loop, você vai ter problemas para repetir as ações que são necessárias para a condução do jogo.

Pessoal, refiz meu código, melhorou, agora da pra fazer as jogadas, porém ele está em um loop eterno, a ideia é ele encerrar quando alguem ganha, ou quando alguem perde
Mas sem falar quem ganhou ou se deu velha, mas ele não encerra :confused:
Podem me ajudar?

void jogada1(char m[3][3], int l , int c){


do{
    cout<<"\nJogador 1, escolha uma linha e coluna: ";
    cin>>l>>c;

}while(m[l][c] == 'x' or m[l][c] == 'o');

m[l][c] = 'o';
  cout<<"\n\n  0\t 1\t 2";
for (int i=0; i<3; i++){
    cout<< endl;
    cout<<i<<" ";
    for (int j=0; j<3; j++){
        cout<< m[i][j]<<"\t ";
    }
}
cout<< "\n\n\n";


/// horizontal
if((m[0][0]=='o') and (m[0][1]=='o')and (m[0][2]=='o')){

   return;
}else
if((m[1][0]=='o') and (m[1][1]=='o')and (m[1][2]=='o')){

        return;
}else
if((m[2][0]=='o') and (m[2][1]=='o')and (m[2][2]=='o')){

        return;

///vertical
}else
if((m[0][0]=='o') and (m[1][0]=='o')and (m[2][0]=='o')){

        return;
}else
if((m[0][1]=='o') and (m[1][1]=='o')and (m[2][1]=='o')){

        return;
}else
if((m[0][2]=='o') and (m[1][2]=='o')and (m[2][2]=='o')){

        return;
}else

///diagonal
if((m[0][0]=='o') and (m[1][1]=='o')and (m[2][2]=='o')){

        return;
}else
if((m[2][0]=='o') and (m[1][1]=='o')and (m[0][2]!='o')){

        return;
}else

    return;
    }

void jogada2(char m[3][3], int l, int c){

do{ cout<<" Jogador 2, escolha uma linha e coluna: ";
cin>>l>>c;

}while(m[l][c] == ‘x’ or m[l][c] == ‘o’);
m[l][c]=‘x’;
cout<<"\n\n 0\t 1\t 2";
for (int i=0; i<3; i++){
cout<< endl;
cout<<i<<" “;
for (int j=0; j<3; j++){
cout<< m[i][j]<<”\t ";
}
}
cout<< “\n\n\n”;

/// horizontal
if((m[0][0]=='x') and (m[0][1]=='x')and (m[0][2]=='x')){

   return;
}else
if((m[1][0]=='x') and (m[1][1]=='x')and (m[1][2]=='x')){

        return;
}else
if((m[2][0]=='x') and (m[2][1]=='x')and (m[2][2]=='x')){

        return;

///vertical
}else
if((m[0][0]=='x') and (m[1][0]=='x')and (m[2][0]=='x')){

        return;
}else
if((m[0][1]=='x') and (m[1][1]=='x')and (m[2][1]=='x')){

        return;
}else
if((m[0][2]=='x') and (m[1][2]=='x')and (m[2][2]=='x')){

        return;
}else

///diagonal
if((m[0][0]=='x') and (m[1][1]=='x')and (m[2][2]=='x')){

        return;
}else
if((m[2][0]=='x') and (m[1][1]=='x')and (m[0][2]!='x')){

        return;
}else

    return;
    }

int main()
{
setlocale(LC_ALL, “portuguese”);

char m[3][3] = {{’-’, ‘-’, ‘-’},{’-’,’-’,’-’},{’-’,’-’,’-’}};
int x=0;
for(x=0; x<9; x++){

jogada1(m,3,3);

jogada2(m,3,3);

}

return 0;

}