0

no me imprime la matriz con los datos del metodo config

public class main {
        static String[][] maze;     //matriz para el cambas
        static String player = "O"; //Icono del personaje 
        static String muro = "#";   //Icono del muro
        static String vacio = " ";  //Espacio en blamco del tablero
        static String Win = "V";    //Icono de mtea
        static String puerta = "="; // Puertas
        static String llave = ";";  //llave
        static int x = 1, y = 1;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        maze =  new String[10][20];
        crear();            //creamos el tablero
        actualizar(" ");    //Mostramos el tablero creado
        //play();               //Empieza el juego
    }

    public static void crear() {
        for (int i = 0; i < maze.length; i++) {
            for (int j = 0; j < maze[i].length; j++) {
                if (i == 0 || i == maze.length-1) {
                    maze[i][j] = muro;
                } else if (j == 0 || j == maze[i].length-1) {
                    maze[i][j] = muro;
                } else {
                    maze[i][j] = vacio;
                }
            }
        }
        config(); //configuramos el tablero en base a la dificultat
    }
    public static void config() {

            String [][] maze = {{"#","P","#"," "," "," "," "," "," "," ","#","#","#","#"," "," "," ",";"," ","#"},  //1
                                {"#"," ","#"," ","#"," ","#","#","#"," "," "," "," "," "," ","#"," ","#"," ","#"},  //2
                                {"#"," "," "," ","#"," ","#","#","#"," ","#"," ","#","#","#","#"," ","#","#","#"},  //3
                                {"#","=","#"," ","#","#"," "," ","#","#"," ","#"," ","#","#","#","#"," "," ","#"},  //4
                                {}}; //Esto entero

    }

    public static void actualizar(String txt) {
        //borrar();
        //Comprobamos si ha ganado
        if (maze[x][y] == Win) {
            //win();
        }else {
        maze[x][y] = player;
        for (int i = 0; i < maze.length; i++) {
            for (int j = 0; j < maze[i].length; j++) {
                System.out.print(maze[i][j]);
            }
            System.out.println("");
        }
        }
        //play(); //Comprobamos la tecla que pulsa el jugador
    }
}
Djdadi43
  • 93
  • 7
  • en que momento la imprimes o como lo haces? muestra tu código completo – Sr1871 Dec 04 '17 at 19:04
  • pondre la parte de imprimir, es que el codigo completo es demasiado largo... – Djdadi43 Dec 04 '17 at 19:05
  • y hay algo imprimible en esas posiciones de la matriz? – gbianchi Dec 04 '17 at 19:09
  • Sep, ya se como colgar todo el codigo, actualizo la pregunta – Djdadi43 Dec 04 '17 at 19:10
  • Igual me refería a que pusieras donde la imprimes, osea el código completo son las partes relevantes, para no andar buscando entre todo el código y viendo que hace cada cosa – Sr1871 Dec 04 '17 at 19:19
  • Pues por terminal, es un laberinto que se imprime en la consola de comandos, primero defino el tamaño, despues tengo un metodo que lo llena con los muros exteriores y el resto vacio, luego intento añadir los muros interiores como digo en la pregunta, pero a la hora de imprimir por pantalla el laberinto solo miestra los muros exteriores y no lo de dentro. – Djdadi43 Dec 04 '17 at 19:22
  • @Djdadi43 los enlaces con codigo externo no estan bien. El codigo tiene que estar en la pregunta. Si es mucho el codigo, tenes que hacer un [MCVE] para que podamos reproducir tu error. Cuando imprimes lo de adentro, despues de imprimir lo de afuera? – gbianchi Dec 04 '17 at 19:34
  • A vale perdon, ahora lo arreglo. y sep primero lleno el array con los muros, despues sobrescribo lo de dentro y imprimo el resultado – Djdadi43 Dec 04 '17 at 19:41

2 Answers2

1

Mira el siguiente código. Eliminé los métodos staticos (se ven horribles) y todo funciona. Adicionalmente en el metodo config() cambie la inicialización para que use la global de la clase.

/**
 * @author gmora 
 * */
public class Main {

    private String[][] maze;     //matriz para el cambas
    private final String player = "O"; //Icono del personaje
    private final String muro = "#";   //Icono del muro
    private final String vacio = " ";  //Espacio en blanco del tablero
    private final String Win = "V";    //Icono de meta
    private final String puerta = "="; // Puertas
    private final String llave = ";";  //llave
    private int x = 1, y = 1;

    public void setMaze(String[][] maze) {
        this.maze = maze;
    }


    public static void main(String[] args) {
        Main main = new Main();
        main.setMaze( new String[10][20]);
        main.crear();            //creamos el tablero
        main.actualizar(" ");    //Mostramos el tablero creado
        //play();               //Empieza el juego
    }

    public void crear() {
        for (int i = 0; i < maze.length; i++) {
            for (int j = 0; j < maze[i].length; j++) {
                if (i == 0 || i == maze.length - 1) {
                    maze[i][j] = muro;
                } else if (j == 0 || j == maze[i].length - 1) {
                    maze[i][j] = muro;
                } else {
                    maze[i][j] = vacio;
                }
            }
        }
        config(); //configuramos el tablero en base a la dificultad
    }

    public void config( ) {

        maze = new String[][] {{"#", "P", "#", " ", " ", " ", " ", " ", " ", " ", "#", "#", "#", "#", " ", " ", " ", ";", " ", "#"},  //1
                {"#", " ", "#", " ", "#", " ", "#", "#", "#", " ", " ", " ", " ", " ", " ", "#", " ", "#", " ", "#"},  //2
                {"#", " ", " ", " ", "#", " ", "#", "#", "#", " ", "#", " ", "#", "#", "#", "#", " ", "#", "#", "#"},  //3
                {"#", "=", "#", " ", "#", "#", " ", " ", "#", "#", " ", "#", " ", "#", "#", "#", "#", " ", " ", "#"},  //4
                {}}; //Esto entero

    }

    public void actualizar(String txt) {
        //borrar();
        //Comprobamos si ha ganado
        if (maze[x][y].equals(Win)) { //se usa equals para comparar String
            //win();
        } else {
            maze[x][y] = player;
            for (int i = 0; i < maze.length; i++) {
                for (int j = 0; j < maze[i].length; j++) {
                    System.out.print(maze[i][j]);
                }
                System.out.println("");
            }
        }
        //play(); //Comprobamos la tecla que pulsa el jugador
    }
}
Gustavo Mora
  • 645
  • 1
  • 5
  • 17
-1

Ignorando los otros problemas que veo en el código, parece que tu problema inmediato es que estás trabajando con 2 diferentes variables maze.

Tienes la variable local en el método config():

String [][] maze = {{...

Y luego tienes la variable global maze:

static String[][] maze;     //matriz para el cambas

Obviamente, lo que haga el método config() se pierde, porque no trabaja con la variable global maze.

Un consejo: trata de evitar el uso de variables globales, justamente para evitar este tipo de errores y muchos más. Si ya te causa problemas con un programa tan pequeño, imagínate los dolores de cabeza con un programa más complejo.

Lectura recomendada: ¿Por qué es considerado una mala práctica utilizar variables globales?.

sstan
  • 16,591
  • 2
  • 21
  • 45