(RESOLVIDO) Jogo da Velha

Boa noite! Estou fazendo um exercício para fazer um programa que retorne o status de um jogo da velha:
0 – Jogo não iniciado: o tabuleiro está “vazio”, isto ´e sem pecas X e O;
1 – Jogo encerrado 1: o primeiro jogador (que usa as peças X) ´e o ganhador;

2 – Jogo encerrado 2: o segundo jogador (que usa as peças O) ´e o ganhador;

3 – Jogo encerrado 3: empate – todas as casas do tabuleiro estão preenchidas com X e

O, mas nenhum dos jogadores ganhou;

4 – Jogo já iniciado e em andamento: nenhuma das alternativas anteriores.

A saída precisa retornar um número inteiro (entre 0 (zero) e 4, correspondendo ao status do jogo do tabuleiro atual, conforme a lista de estados possíveis já apresentada).

Segue meu código até agora

public class JogoDaVelha {
static final char pecaX = 'X';
static final char pecaY = 'O';
static final char espacoVazio = ' ';

/*
Determina o status de uma partida de Jogo da Valha

Entrada:
tabuleiro - matriz 3x3 de caracteres representando uma partida valida de Jogo da Velha

Saída:
um inteiro contendo o status da partida (valores válidos de zero a quatro)
*/
    static int verificaStatus(char[][] tabuleiro) {
    int status = -1;
       int linha;
    int coluna;
    int jogada;
    int tab0 = 0;
    int tab1 = 1;
    int tab2 = 2;
    int tab3 = 3;
    int tab4 = 4;

    char [][] tab0 = new char[3][3];
    tabuleiro = tab0;

       char [][] tab1 = new char[3][3];
    tabuleiro = tab1;

    char [][] tab2 = new char[3][3];
    tabuleiro = tab2;

    char [][] tab3 = new char[3][3];
    tabuleiro = tab3;

    char [][] tab4 = new char[3][3];
    tabuleiro = tab4;

            boolean ganhou = false;

            while (!ganhou)

       if (jogada %2==1) {
    pecaX;
    }
    else {
    pecaY;
    }

    boolean linhaValida = false;

    if ( linha>= 1 && linha<=3) {
    linhaValida = true;
    }
    else {
    } ;
       }
       colunaValida = false;

    if( coluna>= 1 && coluna<=3) {
    colunaValida = true;
    }
    else {  
    }

    linha --;
    coluna --;

    if(tabuleiro [linha][coluna] == pecaX || tabuleiro [linha][coluna] == pecaY) {
    return = -1;
    }

    else {
    tabuleiro [linha][coluna] = pecaX, pecaY;
    jogada++;
    }

    if ( ( tabuleiro [0] [0] == espacoVazio && tabuleiro [0][1] == espacoVazio && tabuleiro [0][2] == espacoVazio)
    ||   (tabuleiro [1][0] == espacoVazio && tabuleiro [1][1] == espacoVazio && tabuleiro [1][2] == espacoVazio)
    ||   (tabuleiro [2][0] == espacoVazio && tabuleiro [2][1] == espacoVazio && tabuleiro [2][2] == espacoVazio)
    ||   (tabuleiro [0][0] == espacoVazio && tabuleiro [1][0] == espacoVazio && tabuleiro [2][0] == espacoVazio)
    ||   (tabuleiro [0][1] == espacoVazio && tabuleiro [1][1] == espacoVazio && tabuleiro [2][1] == espacoVazio)
    ||   (tabuleiro [0][2] == espacoVazio && tabuleiro [1][2] == espacoVazio && tabuleiro [2][2] == espacoVazio)
    ||   (tabuleiro [0][0] == espacoVazio && tabuleiro [1][1] == espacoVazio && tabuleiro [2][2] == espacoVazio))
    {
    status = tab0;
    }
    else {
    status = tab4;
    }
    if (( tabuleiro [0] [0] == pecaX && tabuleiro [0][1] == pecaX && tabuleiro [0][2] == pecaX)
    ||   (tabuleiro [1][0] == pecaX && tabuleiro [1][1] == pecaX && tabuleiro [1][2] == pecaX)
    ||   (tabuleiro [2][0] == pecaX && tabuleiro [2][1] == pecaX && tabuleiro [2][2] == pecaX)
    ||   (tabuleiro [0][0] == pecaX && tabuleiro [1][0] == pecaX && tabuleiro [2][0] == pecaX)
    ||   (tabuleiro [0][1] == pecaX && tabuleiro [1][1] == pecaX && tabuleiro [2][1] == pecaX)
    ||   (tabuleiro [0][2] == pecaX && tabuleiro [1][2] == pecaX && tabuleiro [2][2] == pecaX)
    ||   (tabuleiro [0][0] == pecaX && tabuleiro [1][1] == pecaX && tabuleiro [2][2] == pecaX))
    {
    status = tab1;
    }
    else {
    status = tab3;
    }
           if (( tabuleiro [0] [0] == pecaY && tabuleiro [0][1] == pecaY && tabuleiro [0][2] == pecaY)
    ||   (tabuleiro [1][0] == pecaY && tabuleiro [1][1] == pecaY && tabuleiro [1][2] == pecaY)
    ||   (tabuleiro [2][0] == pecaY && tabuleiro [2][1] == pecaY && tabuleiro [2][2] == pecaY)
    ||   (tabuleiro [0][0] == pecaY && tabuleiro [1][0] == pecaY && tabuleiro [2][0] == pecaY)
    ||   (tabuleiro [0][1] == pecaY && tabuleiro [1][1] == pecaY && tabuleiro [2][1] == pecaY)
    ||   (tabuleiro [0][2] == pecaY && tabuleiro [1][2] == pecaY && tabuleiro [2][2] == pecaY)
    ||   (tabuleiro [0][0] == pecaY && tabuleiro [1][1] == pecaY && tabuleiro [2][2] == pecaY))
    {
    status = tab2;
    }
    else {
    status = tab3;
    }

    return status;
    }

Para que precisas de tantos tabuleiros e de continuamente sobrescrever o teu tabuleiro de entrada?
Dessa forma nunca vais validar o que vem na entrada.

Então no exercício está pedindo para ter mais de um tabuleiro no caso 5 diferentes e eu copiei esses tabuleiros dentro do tabuleiro declarado como parâmetro.

O resultado do teu método pode ser um de cinco casos diferentes. Mas o tabuleiro é só o de entrada para o método. O teu método deve avaliar o status do tabuleiro passado e devolver o resultado.

Se queres depois testar no main, só aí deves criar os tabuleiros de teste (e popular com dados, só vejo tabuleiros vazios aí)

Sim, estava fazendo errado, estou arrumando agora.

pmlm, consegui resolver aqui.

o problema estava no tabuleiro como você falou.

eu fiz as condições para imprimir os status e está rodando corretamente só falta eu trocar os meus ifs por alguns laços de repetição para diminuir meu código.

Agradeço a opinião, ajudou bastante.

Para aprender, mais importante do que ter a solução, é perceber porque está errado. Se percebeste isso, óptimo, aprendeste :slight_smile:

:blush: