Duvida Lights Out 5x5 em java basico

2 respostas
Lepuroa

Olá estou fazendo na faculdade uma materia que ensina o basico da programação em java, em uma das listas de exercicios pedindo para resolver um Lights Out 5x5, (Link para o exercico na pagina do professor da disciplina), fiz um codigo, aparentemente o funcionamento do programa esta normal nas etapas iniciais, porem estou com problemas para "terminar" o programa quando o objetivo foi cumprido..

Segue o codigo que fiz para tentar resolver o programa

public class FinalPI {

    static String[][] jogo = new String[7][7];
    static String[][] respostajogo = new String[7][7];
    static String[] coordenadas = new String[]{"#", "0", "1", "2", "3", "4", "#"};
    static String x = "*";
    static String y = ".";
    static int Coordenadax;
    static int Coordenaday;
    static int i = 1;
    static int j = 1;

    public static void main(String[] args) {
        for (i = 0; i < 7; i++) {
            for (j = 0; j < 7; j++) {
                jogo[i][j] = x;
            }
        }
        for (i = 1; i < 7; i++) {
            for (j = 1; j < 7; j++) {
                respostajogo[i][j] = y;
            }
        }
        imprime_jogo();
        Scanner sc = new Scanner(System.in);
        do {
            do {
                System.out.print("Escolha uma coordenada ponto e insira o valor de X para essa coordenada:");
                Coordenadax = sc.nextInt() + 1;
                if (Coordenadax > 5 || Coordenadax < 0) {
                    System.out.println("Digite um numero de 0 a 4");
                }
            } while (Coordenadax > 5 || Coordenadax < 0);
            do {
                System.out.print("Agora insira o valor de Y para essa coordenada:");
                Coordenaday = sc.nextInt() + 1;
                if (Coordenaday > 5 || Coordenaday < 0) {
                    System.out.println("Digite um numero de 0 a 4");
                }
            } while (Coordenaday > 5 || Coordenaday < 0);
            System.out.print("A coordenada escolhida foi: " + (Coordenadax - 1) + ";" + (Coordenaday - 1));
            Duplo_espaco();
            if (jogo[Coordenadax][Coordenaday].equals(x)) {  
                jogo[Coordenadax][Coordenaday] = y;
            } else {
                jogo[Coordenadax][Coordenaday] = x;
            }
            if (jogo[Coordenadax - 1][Coordenaday].equals(x)) {
                jogo[Coordenadax - 1][Coordenaday] = y;
            } else {
                jogo[Coordenadax - 1][Coordenaday] = x;
            }
            if (jogo[Coordenadax + 1][Coordenaday].equals(x)) {
                jogo[Coordenadax + 1][Coordenaday] = y;
            } else {
                jogo[Coordenadax + 1][Coordenaday] = x;
            }
            if (jogo[Coordenadax][Coordenaday + 1].equals(x)) {
                jogo[Coordenadax][Coordenaday + 1] = y;
            } else {
                jogo[Coordenadax][Coordenaday + 1] = x;
            }
            if (jogo[Coordenadax][Coordenaday - 1].equals(x)) {
                jogo[Coordenadax][Coordenaday - 1] = y;
            } else {
                jogo[Coordenadax][Coordenaday - 1] = x;
            }
            imprime_jogo();
        } while (!respostajogo[i][j].equals(jogo[i][j])); \ este 
        {
            System.out.println("parabens voce terminou o jogo");
        }
    }

    public static void imprime_jogo() {
        for (int t = 0; t < 7; t++) {
            System.out.print(coordenadas[t] + " ");
        }
        System.out.println();
        for (i = 1; i < 6; i++) {
            System.out.print(coordenadas[i] + " ");
            for (j = 1; j < 6; j++) {
                System.out.print(jogo[j][i] + " ");
            }
            System.out.print(coordenadas[i]);
            System.out.println();
        }
        for (int t = 0; t < 7; t++) {
            System.out.print(coordenadas[t] + " ");
        }
        Duplo_espaco();
    }

    public static void Duplo_espaco() {
        System.out.println();
        System.out.println();
    }
}

O erro no while final (oq tem um //este para facilitar) eu tento fazer uma comparação de duas matrizes que (acredito serem 6x6 uma vez que o valor inicial do j e do i é 1) so que como resultado eu obtenho a comparação dos pontos 1,1 de cada matriz o que e entendivel pois i e j valem 1.

Segue minha duvida como fazer essa comparaçao percorrer as matrizes em um espaço limitado de celulas .. ou seja percorrer e comparar matrizes(7x7)[i][j] para intervamos de 0

Obs.: Tentei fazer por boolean mais nao deu certo =/
Obs.2: Nao sei resolver o jogo >.< logo conferir e uma tarefa bem complicada =/ :?

Lepuroa

2 Respostas

felipebonezi

Pelo o que me lembro, não tem como comparar matrizes sem percorrer suas posições.

O teu while não está percorrendo cada posição, se foi isso que entendi.

Lepuroa

felipebonezi:
Pelo o que me lembro, não tem como comparar matrizes sem percorrer suas posições.

O teu while não está percorrendo cada posição, se foi isso que entendi.

Sim voce esta correto >.<
So que nao estou conseguindo fazer ele percorrer as posicoes que desejo (que neste caso seria jogo[1][1]…ate…jogo[5][5] e o mesmo para respostajogo). quanto tento percorrer utilizando um duplo for a condicao do while passa ser invalida (eu posso estar fazendo algo errado).

Lepuroa

Edit

Modifiquei o while final fazendo parte do percurso da matriz manualmente oq faz ficar certo(o do…while funciona corretamete), o codigo ficou assim:
(mais imagina fazer isso se o tabuleiro for 80x80…)

} while (!respostajogo[i][j].equals(jogo[i][j]) && (!respostajogo[1][2].equals(jogo[1][2])) && (!respostajogo[1][3].equals(jogo[1][3])) && (!respostajogo[1][4].equals(jogo[1][4])) && (!respostajogo[1][5].equals(jogo[1][5])));//colocar todas as coordenadas ate [5][5] System.out.println("Parabens voce terminou o jogo");

Existe alguma meio transformar um duplo for (primeiro para percorrer a linha depois para percorrer a coluna) como um ato condicional do while (nao esquecendo que alem de percorrer simultaneamente deve-se comparar as posiçoes iguais >.< ) ?

Criado 28 de março de 2011
Ultima resposta 28 de mar. de 2011
Respostas 2
Participantes 2