(RESOLVIDO) Jogo da Velha

7 respostas
java
N
Boa noite! Estou fazendo um exercício para fazer um programa que retorne o status de um jogo da velha:

<strong>0 </strong> Jogo não iniciado: o tabuleiro está “vazio”, isto ´e sem pecas X e O;

<strong>1 </strong> 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;
    }

7 Respostas

P

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.

N

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.

P

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í)

N

Sim, estava fazendo errado, estou arrumando agora.

N

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.

P

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

N

:blush:

Criado 16 de maio de 2020
Ultima resposta 18 de mai. de 2020
Respostas 7
Participantes 2