Maze2, construyendo paredes con MobileProcessing

Como una continuación del primer ejemplo en MobileProcessing ahora le voy a agregar paredes al laberinto y una opción de teletransportar para cuando haya necesidad de sacar al caballero azul de un cuarto cerrado.

Hice algunos cambios que modifican el enfoque que tenía inicialmente el diseño. Antes cada Sprite conocía su posición (x, y) para ser dibujado en la pantalla del móvil, ahora el mundo (World) es en realidad una matriz (maze) de Sprites así que a ellos les interesa conocer su (fila, columna).

Agregué cuatro constantes (up, down, left, right) al Player para referenciar a cualquiera de los movimientos que este puede realizar.

Creé además dos nuevos Sprites: el espacio vacío (EmptySpace) que rellena el éter vacío y la pared (Wall) que simula un muro intraspasable.

En este órden de ideas mejoré el método isValidPlayerMove() para que entendiera correctamente las (filas, columnas) y se hiciera cargo de hacer respetar los muros. El método buildMaze() crea al mundo al azar haciendo uso de la función random(). El método movePlayer() y la función keyPressed() también fueron modificados para actualizarse con estos cambios y para incluír el uso de las constantes de dirección de la clase Player.

El movimiento del Player se convirtió entonces en elegir una nueva posición válida, en poner al Player en la nueva posición y poner un EmptySpace en la anterior, para esto se deben actualizar tanto los diferentes Sprites como la matríz del laberitno (maze) para facilitar esto se agregó el método locateSprite().
El método locatePlayer() ubica al Player en una ubicación al azar verificando que se encuentre vacía y el método teleport() realiza hasta diez intentos de este proceso. Teleport es llamado también cuando se presiona la tecla FIRE del móvil.

La función draw() dibuja a todos los Sprites de manera indistinta ya que cada uno de ellos sabe de que color es y en que posición se encuentra. Aún no estoy seguro que es mas conveniente en MP si incluír todo el código de dibujo en esta función o de incluirlo en las clases (cada Sprite se dibuja el mismo) y llamarlo desde el draw().

Enlace: Maze2.pde.

Leave a Reply

Your email address will not be published. Required fields are marked *