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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ¿Cuando mostrar cosas en pantalla?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cuando mostrar cosas en pantalla?  (Leído 476 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.131


Superhacker (es broma xD )


Ver Perfil
¿Cuando mostrar cosas en pantalla?
« en: 5 Febrero 2024, 21:46 pm »

Otra duda aparentemente tonta que me ha tenido trancado demasiado tiempo.

En programas que hacen poco, el print o lo que sea se pone casi al final, para mostrar el resultado de la tarea. Nada más.

En programas que hacen muchas cosas, lo mismo pero los prints también se ponen antes de ciertos procesos o después para indicar en qué parte del programa va, o qué está analizando en el momento. Lo vemos cuando copiamos muchos archivos por ejemplo, se indica cual se está copiando.

Parece una cuestión obvia de resolver.

Pero yo tengo un programa que me cuesta decidir o entender dónde quisiera poner los prints si tuviera un criterio que me parezca bueno. En cierto punto sólo ponía uno al final. Luego poco a poco pasé a seguir este patrón generalmente: Comentario, cambio, print. Luego empecé a creer que no tiene sentido hacer print de cada cambio porque si una cosa funciona bien no es necesario indicar que otra lo hizo, por ejemplo indicar que una variable cambió parece innecesario si enseguida se aplicará para algo. Así, quité todos los prints (en mi caso traces) del fotograma 1 excepto uno que muestra lo mismo que otra cosa así que lo quitaré también, no me di cuenta. Ahora iba a analizar el resto y, no sé bien qué hacer...
Código
  1.   actions for fotograma 1
  2.      function InsertarNodoyFlecha () {
  3.         // Insertar Nodo:
  4.         Imagenes = Imagenes+1;
  5.         Nodos = Nodos+1;
  6.         Grafo.attachMovie("mNodo", "Nodo"+Nodos, Imagenes);
  7.         // Especificar la situación que representa:
  8.         set ("Grafo.Nodo"+Nodos+".EnHP", EnHP);
  9.         // Insertar flecha:
  10.         Imagenes = Imagenes+1;
  11.         Grafo.attachMovie("mFlecha", "Flecha"+Nodos, Imagenes);
  12.         // Especificar el sitio donde se insertan:
  13.         PosicionY = PadrePosicionY+33;
  14.         setProperty ("Grafo.Nodo"+Nodos, _y, PosicionY);
  15.         setProperty ("Grafo.Flecha"+Nodos, _x, PadrePosicionX);
  16.         setProperty ("Grafo.Flecha"+Nodos, _y, PadrePosicionY+6.5);
  17.         Hijos = Hijos+1;
  18.         // Como por ahora casi todo padre tiene 1 hijo, este if agiliza el proceso creo:
  19.         if (Hijos == 1) {
  20.            PosicionX = PadrePosicionX;
  21.            setProperty ("Grafo.Nodo"+Nodos, _x, PosicionX);
  22.         } else {
  23.            Hijo = 0;
  24.            MinPosicionX = PadrePosicionX-16.5*(Hijos-1);
  25.            SAquedebeActualizarse = SAs-Hijos;
  26.            do {
  27.               Hijo = Hijo+1;
  28.               PosicionX = (Hijo-1)*33+MinPosicionX;
  29.               setProperty ("Grafo.Nodo"+(Nodos-Hijos+Hijo), _x, PosicionX);
  30.               // Actualizar datos de las posiciones guardadas:
  31.               SAquedebeActualizarse = SAquedebeActualizarse+1;
  32.               set ("SA"+SAquedebeActualizarse+"PosicionX", PosicionX);
  33.               // Establecer rotación 0 a la flecha para que su altura de se modifique bien:
  34.               setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _rotation, 0);
  35.               // Especificar rotación y tamaño de flecha:
  36.               DistanciaXPadreHijo = Math.abs(Math.abs(PadrePosicionX)-Math.abs(PosicionX));
  37.               setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _height, Math.sqrt(DistanciaXPadreHijo*DistanciaXPadreHijo+20*20));
  38.               Rotacion = 180/Math.PI*Math.atan(DistanciaXPadreHijo/20*-1);
  39.               // Si el hijo está a la izquierda del padre, invertir la rotación:
  40.               if (PosicionX<PadrePosicionX) {
  41.                  Rotacion = Rotacion*-1;
  42.               }
  43.               setProperty ("Grafo.Flecha"+(Nodos-Hijos+Hijo), _rotation, Rotacion);
  44.            } while (Hijo<Hijos);
  45.         }
  46.      }
  47.      Respuesta = "Vencer al enemigo mediante acciones, el enemigo tiene 11 HP. Se recomienda la serie... ";
  48.      // Situación inicial:
  49.      // HP inicial del enemigo:
  50.      EnBaseHP = 33;
  51.      trace ("EnBaseHP: "+EnBaseHP);
  52.      // Guardar situación y cómo se produjo:
  53.      // Parte inicial del nombre de los datos (en este caso S11):
  54.      SitID = "S"+EnBaseHP;
  55.      // Acción realizada en la situación anterior (en este caso ninguna):
  56.      set (SitID+"ActionAnterior", "Ninguna");
  57.      // En este caso la variable es S11Action y su valor es "Ninguna".
  58.      // Posición X e Y del nodo que representa la situación desde la cual se originó la que será representada por otro nodo...
  59.      // ...pero en este caso es la posición del 1er nodo.
  60.      PadrePosicionX = 0;
  61.      PadrePosicionY = 0;
  62.      // Cantidad de imágenes insertadas:
  63.      Imagenes = 1;
  64.      // Cantidad de nodos del grafo a mostrar:
  65.      Nodos = 1;
  66.      // Insertar nodo inicial:
  67.      Grafo.attachMovie("mNodo", "Nodo1", 1);
  68.      // Especificar la situación que representa:
  69.      Grafo.Nodo1.EnHP = EnBaseHP;
  70.      // Hijos del nodo de la situación que se está analizando:
  71.      Hijos = 0;
  72.      // Acción que será usada 1ero:
  73.      Action = 1;
  74.      // Variables sobre situaciones anotadas:
  75.      // Total de situaciones anotadas:
  76.      SAs = 0;
  77.      // Situación anotada que será investigada 1ero:
  78.      SiguienteSAaInvestigar = 0;
  79.   actions for fotograma 2
  80.      trace ("Reset de la situación, aplicación de la acción, la situación ahora es:");
  81.      EnHP = EnBaseHP-Action;
  82.      trace ("EnHP: "+EnHP);
  83.      // ¿Se logró el objetivo?
  84.      if (EnHP<=0) {
  85.         trace ("Solución hallada, iniciando proceso para mostrar cómo causarla.");
  86.         Serie = Action;
  87.         InsertarNodoyFlecha();
  88.         gotoAndPlay (5);
  89.      } else {
  90.         trace ("No se logró el objetivo.");
  91.         // ¿La situación producida está anotada?
  92.         if (eval("S"+EnHP+"ActionAnterior") == undefined) {
  93.            trace ("La situación producida no está anotada.");
  94.            trace ("Se anotará y cómo se logró.");
  95.            SitID = "S"+EnHP;
  96.            set (SitID+"EnHPAnterior", EnBaseHP);
  97.            set (SitID+"ActionAnterior", Action);
  98.            trace ("Ahora está anotada: "+SitID);
  99.            trace ("Su antecedente fue ("+SitID+"EnHPAnterior): "+EnBaseHP);
  100.            trace ("y la acción fue ("+SitID+"ActionAnterior): "+Action);
  101.            // También se agrega como situación a investigar y se anota en qué consiste:
  102.            SAs = SAs+1;
  103.            SitID = "SA"+SAs;
  104.            set (SitID+"EnHP", EnHP);
  105.            trace ("Situaciones anotadas: "+SAs);
  106.            trace ("La última consiste en (EnHP): "+eval(SitID+"EnHP"));
  107.            // Se inserta el nodo que la representa y se guarda su posición:
  108.            InsertarNodoyFlecha();
  109.            set (SitID+"PosicionX", PosicionX);
  110.            trace (SitID+"PosicionX: "+PosicionX);
  111.            set (SitID+"PosicionY", PosicionY);
  112.         } else {
  113.            trace ("La situación producida ya está anotada.");
  114.         }
  115.      }
  116.   actions for fotograma 3
  117.      // ¿Modificar acción es posible?
  118.      if (Action<7) {
  119.         trace ("Es posible modificar acción.");
  120.         Action = Action+1;
  121.         trace ("Action fue modificada, es: "+Action);
  122.         gotoAndPlay (2);
  123.      } else {
  124.         trace ("No es posible modificar la acción.");
  125.         if (SiguienteSAaInvestigar<SAs) {
  126.            // 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):
  127.            trace ("Aún hay situaciones anotadas sin investigar.");
  128.            SiguienteSAaInvestigar = SiguienteSAaInvestigar+1;
  129.            EnBaseHP = eval("SA"+SiguienteSAaInvestigar+"EnHP");
  130.            trace ("Se investigará la situación anotada nro: "+SiguienteSAaInvestigar);
  131.            trace ("Consiste en EnBaseHP: "+EnBaseHP);
  132.            // Guardar su posición para saber dónde poner a sus posibles hijos:
  133.            PadrePosicionX = eval("SA"+SiguienteSAaInvestigar+"PosicionX");
  134.            trace ("Nuevo PadrePosicionX: "+PadrePosicionX);
  135.            PadrePosicionY = eval("SA"+SiguienteSAaInvestigar+"PosicionY");
  136.            Hijos = 0;
  137.            // Reset de la acción a usar:
  138.            Action = 1;
  139.            trace ("Reset de la acción a usar, es: "+Action);
  140.            gotoAndPlay (2);
  141.         } else {
  142.            trace ("No hay situaciones anotadas sin investigar ni es posible lograr el objetivo.");
  143.            Respuesta = "No es posible lograr el objetivo.";
  144.         }
  145.      }
  146.   actions for fotograma 5
  147.      // Obtener acción anterior:
  148.      ActionAnterior = eval("S"+EnBaseHP+"ActionAnterior");
  149.      trace ("La acción anterior fue: "+ActionAnterior);
  150.      // ¿Hubo?
  151.      if (ActionAnterior != "Ninguna") {
  152.         // Sí, agregarla en la lista:
  153.         Serie = ActionAnterior+" "+Serie;
  154.         trace ("Acción agregada en la serie.");
  155.         // Averiguar cual fue la situación anterior:
  156.         EnBaseHP = eval("S"+EnBaseHP+"EnHPAnterior");
  157.         trace ("Se realizó en la situación: S"+EnBaseHP);
  158.         // Repetir este frame.
  159.         gotoAndPlay (4);
  160.      } else {
  161.         // No hubo una acción anterior, mostrar la serie:
  162.         trace (Respuesta+Serie);
  163.         stop ();
  164.      }

