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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ¿Cómo logro que este programa genere un grafo de lo que hace?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo logro que este programa genere un grafo de lo que hace?  (Leído 4,681 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.460


Hackentifiko!


Ver Perfil
¿Cómo logro que este programa genere un grafo de lo que hace?
« en: 2 Octubre 2023, 07:06 am »

Es sobre que un enemigo (más bien una puerta o algo pasivo) tiene cierta cantidad de puntos de vida (o resistencia, en este caso 11) y el programa debe imaginar cómo reducirlos a 0 (o menos) lo más rápido posible, disponiendo de 2 acciones posibles: Hacerle 1 punto de daño o 2. La respuesta es bastante obvia, pero no cómo hacer el programa, ni cómo explicarlo bien, por eso lo hago. Tras realizar una acción, si produjo una situación que no anotó, la anota. Cuando no tiene más acciones disponibles, carga una situación anotada que no haya analizado, vuelve a realizar las acciones, y esto se repite hasta que se logre el objetivo (vencer al enemigo) o ya no queden situaciones anotadas sin analizar.

Otro modo de verlo es que es una serie de experimentos virtuales para resolver una duda sencilla.

Código
  1. Escena 1
  2.   actions for fotograma 1
  3.      Respuesta = "Vencer al enemigo mediante acciones, el enemigo tiene 11 HP. Se recomienda la serie... ";
  4.      // Situación inicial:
  5.      // HP inicial del enemigo:
  6.      EnBaseHP = 11;
  7.      trace ("EnBaseHP: "+EnBaseHP);
  8.      // Guardar situación y cómo se produjo:
  9.      // Esta variable es el principio del nombre de los datos (en este caso S11):
  10.      SitID = "S"+EnBaseHP;
  11.      trace ("SitID: "+SitID);
  12.      // Esta variable marca qué acción se realizó en la situación anterior (en este caso ninguna):
  13.      set (SitID+"ActionAnterior", "Ninguna");
  14.      trace (SitID+"ActionAnterior: "+eval(SitID+"ActionAnterior"));
  15.      // En este caso la variable es S11Action="Ninguna".
  16.      // Acción que será usada 1ero:
  17.      Action = 1;
  18.      trace ("Action: "+Action);
  19.      // Variables sobre situaciones anotadas:
  20.      // Total de situaciones anotadas:
  21.      As = 0;
  22.      trace ("Situaciones anotadas: "+As);
  23.      // Situación anotada que será investigada 1ero:
  24.      A = 0;
  25.      trace ("Situación anotada a investigar cuando se comience a investigar las anotadas: "+A);
  26.   actions for fotograma 2
  27.      // Reset de la situación. Aplicación de la acción:
  28.      EnHP = EnBaseHP-Action;
  29.      trace ("Reset de la situación, aplicación de la acción, la situación ahora es:");
  30.      trace ("EnHP: "+EnHP);
  31.      // ¿Se logró el objetivo?
  32.      if (EnHP<=0) {
  33.         // Sí, iniciar muestra de serie de acciones que la causan:
  34.         Serie = Action;
  35.         trace ("Solución hallada, iniciando proceso para mostrar respuesta.");
  36.         gotoAndPlay (5);
  37.      } else {
  38.         // No se logró el objetivo.
  39.         trace ("No se logró el objetivo.");
  40.         // ¿La situación producida está anotada?
  41.         if (eval("S"+EnHP+"ActionAnterior") == undefined) {
  42.            trace ("La situación producida no está anotada.");
  43.            // La situación no está anotada, anotarla y cómo se logró:
  44.            SitID = "S"+EnHP;
  45.            set (SitID+"EnHPAnterior", EnBaseHP);
  46.            set (SitID+"ActionAnterior", Action);
  47.            trace ("Nueva situación anotada: "+SitID);
  48.            trace ("Su antecedente fue ("+SitID+"EnHPAnterior): "+EnBaseHP);
  49.            trace ("y la acción fue ("+SitID+"ActionAnterior): "+Action);
  50.            // También se agrega como situación a investigar y se anota en qué consiste:
  51.            As = As+1;
  52.            SitID = "A"+As;
  53.            set (SitID+"EnHP", EnHP);
  54.            trace ("Situaciones anotadas: "+As);
  55.            trace ("La última consiste en (EnHP): "+eval(SitID+"EnHP"));
  56.         } else {
  57.            trace ("La situación producida ya está anotada.");
  58.         }
  59.      }
  60.   actions for fotograma 3
  61.      // La situación existe. ¿Modificar acción es posible?
  62.      if (Action<2) {
  63.         // Sí, modificarla:
  64.         trace ("Es posible modificar acción.");
  65.         Action = Action+1;
  66.         trace ("Action fue modificada, es: "+Action);
  67.         gotoAndPlay (2);
  68.      } else {
  69.         // No es posible modificar la acción.
  70.         trace ("No es posible modificar la acción.");
  71.         if (A<As) {
  72.            // Aún hay situaciones anotadas sin investigar, investigar una (probablemente lo ideal sería investigar la más diferente a las investigadas, pero me es difícil programar eso):
  73.            trace ("Aún hay situaciones anotadas sin investigar.");
  74.            A = A+1;
  75.            EnBaseHP = eval("A"+A+"EnHP");
  76.            trace ("Se investigará la situación anotada nro: "+A);
  77.            trace ("Consiste en EnBaseHP: "+EnBaseHP);
  78.            Action = 1;
  79.            trace ("Reset de la acción a usar, es: "+Action);
  80.            gotoAndPlay (2);
  81.         } else {
  82.            // No hay situaciones anotadas sin investigar.
  83.            Respuesta = "No es posible lograr el objetivo.";
  84.            trace ("No hay situaciones anotadas sin investigar ni es posible lograr el objetivo.");
  85.            stop ();
  86.         }
  87.      }
  88.   actions for fotograma 5
  89.      // Obtener acción anterior:
  90.      ActionAnterior = eval("S"+EnBaseHP+"ActionAnterior");
  91.      trace ("La acción anterior fue: "+ActionAnterior);
  92.      // ¿Hubo?
  93.      if (ActionAnterior != "Ninguna") {
  94.         // Sí, agregarla en la lista:
  95.         Serie = ActionAnterior+" "+Serie;
  96.         trace ("Acción agregada en la serie.");
  97.         // Averiguar cual fue la situación anterior:
  98.         EnBaseHP = eval("S"+EnBaseHP+"EnHPAnterior");
  99.         trace ("Se realizó en la situación: S"+EnBaseHP);
  100.         // Repetir este frame.
  101.         gotoAndPlay (4);
  102.      } else {
  103.         // No hubo una acción anterior, mostrar la serie:
  104.         Respuesta = Respuesta+Serie;
  105.         stop ();
  106.      }
  107.  

Salida:
Citar
EnBaseHP: 11
SitID: S11
S11ActionAnterior: Ninguna
Action: 1
Situaciones anotadas: 0
Situación anotada a investigar cuando se comience a investigar las anotadas: 0
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 10
No se logró el objetivo.
La situación producida no está anotada.
Nueva situación anotada: S10
Su antecedente fue (S10EnHPAnterior): 11
y la acción fue (S10ActionAnterior): 1
Situaciones anotadas: 1
La última consiste en (EnHP): 10
Es posible modificar acción.
Action fue modificada, es: 2
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 9
No se logró el objetivo.
La situación producida no está anotada.
Nueva situación anotada: S9
Su antecedente fue (S9EnHPAnterior): 11
y la acción fue (S9ActionAnterior): 2
Situaciones anotadas: 2
La última consiste en (EnHP): 9
No es posible modificar la acción.
Aún hay situaciones anotadas sin investigar.
Se investigará la situación anotada nro: 1
Consiste en EnBaseHP: 10
Reset de la acción a usar, es: 1
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 9
No se logró el objetivo.
La situación producida ya está anotada.
Es posible modificar acción.
Action fue modificada, es: 2
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 8
No se logró el objetivo.
La situación producida no está anotada.
Nueva situación anotada: S8
Su antecedente fue (S8EnHPAnterior): 10
y la acción fue (S8ActionAnterior): 2
Situaciones anotadas: 3
La última consiste en (EnHP): 8
No es posible modificar la acción.
Aún hay situaciones anotadas sin investigar.
Se investigará la situación anotada nro: 2
Consiste en EnBaseHP: 9
Reset de la acción a usar, es: 1
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 8
No se logró el objetivo.
La situación producida ya está anotada.
Es posible modificar acción.
Action fue modificada, es: 2
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 7
No se logró el objetivo.
La situación producida no está anotada.
Nueva situación anotada: S7
Su antecedente fue (S7EnHPAnterior): 9
y la acción fue (S7ActionAnterior): 2
Situaciones anotadas: 4
La última consiste en (EnHP): 7
No es posible modificar la acción.
Aún hay situaciones anotadas sin investigar.
Se investigará la situación anotada nro: 3
Consiste en EnBaseHP: 8
Reset de la acción a usar, es: 1
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 7
No se logró el objetivo.
La situación producida ya está anotada.
Es posible modificar acción.
Action fue modificada, es: 2
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 6
No se logró el objetivo.
La situación producida no está anotada.
Nueva situación anotada: S6
Su antecedente fue (S6EnHPAnterior): 8
y la acción fue (S6ActionAnterior): 2
Situaciones anotadas: 5
La última consiste en (EnHP): 6
No es posible modificar la acción.
Aún hay situaciones anotadas sin investigar.
Se investigará la situación anotada nro: 4
Consiste en EnBaseHP: 7
Reset de la acción a usar, es: 1
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 6
No se logró el objetivo.
La situación producida ya está anotada.
Es posible modificar acción.
Action fue modificada, es: 2
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 5
No se logró el objetivo.
La situación producida no está anotada.
Nueva situación anotada: S5
Su antecedente fue (S5EnHPAnterior): 7
y la acción fue (S5ActionAnterior): 2
Situaciones anotadas: 6
La última consiste en (EnHP): 5
No es posible modificar la acción.
Aún hay situaciones anotadas sin investigar.
Se investigará la situación anotada nro: 5
Consiste en EnBaseHP: 6
Reset de la acción a usar, es: 1
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 5
No se logró el objetivo.
La situación producida ya está anotada.
Es posible modificar acción.
Action fue modificada, es: 2
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 4
No se logró el objetivo.
La situación producida no está anotada.
Nueva situación anotada: S4
Su antecedente fue (S4EnHPAnterior): 6
y la acción fue (S4ActionAnterior): 2
Situaciones anotadas: 7
La última consiste en (EnHP): 4
No es posible modificar la acción.
Aún hay situaciones anotadas sin investigar.
Se investigará la situación anotada nro: 6
Consiste en EnBaseHP: 5
Reset de la acción a usar, es: 1
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 4
No se logró el objetivo.
La situación producida ya está anotada.
Es posible modificar acción.
Action fue modificada, es: 2
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 3
No se logró el objetivo.
La situación producida no está anotada.
Nueva situación anotada: S3
Su antecedente fue (S3EnHPAnterior): 5
y la acción fue (S3ActionAnterior): 2
Situaciones anotadas: 8
La última consiste en (EnHP): 3
No es posible modificar la acción.
Aún hay situaciones anotadas sin investigar.
Se investigará la situación anotada nro: 7
Consiste en EnBaseHP: 4
Reset de la acción a usar, es: 1
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 3
No se logró el objetivo.
La situación producida ya está anotada.
Es posible modificar acción.
Action fue modificada, es: 2
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 2
No se logró el objetivo.
La situación producida no está anotada.
Nueva situación anotada: S2
Su antecedente fue (S2EnHPAnterior): 4
y la acción fue (S2ActionAnterior): 2
Situaciones anotadas: 9
La última consiste en (EnHP): 2
No es posible modificar la acción.
Aún hay situaciones anotadas sin investigar.
Se investigará la situación anotada nro: 8
Consiste en EnBaseHP: 3
Reset de la acción a usar, es: 1
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 2
No se logró el objetivo.
La situación producida ya está anotada.
Es posible modificar acción.
Action fue modificada, es: 2
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 1
No se logró el objetivo.
La situación producida no está anotada.
Nueva situación anotada: S1
Su antecedente fue (S1EnHPAnterior): 3
y la acción fue (S1ActionAnterior): 2
Situaciones anotadas: 10
La última consiste en (EnHP): 1
No es posible modificar la acción.
Aún hay situaciones anotadas sin investigar.
Se investigará la situación anotada nro: 9
Consiste en EnBaseHP: 2
Reset de la acción a usar, es: 1
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 1
No se logró el objetivo.
La situación producida ya está anotada.
Es posible modificar acción.
Action fue modificada, es: 2
Reset de la situación, aplicación de la acción, la situación ahora es:
EnHP: 0
Solución hallada, iniciando proceso para mostrar respuesta.
La acción anterior fue: 2
Acción agregada en la serie.
Se realizó en la situación: S4
La acción anterior fue: 2
Acción agregada en la serie.
Se realizó en la situación: S6
La acción anterior fue: 2
Acción agregada en la serie.
Se realizó en la situación: S8
La acción anterior fue: 2
Acción agregada en la serie.
Se realizó en la situación: S10
La acción anterior fue: 1
Acción agregada en la serie.
Se realizó en la situación: S11
La acción anterior fue: Ninguna
En la pantalla se muestra: Vencer al enemigo mediante acciones, el enemigo tiene 11 HP. Se recomienda la serie... 1 2 2 2 2 2

Quiero que a medida que el programa avanza, vaya generando un grafo tal que cada vértice represente una situación a la que llega, y las aristas desde dónde llega y a dónde llega.
Inicialmente es un vértice "11" con aristas a los vértices "10" y "9".
Luego al "10" se le agregan aristas a "9" y "8".
Luego al "9" se le agregan aristas a "8" y "7".
Y así sucesivamente hasta "0".

Pero a ver, si yo en vez de asignar 11 al HP del enemigo asignara 24, quiero que el grafo se adapte a eso, y si asignara más acciones, que pudieran llevar a situaciones anteriores incluso (si el enemigo pudiera recuperarse sin gastar algo).

Uno de los grandes problemas que le veo a esto es que no va a entrar todo en la pantalla o sería muy pequeño, si los números son muy altos. Nunca programé que una imagen se pueda scrollear, creo que no es difícil pero nunca me gustó la idea de que cosas "outscreen" estuvieran cargadas...

Bue, agradezco ¡deas, también en cuanto a la claridad del código ¿hay algo que les parezca confuso, cómo lo harían uds?


« Última modificación: 2 Octubre 2023, 07:25 am por Tachikomaia » 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