(Resuelto): Programa con varios fallos a reparar.

Iniciado por Tachikomaia, 18 Mayo 2020, 16:52 PM

0 Miembros y 1 Visitante están viendo este tema.

Tachikomaia

Tengo un programa que funciona pero crea y carga archivos que debe comprobar que se hizo, con lo cual agregar al programa una variable por ejemplo requiere hacer muchas modificaciones en distintas partes, que son como 30, así que decidí empezar a usar variables en vez de archivos. El programa que uso tiene las partes separadas como si fuesen distintos archivos de texto, así que modificar cosas de varias es un trabajo chino.

El resultado por ahora es este:
Escena 1
  actions for fotograma 1
     // SitIni.
     Base.S = 5;
     // Guardar SitIni.
     SitID = "S"+Base.S;
     Depth = 1;
     attachMovie("Circ", SitID, Depth);
     set (SitID+".S", Base.S);
     set (SitID+".C", "Ninguno");
     // Cand normal.
     C = -1;
     // Vars de Unsolved sits.
     U = 0;
     Us = 0;
  actions for fotograma 2
     // Reset Sit. Aplic.
     S = Base.S+C;
     // ¿Sol?
     if (10<S) {
        // Sol; begin to show list
        List = C;
        gotoAndPlay (4);
        // Sino ¿la sit está anotada?
     } else if (eval("S"+S+".S") == null) {
        // No. Anotarla.
        SitID = "S"+S;
        Depth = Depth+1;
        attachMovie("Circ", SitID, Depth);
        set (SitID+".S", Base.S);
        set (SitID+".C", C);
        Us = Us+1;
        SitID = "U"+Us;
        Depth = Depth+1;
        attachMovie("Circ", SitID, Depth);
        set (SitID+".S", S);
     }
  actions for fotograma 3
     // ¿Candmod is pos?
     if (C<1) {
        // Candmod.
        C = C+2;
        // Reset sit, then Aplic.
        gotoAndPlay (2);
     } else {
        // ¿Hay UnsSit?
        if (U<Us) {
           // Hay, usarla.
           Base.S = eval("U"+U+".S");
           // Reset sit, then Aplic.
           gotoAndPlay (2);
        } else {
           // No se logró Sol.
           List = "No se halló Sol";
           stop ();
        }
     }
  actions for fotograma 4
     List = C+" "+List;
  actions for fotograma 6
     SitID = "S"+S+".S";
     if (eval(SitID) != "Ninguno") {
        List = eval(SitID)+" "+List;
        gotoAndPlay (5);
     } else {
        stop ();
     }
El fotograma 5 está vacío.

El objetivo es que varíe un candidato (C) y a la situación inicial, analizando si se cumple una condición (Solcond).
Si la cumple debe mostrar las situaciones anteriores y qué acción (aplicación, uso, de C) se realizó en cada una. Quizá es fuerza bruta con backtracking.

Bueno, no sé qué errores tiene. Debería mostrar "1 1 1 1 1 1" al final pero me muestra "List" que es el valor inicial de la variable list, entonces es como si no hubiera actuado.

Al ver las variables en medio del programa me salió:
CitarLevel #0:
 Variable _level0.$version = "WIN 5,0,32,0"
 Variable _level0.List = "List"
 Variable _level0.SitID = "U436"
 Variable _level0.Depth = 873
 Variable _level0.C = 1
 Variable _level0.U = 0
 Variable _level0.Us = 436
 Variable _level0.S = 1
Movie Clip:  Target="_level0.Base"
Variable _level0.Base.S = undefined
Errores a patadas.

U no debería ser 0. Si lo es significa que nunca analizó una situación a la que llegó (o que debería llegar).

En cuanto a Base.S, m... El tema es que se necesita guardar la situación, y la situación en que se produjo. Hay un objeto llamado Base, que en la versión anterior guardaba variables, pero ahora no sé bien qué se debería hacer. De hecho, las últimas cosas que hice no sé por qué las hice.

¿Soluciones, ideas? Gracias.

Tachikomaia

Tras días con pausas dándole vueltas parece que lo logré:
   actions for fotograma 1
      // SitIni.
      Base.S = 5;
      // Guardar SitIni.
      SitID = "S"+Base.S;
      Depth = 1;
      attachMovie("Circ", SitID, Depth);
      setProperty (SitID, _x, random(401));
      setProperty (SitID, _y, random(301));
      set (SitID+".S", Base.S);
      set (SitID+".C", "Ninguno");
      // Cand normal.
      C = -1;
      // Vars de Unsolved sits.
      U = 0;
      Us = 0;
   actions for fotograma 2
      // Reset Sit. Aplic.
      S = Base.S+C;
      // ¿Sol?
      if (10<S) {
         // Sol; begin to show list
         List = C;
         gotoAndPlay (4);
         // Sino ¿la sit está anotada?
      } else if (eval("S"+S+".S") == undefined) {
         // No. Anotarla.
         SitID = "S"+S;
         Depth = Depth+1;
         attachMovie("Circ", SitID, Depth);
         setProperty (SitID, _x, random(401));
         setProperty (SitID, _y, random(301));
         set (SitID+".S", Base.S);
         set (SitID+".C", C);
         Us = Us+1;
         SitID = "U"+Us;
         Depth = Depth+1;
         attachMovie("Circ", SitID, Depth);
         setProperty (SitID, _x, random(401));
         setProperty (SitID, _y, random(301));
         set (SitID+".S", S);
      }
   actions for fotograma 3
      // La sit existe. ¿Candmod is pos?
      if (C<1) {
         // Candmod.
         C = C+2;
         gotoAndPlay (2);
      } else if (U < Us) {
         // Use Uns.
         U = U+1;
         Base.S = eval("U"+U+".S");
         C = -1;
         gotoAndPlay (2);
      } else {
         // No hay Sol.
         stop ();
      }
   actions for fotograma 5
      SitID = eval("S"+Base.S+".C");
      Base.S = eval("S"+Base.S+".S");
      if (SitID != "Ninguno") {
         List = SitID+" "+List;
         gotoAndPlay (4);
      } else {
         stop ();
      }
Ahora agregar complicaciones no será tan complicado, creo.

Nota: Las instrucciones:
setProperty (SitID, _x, random(401));
setProperty (SitID, _y, random(301));
...son para que el objeto aparezca en un sitio al azar, es innecesario, pero fácilmente permite ver que los objetos se están creando.