¡Hola, Comunidad Coded!

En el artículo anterior hemos visto cómo detectar a nuestro adversario en CodedArena.

En este segundo artículo vamos a centrarnos en la aproximación al adversario.

Recordad que esta serie consta de los siguiente artículos.

  1. Detectando al adversario.
  2. Acercándonos al adversario.
  3. Seleccionando un hechizo, y empezando la lucha.
  4. Luchando a distancia.
  5. Comprobando la vida de nuestro personaje, y actuar según la situación.

¡Vamos allá con el segundo artículo!


Acercarnos al adversario

Gracias al código que obtuvimos en el anterior artículo, ya sabemos quién es nuestro adversario.

¡Ahora toca acercarse!

Nuestro personaje se aproximará al adversario con la ayuda de un par de variables, dir_x y dir_y. Nos ayudarán a determinar la dirección de desplazamiento (arriba, abajo, izquierda, derecha) en los ejes de coordenadas X e Y, con la ayuda de condicionales y comparaciones.

Vamos a hacer que nuestro personaje se dirija hacia el punto (x, y) donde se encuentra el adversario, aunque se mueva.


¡ATENCIÓN!

Recordemos que CodedArena funciona con un eje de coordenados invertido respecto al eje Y, y que el punto 0,0 se encuentra en la esquina superior izquierda.

Si personaje se mueve hacia la derecha, la coordenada X aumentará, mientras que si va a la izquierda, disminuirá.

Si nuestro personaje baja, su coordenada Y aumentará, no disminuirá, mientras que si sube, la Y disminuirá.


¡Vamos a ver el código!

dir_x = "none"
dir_y = "none"

if self.x > target.x:
    dir_x = "left"
else:
    dir_x = "right"

if self.y > target.y:
    dir_y = "up"
else:
    dir_y = "down"
    
return ["move", dir_x, dir_y]

En primer lugar, hemos inicializado las variables dir_x y dir_y con los valores por defecto del movimiento que indican que no queremos hacer nada (none)

dir_x = "none"
dir_y = "none"

Una vez inicializadas las variable, vamos a establecer en primer lugar la dirección en el eje X.

Miramos si la coordenada X de nuestro personaje es más pequeña que la X del adversario

if self.x > target.x:

Si se cumple esta condición lógica, significa que nuestro personaje se encuentra a la derecha del adversario, y por lo tanto queremos que se mueva hacia la izquierda, estableciendo la cadena left como valor de la variable dir_x:

    dir_x = "left"

Si no

else:

significa que nuestro personaje está a la izquierda, y queremos que vaya hacia la derecha:

    dir_x = "right"

El caso de la dirección en el eje Y, estableceremos el contenido de la variable dir_y. El caso es muy similar, pero debemos tener en cuenta la particularidad de los ejes de coordenadas de CodedArena:

if self.y > target.y:
    dir_y = "up"
else:
    dir_y = "down"

¿Qué código tenemos hasta ahora?

Hasta ahora tenemos el siguiente código:

target = None

for mob in mobs:
    if mob.name != self.name:
        target = mob
        break
        
dir_x = "none"
dir_y = "none"

if self.x > target.x:
    dir_x = "left"
else:
    dir_x = "right"

if self.y > target.y:
    dir_y = "up"
else:
    dir_y = "down"
    
return ["move", dir_x, dir_y]

Probando el código

Veamos qué sucede si ejecutamos en Multijugador > Escaramuchas este código.

Como habéis podido observar, nuestro personaje se acerca hasta el adversario hasta intentar estar prácticamente en las mismas coordenadas.

En definitiva, hemos creado un personaje un poco... pegajoso.


¿Qué hemos conseguido?

Bien, además de saber quién es nuestro adversario dentro de la lista mobs, ahora también hemos aprendido a aproximarnos a su posición.

De acuerdo... una aproximación quizá un poco demasiado cercana... Pero en breves veremos cómo resolver este problema, quedándonos a la distancia del hechizo que queramos.

¡Nos vemos en el próximo artículo, Seleccionando un hechizo!


Si os ha gustado este artículo y queréis saber qué es CodedArena, no dudéis en poneros en contacto con nosotros.

También podéis seguirnos en nuestras redes sociales:

https://twitter.com/codedarena
https://instagram.com/codedarena
https://www.youtube.com/channel/CodedArena
https://facebook.com/codedarena