elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Se me complicó. IA para batalla estilo RPG.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Se me complicó. IA para batalla estilo RPG.  (Leído 2,737 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.199


Superhacker (es broma xD )


Ver Perfil
Se me complicó. IA para batalla estilo RPG.
« en: 5 Julio 2021, 03:02 am »

Este código funciona bien, es una IA que a base de pruebas descubre que quitar 2HP es mejor que quitar solo 1:
Código
  1.   actions for fotograma 1
  2.      // Situación inicial.
  3.      BaseEnHP = 10;
  4.      // Guardar Situación inicial.
  5.      SitID = "S"+BaseEnHP;
  6.      set (SitID+"EnHP", BaseEnHP);
  7.      set (SitID+"Action", "Ninguno");
  8.      Action = 1;
  9.      // Variables de Unsolved situaciones.
  10.      U = 0;
  11.      Us = 0;
  12.   actions for fotograma 2
  13.      // Reset Situación. Aplicación.
  14.      EnHP = BaseEnHP-Action;
  15.      // ¿Sol?
  16.      if (EnHP<=0) {
  17.         // Solución; iniciar mostrar lista.
  18.         List = Action;
  19.         gotoAndPlay (4);
  20.         // Sino ¿la situación está anotada?
  21.      } else if (eval("S"+EnHP+"EnHP") == undefined) {
  22.         // No. Anotarla.
  23.         SitID = "S"+EnHP;
  24.         set (SitID+"EnHP", BaseEnHP);
  25.         set (SitID+"Action", Action);
  26.         Us = Us+1;
  27.         SitID = "U"+Us;
  28.         set (SitID+"EnHP", EnHP);
  29.      }
  30.   actions for fotograma 3
  31.      // La situación existe. ¿Modificar candidato es posible?
  32.      if (Action<2) {
  33.         // Modificación de candidato.
  34.         Action = Action+1;
  35.         gotoAndPlay (2);
  36.      } else if (U<Us) {
  37.         // Usar Unsolveds.
  38.         U = U+1;
  39.         BaseEnHP = eval("U"+U+"EnHP");
  40.         Action = 1;
  41.         gotoAndPlay (2);
  42.      } else {
  43.         // No hay Solución.
  44.         stop ();
  45.      }
  46.   actions for fotograma 5
  47.      SitID = eval("S"+BaseEnHP+"Action");
  48.      BaseEnHP = eval("S"+BaseEnHP+"EnHP");
  49.      if (SitID != "Ninguno") {
  50.         List = SitID+" "+List;
  51.         gotoAndPlay (4);
  52.      } else {
  53.         stop ();
  54.      }

Al enemigo le agregué defensa (1; los ataques del jugador son quitar 1HP o 3):
Código
  1.   actions for fotograma 1
  2.      // Situación inicial.
  3.      BaseEnHP = 10;
  4.      EnDf = 1;
  5.      // Guardar Situación inicial.
  6.      SitID = "S"+BaseEnHP;
  7.      set (SitID+"EnHP", BaseEnHP);
  8.      set (SitID+"Action", "Ninguno");
  9.      Action = 1;
  10.      // Variables de Unsolved situaciones.
  11.      U = 0;
  12.      Us = 0;
  13.   actions for fotograma 2
  14.      // Reset Situación. Aplicación.
  15.      EnHP = BaseEnHP-(Action-EnDf);
  16.      // Si EnHP aumentó, resetear.
  17.      if (BaseEnHP < EnHP) {
  18.            EnHP = BaseEnHP;
  19.      }
  20.      // ¿Sol?
  21.      if (EnHP<=0) {
  22.         // Solución; iniciar mostrar lista.
  23.         List = Action;
  24.         gotoAndPlay (4);
  25.         // Sino ¿la situación está anotada?
  26.      } else if (eval("S"+EnHP+"EnHP") == undefined) {
  27.         // No. Anotarla.
  28.         SitID = "S"+EnHP;
  29.         set (SitID+"EnHP", BaseEnHP);
  30.         set (SitID+"Action", Action);
  31.         Us = Us+1;
  32.         SitID = "U"+Us;
  33.         set (SitID+"EnHP", EnHP);
  34.      }
  35.   actions for fotograma 3
  36.      // La situación existe. ¿Modificar candidato es posible?
  37.      if (Action<2) {
  38.         // Modificación de candidato.
  39.         Action = Action+1;
  40.         gotoAndPlay (2);
  41.      } else if (U<Us) {
  42.         // Usar Unsolveds.
  43.         U = U+1;
  44.         BaseEnHP = eval("U"+U+"EnHP");
  45.         Action = 1;
  46.         gotoAndPlay (2);
  47.      } else {
  48.         // No hay Solución.
  49.         stop ();
  50.      }
  51.   actions for fotograma 5
  52.      SitID = eval("S"+BaseEnHP+"Action");
  53.      BaseEnHP = eval("S"+BaseEnHP+"EnHP");
  54.      if (SitID != "Ninguno") {
  55.         List = SitID+" "+List;
  56.         gotoAndPlay (4);
  57.      } else {
  58.         stop ();
  59.      }

Agregué HP del jugador:
Código
  1.   actions for fotograma 1
  2.      // Situación inicial.
  3.      HP = 10;
  4.      BaseEnHP = 10;
  5.      EnDf = 1;
  6.      // Guardar Situación inicial.
  7.      SitID = "S"+HP+"_"+BaseEnHP;
  8.      set (SitID+"HP", HP);
  9.      set (SitID+"EnHP", BaseEnHP);
  10.      set (SitID+"Action", "Ninguno");
  11.      Action = 1;
  12.      // Variables de Unsolved situaciones.
  13.      U = 0;
  14.      Us = 0;
  15.   actions for fotograma 2
  16.      // Reset Situación. Aplicación.
  17.      EnHP = BaseEnHP-(Action-EnDf);
  18.      // Si EnHP aumentó, resetear.
  19.      if (BaseEnHP<EnHP) {
  20.         EnHP = BaseEnHP;
  21.      }
  22.      // ¿Sol?
  23.      if (EnHP<=0) {
  24.         // Solución; iniciar mostrar lista.
  25.         List = Action;
  26.         gotoAndPlay (4);
  27.         // Sino ¿la situación está anotada?
  28.      } else if (eval("S"+HP+"_"+EnHP+"HP") == undefined) {
  29.         // No. Anotarla.
  30.         SitID = "S"+HP+"_"+EnHP;
  31.         set (SitID+"HP", HP);
  32.         set (SitID+"EnHP", BaseEnHP);
  33.         set (SitID+"Action", Action);
  34.         Us = Us+1;
  35.         SitID = "U"+Us;
  36.         set (SitID+"HP", HP);
  37.         set (SitID+"EnHP", EnHP);
  38.      }
  39.   actions for fotograma 3
  40.      // La situación existe. ¿Modificar candidato es posible?
  41.      if (Action<2) {
  42.         // Modificación de candidato.
  43.         Action = Action+1;
  44.         gotoAndPlay (2);
  45.      } else if (U<Us) {
  46.         // Usar Unsolveds.
  47.         U = U+1;
  48.         HP = eval("U"+U+"HP");
  49.         BaseEnHP = eval("U"+U+"EnHP");
  50.         Action = 1;
  51.         gotoAndPlay (2);
  52.      } else {
  53.         // No hay Solución.
  54.         stop ();
  55.      }
  56.   actions for fotograma 5
  57.      SitID = eval("S"+HP+"_"+BaseEnHP+"Action");
  58.      HP = eval("S"+HP+"_"+BaseEnHP+"HP");
  59.      BaseEnHP = eval("S"+HP+"_"+BaseEnHP+"EnHP");
  60.      if (SitID != "Ninguno") {
  61.         List = SitID+" "+List;
  62.         gotoAndPlay (4);
  63.      } else {
  64.         stop ();
  65.      }
  66.  

---------------------------------------------------------------------------------------------------------

Ahora es cuando se me complicó: El enemigo puede golpear; no funciona (la IA) si él tiene defensa 2 o más.
Código
  1. Escena 1
  2.   actions for fotograma 1
  3.      // Situación inicial.
  4.      BaseHP = 10;
  5.      BaseEnHP = 10;
  6.      EnDf = 2;
  7.      // Guardar Situación inicial.
  8.      SitID = "S"+BaseHP+"_"+BaseEnHP;
  9.      set (SitID+"HP", BaseHP);
  10.      set (SitID+"EnHP", BaseEnHP);
  11.      set (SitID+"Action", "Ninguno");
  12.      Action = 1;
  13.      // Variables de Unsolved situaciones.
  14.      U = 0;
  15.      Us = 0;
  16.   actions for fotograma 2
  17.      // Reset Situación.
  18.      HP = BaseHP;
  19.      EnHP = BaseEnHP;
  20.      trace ("La sit es: "+HP+"_"+EnHP);
  21.      // Aplicación.
  22.      trace ("Player attacks!");
  23.      EnHP = EnHP-(Action-EnDf);
  24.      // Si EnHP aumentó, resetearlo.
  25.      if (BaseEnHP<EnHP) {
  26.         trace ("EnHP aumentó, se resetea: "+BaseEnHP);
  27.         EnHP = BaseEnHP;
  28.      } else {
  29.         trace ("EnHP reducido a: "+EnHP);
  30.      }
  31.      // Efecto simultáneo.
  32.      trace ("Enemy attacks!");
  33.      HP = HP-1;
  34.      // Si HP quedó negativo, pasa a 0.
  35.      if (HP<0) {
  36.         trace ("HP quedó negativo, pasa a 0");
  37.         HP = 0;
  38.      } else {
  39.         trace ("HP reducido a: "+HP);
  40.      }
  41.      // ¿Sol?
  42.      if (0<HP) {
  43.         if (EnHP<=0) {
  44.            // Solución; iniciar mostrar lista.
  45.            List = Action;
  46.            gotoAndPlay (4);
  47.            // Sino ¿la situación está anotada?
  48.         } else if (eval("S"+HP+"_"+EnHP+"HP") == undefined) {
  49.            // No. Anotarla.
  50.            SitID = "S"+HP+"_"+EnHP;
  51.            set (SitID+"HP", BaseHP);
  52.            set (SitID+"EnHP", BaseEnHP);
  53.            set (SitID+"Action", Action);
  54.            trace ("Nueva sit anotada: "+SitID);
  55.            Us = Us+1;
  56.            SitID = "U"+Us;
  57.            set (SitID+"HP", HP);
  58.            set (SitID+"EnHP", EnHP);
  59.         }
  60.         // Sino ¿la situación está anotada?
  61.      } else if (eval("S"+HP+"_"+EnHP+"HP") == undefined) {
  62.         // No. Anotarla.
  63.         SitID = "S"+HP+"_"+EnHP;
  64.         set (SitID+"HP", BaseHP);
  65.         set (SitID+"EnHP", BaseEnHP);
  66.         set (SitID+"Action", Action);
  67.         trace ("Nueva sit anotada: "+SitID);
  68.         Us = Us+1;
  69.         SitID = "U"+Us;
  70.         set (SitID+"HP", HP);
  71.         set (SitID+"EnHP", EnHP);
  72.      }
  73.   actions for fotograma 3
  74.      // La situación existe. ¿Modificar candidato es posible?
  75.      if (Action<3) {
  76.         // Modificación de candidato.
  77.         Action = Action+2;
  78.         gotoAndPlay (2);
  79.      } else if (U<Us) {
  80.         // Usar Unsolveds.
  81.         U = U+1;
  82.         BaseHP = eval("U"+U+"HP");
  83.         BaseEnHP = eval("U"+U+"EnHP");
  84.         Action = 1;
  85.         gotoAndPlay (2);
  86.      } else {
  87.         // No hay Solución.
  88.         stop ();
  89.      }
  90.   actions for fotograma 5
  91.      SitID = eval("S"+BaseHP+"_"+BaseEnHP+"Action");
  92.      Base2HP = BaseHP;
  93.      BaseHP = eval("S"+BaseHP+"_"+BaseEnHP+"HP");
  94.      BaseEnHP = eval("S"+Base2HP+"_"+BaseEnHP+"EnHP");
  95.      if (SitID != "Ninguno") {
  96.         List = SitID+" "+List;
  97.         gotoAndPlay (4);
  98.      } else {
  99.         stop ();
  100.      }
  101.  

¿Cómo debería ser el código? Luego de varios segundos me genera situaciones donde el HP enemigo es negativo.

Gracias.


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.199


Superhacker (es broma xD )


Ver Perfil
Re: Se me complicó. IA para batalla estilo RPG.
« Respuesta #1 en: 5 Julio 2021, 08:12 am »

Solucionado así:
Código
  1. Escena 1
  2.   actions for fotograma 1
  3.      // Situación inicial.
  4.      BaseHP = 10;
  5.      BaseEnHP = 10;
  6.      EnDf = 2;
  7.      // Guardar Situación inicial.
  8.      SitID = "S"+BaseHP+"_"+BaseEnHP;
  9.      set (SitID+"HP", BaseHP);
  10.      set (SitID+"EnHP", BaseEnHP);
  11.      set (SitID+"Action", "Ninguno");
  12.      Action = 1;
  13.      // Variables de Unsolved situaciones.
  14.      U = 0;
  15.      Us = 0;
  16.   actions for fotograma 2
  17.      // Reset Situación.
  18.      HP = BaseHP;
  19.      EnHP = BaseEnHP;
  20.      trace ("La sit es: "+HP+"_"+EnHP);
  21.      // Aplicación.
  22.      trace ("Player attacks with "+Action+"!");
  23.      EnHP = EnHP-(Action-EnDf);
  24.      // Si EnHP aumentó, resetearlo.
  25.      if (BaseEnHP<EnHP) {
  26.         trace ("EnHP aumentó, se resetea: "+BaseEnHP);
  27.         EnHP = BaseEnHP;
  28.      } else {
  29.         trace ("EnHP reducido a: "+EnHP);
  30.      }
  31.      // Efecto simultáneo.
  32.      trace ("Enemy attacks!");
  33.      HP = HP-1;
  34.      // Si HP quedó negativo, pasa a 0.
  35.      if (HP<0) {
  36.         trace ("HP quedó negativo, pasa a 0");
  37.         HP = 0;
  38.      } else {
  39.         trace ("HP reducido a: "+HP);
  40.      }
  41.      // ¿Sol?
  42.      if (0<HP) {
  43.         if (EnHP<=0) {
  44.            // Solución; iniciar mostrar lista.
  45.            List = Action;
  46.            gotoAndPlay (4);
  47.            // Sino, ambos están OK.
  48.            // ¿La situación está anotada?
  49.         } else if (eval("S"+HP+"_"+EnHP+"HP") == undefined) {
  50.            // No. Anotarla.
  51.            SitID = "S"+HP+"_"+EnHP;
  52.            set (SitID+"HP", BaseHP);
  53.            set (SitID+"EnHP", BaseEnHP);
  54.            set (SitID+"Action", Action);
  55.            trace ("Nueva sit anotada: "+SitID);
  56.            Us = Us+1;
  57.            SitID = "U"+Us;
  58.            set (SitID+"HP", HP);
  59.            set (SitID+"EnHP", EnHP);
  60.         }
  61.         // Sino, el enemigo ganó.
  62.      }
  63.   actions for fotograma 3
  64.      // La situación existe o el jugador perdió.
  65.      // ¿Modificar candidato es posible?
  66.      if (Action<3) {
  67.         // Modificación de candidato.
  68.         Action = Action+2;
  69.         gotoAndPlay (2);
  70.      } else if (U<Us) {
  71.         // Usar Unsolveds.
  72.         U = U+1;
  73.         BaseHP = eval("U"+U+"HP");
  74.         BaseEnHP = eval("U"+U+"EnHP");
  75.         Action = 1;
  76.         gotoAndPlay (2);
  77.      } else {
  78.         // No hay Solución.
  79.         List = "No hay sol";
  80.         stop ();
  81.      }
  82.   actions for fotograma 5
  83.      SitID = eval("S"+BaseHP+"_"+BaseEnHP+"Action");
  84.      Base2HP = BaseHP;
  85.      BaseHP = eval("S"+BaseHP+"_"+BaseEnHP+"HP");
  86.      BaseEnHP = eval("S"+Base2HP+"_"+BaseEnHP+"EnHP");
  87.      if (SitID != "Ninguno") {
  88.         List = SitID+" "+List;
  89.         gotoAndPlay (4);
  90.      } else {
  91.         stop ();
  92.      }
  93.  

Básicamente le puse más casos, como que quedan doble KO. Mucho más no sé explicar porque fue hace un rato y además me cuesta entenderlo.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines