Problema al asignar valores a una matriz [29][30] JAVA

boqueron

Tengo una matriz rellena de enteros,los cuales será luego leído por un bucle y dependiendo del valor que tengan el método paint() de un Jpanel me pintara unos sprites u otros.
Esto lo estoy usando para crear un laberinto de un juego.

El problema viene que yo voy comprobando que no me pase a otra casilla del mapa, si me paso a otra casilla, lo compruebo mirando la posición de mi imagen del personaje con unas variables de tipo entero que son :

// la imagen de mi muñeco es de 1515 pixeles y la de cada una de las celdas de mi pantalla es de 1515 tambien asi que lo que compruebo

    int cocientex=(pacman.Getx()/15);       //compruebo que la posición x de mi muñeco corresponde con una posicion [X][y] X de mi matriz de celdas de la pantalla
    int cocientey=(pacman.Gety()/15);   //compruebo que la posición x de mi muñeco corresponde con una posicion [x][Y] Y de mi matriz de celdas de la pantalla
   
    int restox=(pacman.Getx() % 15);   // con esto compruebo si mi imagen del personaje esta dentro de una celda del juego totalmente
    int restoy=(pacman.Gety() % 15);  //con esto compruebo si mi imagen del personaje esta dentro de una celda del juego totalmente

LA MATRIZ NUMERICA ES ESTA:

// 29*30 -1 sea muro, 0 vacío, 1 punto y 2 punto grande.

int [][] matriznumerica = {
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, //[0][j]
{-1,2,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,2,-1}, //[1][j]
{-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1},//[2][j]
{-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1},//[3][j]
{-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1},//[4][j]
{-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1},//[5][j]
{-1,1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1},//[6][j]
{-1,1,1,1,1,1,1,-1,-1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,1,1,1,1,1,-1},//[7][j]
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//[8][j]
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//[9][j]
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},////[10][j] hasta aqui ok

{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-2,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//[11][j] aqui esta la entrada de la casa de los fantasmas
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,0,0,0,0,0,0,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//[12][j]
{-1,-1,-1,-1,-1,-1,1,1,1,1,1,-1,0,0,0,0,0,0,-1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1},//[13][j]
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//[14][j] hasta aqui ok
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//[15][j]
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//[16][j]
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//[17][j]
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//[18][j]
{-1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1},//[19][j]
{-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1},//[20][j]
{-1,1,1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,1,1,-1},//[21][j] ok
{-1,-1,-1,1,-1,-1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,-1,-1,-1,1,-1,-1,-1},//[22][j]
{-1,-1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,-1},//[23][j]
{-1,1,1,1,1,1,1,-1,-1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,1,1,1,1,1,-1},//[24][j]
{-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1},//[25][j]
{-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1},//[26][j]
{-1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,-1}, //[27][j]
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//[28][j}
};

el metodo que estoy usando ahora para comprobar si me funciona algo es este, tengo una variable movimiento que me indica hacia donde me estoy moviendo, en este caso es el movimiento hacia la derecha tal que :

