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??¿??