Además hay cosas como esta:
// 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):
trace ("Aún hay situaciones anotadas sin investigar.");
Es decir un trace que dice lo mismo que el comentario, por lo que parece que debería borrar el comentario, pero el comentario dice más cosas que no tiene sentido decir en un trace. Ahora se me ocurre poner el trace y luego el comentario quitando lo que ya se dice en el trace, sí, puede que sea una solución muy obvia pero no me di cuenta en parte por intentar seguir el patrón que mencioné.



En línea

TickTack


Desconectado Desconectado

Mensajes: 427



Ver Perfil
Re: ¿Cuando mostrar cosas en pantalla?
« Respuesta #1 en: 16 Febrero 2024, 14:34 pm »

Hasta cierto grado entiendo tu dilema.

Hace mucho que no hago algo con programación pero una de las pocas cosas que podría aconsejarte es que mantengas la coherencia. Esto facilitará la comprensión del código para ti y para otros que puedan leerlo en el futuro.

En cuanto a tu ejemplo específico, puedes revisar cada comentario y trace para asegurarte de que cada uno aporte algo único y relevante. Si un comentario y un trace dicen esencialmente lo mismo, podrías considerar eliminar uno de ellos o combinarlos de manera que se evite la redundancia.

Al final, lo más importante es que tu código sea claro y fácil de entender para ti y para otros que puedan trabajar con él en el futuro.


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.131


Superhacker (es broma xD )


Ver Perfil
Re: ¿Cuando mostrar cosas en pantalla?
« Respuesta #2 en: 16 Febrero 2024, 19:18 pm »

Borré los traces  :P

Tal vez en programas o problemas más complejos que el que hice tengan sentido, pero acá, sería para avisar que la situación ya había sido lograda y cosas así, que más o menos se entiende. O... No, no de nuevo el dilema >___< En fin, por ahora sólo los pongo si intento comprender algún error. Digamos que deben avisar de eventos importantes que no se noten en la pantalla, pero cuales son importantes y cuales no...
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