En el último tutorial que hizo un simple (muy) IA de los enemigos, a pesar de que el resultado final es sólo el enemigo tras el personaje alrededor. Antes de hacer la IA en mucho más complejo código, quiero diseñar primero. Y a pesar de que este ejemplo es para la IA del enemigo, el código puede también ser utilizado para hacer una IA para nuestro miembro del partido. AI para los enemigos jefe va a ser la misma, la única diferencia está en el valor de los parámetros (o variables).

No va a ser un corto alcance y atacante atacante de largo alcance, ya sea en enemigos y miembro del partido del jugador, también hay va a ser un atacante físico y mágico. Así, en función del tipo, hay varios tipos de combatir caracteres:


  • Cerrar gama atacante física
  • largo alcance atacante física
  • mágico atacante
  • sanador / de apoyo

    Hay un solo atacante mágica porque los magos pueden atacar desde cerca o lejos, y no tendría mucho sentido para una corta distancia atacante mágico, ya que puede ser atacado, mientras que la fundición. Cada atacantes físicos tendrán un radio de ataque que será diferente entre la gama cercana y atacante de largo alcance, los atacantes se moverán de manera que el objetivo está en el rango antes de atacar. Mágica atacante no necesita moverse más cerca del objetivo, ya que el rango de la magia es todo el campo de batalla. Pero la magia tendrán un tiempo de lanzamiento y los magos pueden ser atacado libremente mientras lanzas.

    Entonces, ¿cómo vamos a hacer que la IA? Voy a tratar a la IA del atacante física diferente que la IA del atacante mágico. Este es el proceso de lógica de atacantes físicos:


    1. Si no tiene un objetivo, busque enemigos
    2. Mover más cerca hasta objetivo está en un radio de ataque
    3. Ataca al objetivo
    4. decide si defender o no
    5. Si el enemigo está todavía vivo, de nuevo a ninguna. 3
    6. Si el enemigo está muerto, de nuevo a ninguna. 1

      Ese es el diseño aproximada de la AI, estos todavía necesita más el diseño. Por ejemplo no. 3, al atacar el objetivo será el atacante utilizar el ataque o habilidades normales? Y si yo diseño de la IA esta manera, puedo hacer algún tipo de personalización a la IA (por lo que el jugador puede asignar diferentes AI a los miembros del partido). Voy a hablar de estos 6 puntos a medida que avanzamos.

      Todos los atacantes tienen las variables de instancia llamada radio, si hay algún objetivo dentro de este radio, entonces el atacante buscará objetivos. Para ello todos los participantes de batalla tienen que saber acerca de los miembros del partido de oposición (los miembros del partido jugador saben que están en los miembros del partido enemigo, y los miembros del partido enemigos saben que son miembros jugador del partido). Hay dos maneras de hacer esto, uno es para agregar variable de instancia a ambos miembros del grupo que contiene los miembros del partido de oposición, dos es hacer una nueva familia que puede ser leído por todo el mundo en la batalla. Debido a que ambas partes pueden leer los datos sobre sus enemigos en cualquier momento en la batalla, voy a hacer dos familias que contienen datos sobre el miembro del partido enemigo y el jugador del partido. Esto es más eficiente que la actualización de la variable de instancia, para mí.

      Hay pocos lógicas que podemos utilizar para determinar el objetivo del atacante, como por ejemplo:


      1. El más cercano al atacante
      2. La más lejana al atacante
      3. La que tiene más actuales de HP
      4. El uno con la menor corriente HP
      5. siempre atacan primero magos

        Cada atacante tendrá que recordar su propia lógica de la selección de su destino, y por eso necesitamos una más variable de instancia para almacenar la lógica de selección de destino. Voy a llamar a esta variable de instancia enemySelection y pueda almacenar valores de cadena. Para almacenar la lógica de selección de objetivos, estas lógicas necesitan ser representados en una variable de cadena, así:


        1. enemigo más cercano = “más cercano”
        2. Más al enemigo = “lejana”
        3. Enemigo con la mayor parte de HP actual = “fuerte”
        4. Enemigo con menos corriente HP = “más débil”
        5. magos Ataque primera = “magos”

          esto hará que sea más fácil para nosotros cuando escribimos el código.

          Y a continuación, después decidimos cómo el atacante seleccionar su objetivo, el atacante se moverá más cerca de su objetivo. Sin duda, el atacante tiene que saber cuál es su objetivo, y no cambian su destino hasta que las matrices de destino. Así que tenemos otra variable de instancia, vamos a llamarlo targetName que contiene el nombre del destino. Pero hay un problema: lo que si hay más de un tipo de enemigo en el partido enemigo? ¿Qué pasa si hay tres lobo de color amarillo en una escena de la batalla? ¿Cuál va a los otros objetivos miembro del partido? Para solucionar esto vamos a dar otra variable de instancia en la familia enemigo llamado battleName que contiene cadena como “yellowWolf1”, “yellowWolf2” y así sucesivamente, el valor de la battleName será determinado al comienzo de cada batalla.

          El siguiente paso es atacar, esto puede ser un ataque normal o una habilidad. Cada atacante tendrá un porcentaje diferente entre un ataque normal y habilidad, algunos utilizará ataque normal con más frecuencia que otros utilizan más los ataques basados ​​en habilidades. Es igual que la lógica para la elección de destino, voy a representar a cada una lógica con una cadena y almacenarlo en una variable de instancia, lo llamaremos attackMethod. La lógica para atacar son:


          1. Sólo los ataques normales = “normal”
          2. ataques basados ​​en uso un poco de habilidad = “pocos”
          3. misma probabilidad de ataques normales y de habilidad (50:50) = “equilibrada”
          4. ataques basados ​​Uso más habilidad que los ataques normales = “frontal”

            Cada ataque lógicas tienen su propio porcentaje entre los ataques normales: los ataques basados ​​en habilidades, que determinarán los ataques. Por supuesto, en caso de ataques basados ​​en habilidades, primero comprobar si SP actual del atacante es suficiente para el ataque, o de lo contrario será un ataque normal.

            El último paso consiste en determinar si el atacante va a defender o no. El enemigo no tiene realmente para entrar en la defensa de estado (por lo que el jugador puede atacar fácilmente), pero añadir la defensa de probabilidad para hacer algunos enemigos más difíciles. Será lo mismo que atacar a la lógica, vamos a almacenar la lógica de la defensa en una variable de instancia llamada defenseMethod. Los nombres lógicos defensores son:


            1. No defensa en absoluto = “indefensa”
            2. Podría estar defendiendo = “defensiva”
            3. Más posibilidades de defensa (50:50) = “defensor”
            4. Casi siempre defendiendo = “guardián”

              Si el atacante decide defender, pasará al estado defendiendo durante dos segundos, antes de regresar a la lógica fluye hicimos al principio.

              Bueno, eso es todo! De hecho, me quiero escribir sobre magos AI también, pero éste Post ha sido muy largo, así que voy a escribir la próxima vez.

              Mensajes relacionados
              tutoriales constructo 2 RPG Mago AI

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *