Vista previa del material en texto
Capítulo 4.-Interacción y movimientos Nuevas entidades, su interacción y cómo dotarlas de movimientos Material revisado y preparado para el Primer Semestre del 2022 Parte 1 Interacción ● Añadir nuevas entidades al mundo virtual. ● Estudiar e implementar la interacción entre las diferentes entidades, en función del tipo de celda al que nos vayamos a mover. Aquí vemos tres opciones: ○ si es una pared entonces la entidad no podrá ocupar esa celda; ○ si es amor, representado por una celda rosa cambiará su estado hará que la entidad cambie su estado y; ○ si es un adversario entonces terminará. ¿Qué aprendemos? Pasos a seguir 1.-Añadir nuevas constantes a la interface Constantes para informar al sistema de que habrá nuevos tipos de Celda habrá (OBSTÁCULO, CAMINO, AMOR) y extender la clase Celda para que se tenga en cuenta el pintado en función de los nuevos tipos. 2.- Implementar la clase Adversario con pintado diferente a la Entidad. 3.- Declarar un nuevo adversario en MundoVirtual, instanciarlo y pintarlo. Además cambiar el estado de las celdas que queramos que cambien algún tipo distinto de CAMINO 4.- Implementar la interacción de la entidad: ahora no solo debemos controlar que no estemos fuera de los límites, también que no haya pared. Una vez que nos podemos mover consultaremos la situación en la que estamos. Puede ser que seamos capturados por un adversario o topar con una celda AMOR. Paso 1 Extender el pintado en la clase Celda en función del tipo de Celda que queramos pintar. La implementación se puede realizar con un simple switch y cambiando los colores de fondo a la hora de ir pintado. Digamos que actuamos asi porque estas celdas forman parte del fondo. obstáculos celda rosa (amor) adversario Nuevas constantes y extensión de clase Celda En función del tipo pintaré un celda u otra. Aquí tenemos obstáculo (celda negra), amor (celda rosa) y camino (celda habitual) Paso 2 Si la entidad tendrá movimiento entonces podemos crear una clase por separado e implementando un método de pintado dentro de ella. Digamos que actuamos así porque estas no forman parte del fondo, se moverán, es decir, las colocamos en el mundo virtual. Adversario.java Adversario contará con la posición y un nombre (#1, #2, #3) Paso 3 En el mundo virtual definimos las entidades. Si forman parte del fondo basta con cambiar el tipo Si van a moverse por el mundo virtual se crea el objeto Mundo Virtual con las nuevas entidades cambiamos el tipo de las celdas indexadas por esos valores: la (2.2) y la (2,3) serán pared, la (10,8) será celda AMOR creamos un nuevo adversario que tendrá nombre #1 y la ponemos en la posición de la celda (5,5) MundoVirtual.java Paso 4 Extender el pintado en la clase Celda en función del tipo de Celda que queramos pintar. La implementación se puede realizar con un simple switch y cambiando los colores de fondo a la hora de ir pintado. Fuera de los límites? Es pared? Solo me muevo si puedo (dentro de límites y no es pared) Si es pared cambio el estado de la Entidad Paso 5 Necesitamos activar los eventos de teclado y voy chequeando posibles interacciones en función de los tipos de celda que me vaya encontrando Eventos de teclado Parte 2 Movimientos ¿Qué aprenderemos? ● Aprenderemos a asociar una Inteligencia a la Entidad. ● La inteligencia será un proceso que es capaz de decidir a dónde ir. Inicialmente este proceso será muy sencillo y hará que la entidad se mueva de forma aleatoria. ● Aprenderemos a implementar una Inteligencia Aleatoria. ● Como se pueden ejecutar las inteligencias que controlan a las entidades. Pasos 1. Hacemos que Entidad herede de TimerTask y tendremos que sobreescribir el método run() (nuestra inteligencia) ya que el código que incluyamos en este método se ejecuta cada cierto tiempo y será el encargado de tomar las decisiones respecto al movimiento. 2. Las decisiones en nuestra caso son aleatorias. Entonces el comportamiento consiste en: preguntar si llegué a la celda destino (AMOR), si fuera que sí, pararé; si fuera que no, muevo y repinto. 3. Por último requerimos de un objeto que pueda lanzar la inteligencia (los TimerTask). El encargado de hacer esto será el objeto Timer. PASO 1.- ASOCIAR INTELIGENCIA A ENTIDAD , HEREDAMOS DE TIMERTASK Un TimerTask es un hilo de ejecución (proceso ligero o hebra). Como Entidad hereda adquiere toda la funcionalidad de la misma. P ASO 2 : CREAR LA INTELIGENCIA; IMPLEMENTACIÓN DE LA TOMA DE DECISIONES EN EL MÉTODO RUN Cada tarea cuenta con un método run( ) que se ejecutará cada cierto tiempo. El método run ( ) implementa el comportamiento de la entidad. En este caso, si no llega al final realiza un movimiento aleatorio y actualiza el mundo virtual. En caso contrario termina 1) El método fin comprueba que la entidad no ha llegado a la celda AMOR 2) El método realizar movimiento realiza un movimiento aleatorio 3) El método actualizar Mundo VIrtual lo que hace es re-pintar el Canvas PASO 3.- IMPLEMENTACIÓN DE LA TOMA DE DECISIONES EN EL MÉTODO RUN El objeto Timer permite lanzar TimerTask, por tanto, permite lanzar nuestra Inteligencia Lanzar significa que el código en el método run() de la clase TimerTask o las que hereden de ella se ejecutará en algún momento ¿Cuándo? Se especifica aquí; tiempo de espera entre cada repetición 1000 ms = 1 segundo Efecto Timer y TimerTask Ejecución del programa 1 segundo 1 segundo 1 segundo fin fin fin mover derecha mover derecha mover derecha fin