Un primer código para competir (I)

Os queremos ayudar a empezar rápidamente en las competiciones educativas de CodedArena. Y qué mejor forma que enseñaros cómo crear un código de competición básico, que os permitirá empezar y mejorar vuestra programación.

Un primer código para competir (I)

Atención: Contenido visualmente obsoleto. Contiene imágenes y reproducciones animadas de CodedArena 1.0.

La nueva versión del artículo la podéis encontrar aquí.


¡Hola, Comunidad Coded!

Crear un programa desde cero es similar a empezar a escribir un libro. Necesitas saber qué objetivo quieres lograr, tener momentos creativos, conocer las herramientas y el lenguaje adecuado, e ir dando paso a paso, releyendo lo escrito, realizando pequeños cambios, y vuelta a empezar.

Hasta que finalmente tenemos nuestro programa, o nuestro libro.

En este artículo, desde el Equipo de CodedArena queremos ayudaros en los primeros pasos para crear el código básico de un personaje que pueda competir en las competiciones de CodedArena Challenge Tournament.


El objetivo

Esta es una serie de 5 artículos, que nos permitirán:

  1. Detectar al adversario.
  2. Acercarse al adversario.
  3. Seleccionar un hechizo, y empezar la lucha.
  4. Luchar a distancia.
  5. Comprobar la vida del personaje, y curarle o atacar, según la situación.

¡ATENCIÓN!
El código resultante será sencillo, porque el objetivo es sencillo. La intención es entender la estructura del código, y el porqué de cada paso o línea de código,

El objetivo de esta serie de artículo no es tener la mejor de las estrategias de competición. ¡Para eso está vuestra imaginación y creatividad!


¡Vamos allá con el primer artículo!


Detectando al adversario

Como no puede ser de otra forma, el primer paso de todo código de personaje en CodedArena pasa por entender quién hay en la escena de la partida.

Así pues, siempre será importante saber de los personajes que hay en la lista mobs quién es aliado, y quién adversario.

Con la ayuda de una variable, iterando en la lista mobs, y con un condicional y la lógica adecuada, podemos saber quién es nuestro adversario.

Veamos un posible código:

target = None

for mob in mobs:
    if mob.name != self.name:
        target = mob
        break

La estrategia es sencilla: inspeccionamos elemento a elemento de la lista mobs

for mob in mobs:

y si el nombre del personaje (mob) que estamos inspeccionando en ese momento es diferente al nombre de nuestro personaje

    if mob.name != self.name:

es un adversario, y por lo tanto lo almacenamos en la variable target

        target = mob

y salimos del iterador for

        break

porque ya hemos encontrado un adversario, y no queremos continuar buscando más (aunque en la lista mobs haya más personajes).

Esta estrategia no sirve siempre

Esta estrategia sirve cuando nuestro personaje se enfrenta a uno o varios adversarios, y no tiene aliados.

Busca al primer personaje cuyo nombre es diferente al suyo, y ya tiene adversario. ¡Un plan sin fisuras! ¿No?

¿Qué pasaría si nuestro personaje cuenta con la ayuda de un aliado? Sucedería que en la línea

    if mob.name != self.name:

el condicional se cumpliría, y podríamos llegar a seleccionar a nuestro aliado como objetivo de nuestros ataques...

A veces más lógica mejor que menos lógica

Así pues, ¡cuidado con las condiciones lógicas simples! A veces es mejor asegurarnos con una condición lógica extra. Por ejemplo, imaginemos que en una misión Tas es nuestro aliado:

    if mob.name != self.name and mob.name != "Tas":

En este caso, para asegurarnos que el elemento de la lista mobs que estamos inspeccionando es un adversario, deben cumplirse dos condiciones al mismo tiempo: que no tenga el mismo nombre que nuestro personaje, y que su nombre no sea Tas.


¿Qué hemos conseguido?

Ahora ya sabemos quién es nuestro adversario de la lista mobs, ¡que no es poco!

En el próximo artículo veremos cómo aproximarnos a la posición del adversario.

¡Nos vemos en el próximo artículo!