Logo Studenta

Capitulo_4 (1)

¡Este material tiene más páginas!

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