public void actionPerformed(ActionEvent e) {
int cocientex=(pacman.Getx()/15);

int cocientey=(pacman.Gety()/15);


    int restox=(pacman.Getx() % 15);
    int restoy=(pacman.Gety() % 15);
   
if (pacman.getPausa()==false) {  
    pacman.move();
    
    if (pacman.memuevoderecha()==true) {
        if ((restox==0)&&(restoy==0)) {
            int valormatriz = this.matriznumerica[cocientey][cocientex] ;
             switch (valormatriz) {
                 case -1: //this.posicion = eti[cocientex-1][cocientey].getLocation();
                            this.posicion = eti[cocientex-1][cocientey].getLocation();
                           
                            int x = (int)posicion.getX();pacman.Setx(x);  

                 break;
                 case 1: this.matriznumerica[cocientex][cocientey]=0;
                 break;
                 case 2: this.matriznumerica[cocientex][cocientey]=0;
                 break;
                 case -2: this.matriznumerica[cocientex][cocientey]=0;
                 break;
                 default: 
                 break;
                }
            }

el problema viene al decirle a mi matriz de enteros que si mijugador pasa por una casilla cuyo valor vale 1, esa casilla pasara a tomar valor 0, eso lo hago con la sentencia :

case 1: this.matriznumerica[cocientex][cocientey]=0;
break;

el problema viene cuando luego vuelvo a pintar, el programa me ha cambiado la matriz numerica pero no como si hiciese referencia a matriznumerica[14][22] por ejemplo, si no como si hiciese referencia a [22][14] y entonces en lugar de ponerme a 0 la fila por la que me muevo me pone a 0 una columna de la matriz que es la que corresponde a cambiar [14][22] por [22][14].

he comprobado cocientex y cocientey y si que me valen 14 y 22 por ejemplo, que es por donde se esta moviendo el personaje, pero no se por que cuando intento asignar un valor a la matriz de la forma filascolumnas me lo hace como columnasfilas.

¿Alguien me puede decir que ocurre??¿??

Daredevil
int valormatriz = this.matriznumerica[cocientey][cocientex] ;

Aquí tienes los índices de la matriz intercambiados.

boqueron

Si, se me olvido cambiarlos al escribir el post, eso es de una prueba que hice, y que si que me cambiaba las posición en la matriz como quería.

Ayer pensando, ¿puede ser que haya inicializado mal la matriz de 29*30 de enteros al hacerlo asi? :

int [][] matriznumerica = {
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, //
{-1,2,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,2,-1}, //
{-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1},//
{-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1},//
{-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1},//
{-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1},//
{-1,1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1},//
{-1,1,1,1,1,1,1,-1,-1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,1,1,1,1,1,-1},//
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},////
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-2,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,0,0,0,0,0,0,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//
{-1,-1,-1,-1,-1,-1,1,1,1,1,1,-1,0,0,0,0,0,0,-1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1},//
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//
{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1},//
{-1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1},//
{-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1},//
{-1,1,1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,1,1,-1},//
{-1,-1,-1,1,-1,-1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,-1,-1,-1,1,-1,-1,-1},//
{-1,-1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,-1},//
{-1,1,1,1,1,1,1,-1,-1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,1,1,1,1,1,-1},//
{-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1},//
{-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1},//
{-1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,-1}, //
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//
};

boqueron

Vale tras imprimir todo lo imprimible por pantalla, cuando le digo que me haga esto :

for( int i = 0; i < this.matriznumerica.length; i++){

for( int j = 0; j < this.matriznumerica[0].length; j++){

System.out.print(this.matriznumerica[j]);
}
System.out.println();
}

me saca la matriz perfectamente, asi:

-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
-12111111111111-1-11111111111112-1
-11-1-1-1-11-1-1-1-1-1-11-1-11-1-1-1-1-11-1-1-1-1-11-1
-11-1-1-1-11-1-1-1-1-1-11-1-11-1-1-1-1-11-1-1-1-1-11-1
-11-1-1-1-11-1-1-1-1-1-11-1-11-1-1-1-1-11-1-1-1-1-11-1
-11111111111111111111111111111-1
-11-1-1-1-11-1-1-11-1-1-1-1-1-1-1-11-1-11-1-1-1-1-11-1
-1111111-1-1-11111-1-11111-1-11111111-1
-1-1-1-1-1-11-1-1-1-1-1-11-1-11-1-1-1-1-11-1-1-1-1-1-1-1
-1-1-1-1-1-11-1-1-1-1-1-11-1-11-1-1-1-1-11-1-1-1-1-1-1-1
-1-1-1-1-1-11-1-1-11111111111-1-11-1-1-1-1-1-1-1
-1-1-1-1-1-11-1-1-11-1-1-1-2-1-1-1-11-1-11-1-1-1-1-1-1-1
-1-1-1-1-1-11-1-1-11-1000000-11-1-11-1-1-1-1-1-1-1
-1-1-1-1-1-111111-1000000-11111-1-1-1-1-1-1-1
-1-1-1-1-1-11-1-1-11-1-1-1-1-1-1-1-11-1-11-1-1-1-1-1-1-1
-1-1-1-1-1-11-1-1-11-1-1-1-1-1-1-1-11-1-11-1-1-1-1-1-1-1
-1-1-1-1-1-11-1-1-11111111111-1-11-1-1-1-1-1-1-1
-1-1-1-1-1-11-1-1-11-1-1-1-1-1-1-1-11-1-11-1-1-1-1-1-1-1
-1-1-1-1-1-11-1-1-11-1-1-1-1-1-1-1-11-1-11-1-1-1-1-1-1-1
-11111111111111-1-11111111111111-1
-11-1-1-1-11-1-1-1-1-1-11-1-11-1-1-1-1-11-1-1-1-1-11-1
-1111-1-11-1-1-1-1-1-11-1-11-1-1-1-1-11-1-1-1111-1
-1-1-11-1-111111110000111111-1-1-11-1-1-1
-1-1-11-1-11-1-1-11-1-1-1-1-1-1-1-11-1-11-1-1-11-1-1-1
-1111111-1-1-11111-1-11111-1-11111111-1
-11-1-1-1-1-1-1-1-1-1-1-11-1-11-1-1-1-1-1-1-1-1-1-1-11-1
-11-1-1-1-1-1-1-1-1-1-1-11-1-11-1-1-1-1-1-1-1-1-1-1-11-1
-12111111111111111111111111112-1
-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1

vamos como yo la he inicializado.

Ahora bien si le digo que me imprima por pantalla los valores

System.out.println(this.matriznumerica[13][22]);
System.out.println(this.matriznumerica[14][22]);
System.out.println(this.matriznumerica[15][22]);
System.out.println(this.matriznumerica[16][22]);
System.out.println(this.matriznumerica[17][22]);

que si se sigue la fila y columna deberian valer 0 0 0 0 1

me saca esto :

1
1
1
1
1

yo no se que hacer, por que no es problema de programar, la funcion cuando la recorro automaticamente, no hay problema pero cuando indico una posicion explicita como :

System.out.println(this.matriznumerica[17][22]);

¡¡¡¡¡¡no me hace caso y se va a la posicion = [22][17]!!!!!!

POR FAVOR AYUDA, VOY CON EL TIEMPO JUSTISIMO, YO YA NO SE QUE HACER AGGG

1 respuesta
cabron

Te aconsejo que aprendas a usar un depurador lo antes posible, de hecho debería ser de lo primero que te enseñen a usar pero por algún misterio extraño que no alcanzo a comprender casi nunca se lo explican a los alumnos y hay hasta programadores que llegan ya a trabajar sin saber usarlos.

Kaiserlau

#4 no sera q no ests contando los "-" o los estas contando xD? Me aseguraria de hacerle un leng a la fila en cuestion para estar seguro de eso.

El resto como te han dicho usa un depurador

boqueron

Ya esta solucionado, era yo que se me iba la cabeza a coordenadas espaciales X,Y y al ponerlas en las coordenadas matriciales me hacia un lio.

La cosa es que una coordenada en matriz es matriz[x][y] y para acceder a la posicion de la celda siguiente en la misma fila es matriz[x][y+1] y yo me estaba haciendo un lio con la x e y espaciales, que para moverte por el espacio seria x+1,y.

En cuanto al uso del debugger, lo uso,pero no me servia para nada :D

Usuarios habituales

  • boqueron
  • Kaiserlau
  • cabron
  • Daredevil