Por Nacho Cabanes
Vamos a ver cómo se puede conseguir...
Podemos crear una función "EsPosibleMover", que reciba las coordenadas límite de un rectángulo (el que ocuparía el personaje después de moverse, por ejemplo), y nos devuelva "true" si es una posición válida, o "false" cuando no lo sea (porque se solape con alguna casilla del fondo):
public bool EsPosibleMover(int x, int y, int xmax, int ymax) { // Compruebo si choca con alguna casilla del fondo for (int fila = 0; fila < altoMapa; fila++) for (int colum = 0; colum < anchoMapa; colum++) { int posX = colum * anchoTile + margenIzqdo; int posY = fila * altoTile + margenSuperior; // Si no es espacio blanco if ((datosNivel[fila][colum] != ' ') // Y se solapa con la posic a la que queremos mover && (posX+anchoTile > x) && (posY+altoTile > y) && (xmax> posX) && (ymax > posY)) { return false; } } return true; }
Cuando se le pida mover a la derecha (o a cualquier otra dirección), comprobará primero si terminaría en una posición del mapa que realmente sea pisable:
public void MoverDerecha() { if (miPartida.GetMapa().EsPosibleMover(x + incrX, y, x + ancho + incrX, y + alto)) x += incrX; }
Ésta es la versión 0.04, que puedes descargar en la página del proyecto en Google Code.
Siguiente entrega...