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
| | |-+  No logro que el programa cuente bien los nuevos píxeles pintados.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No logro que el programa cuente bien los nuevos píxeles pintados.  (Leído 1,375 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.390


Hackentifiko!


Ver Perfil
No logro que el programa cuente bien los nuevos píxeles pintados.
« en: 7 Marzo 2024, 21:10 pm »

Intento hacer un generador de dibujos cada vez de más píxeles (2x2, 3x3, etc), por ahora solo negros con fondo blanco. Aquí se ve algo parecido:
https://www.youtube.com/watch?v=0x5fEw8LGP4

Quiero evitar que se generen dibujos repetidos. Para eso exijo a los dibujos 2 cosas (no es suficiente pero 1ero debo resolver esto):
1- La cantidad de píxeles pintados debe ser >= Píxeles que entran en el largo de la hoja. Si en la hoja puede haber 2x2, debe haber mínimo 2.
2- La cantidad de nuevos pixeles pintados debe ser > 0. Cuando la hoja es de 2x2, los nuevos (N) son:
ON
NN
Cuando es de 3x3 son:
OON
OON
NNN
Es decir, los del extremo derecho y los inferiores.

Intento que los cuente para así determinar si debe mostrar el dibujo o salteárselo, pero llega un punto en que la cifra no disminuye o aumenta cuando no debe, no sé, estoy viendo cual puede ser el problema.
Código
  1.   actions for fotograma 1
  2.      PixelesdeLargo = 1;
  3.      // En F3 se repite:
  4.      function Variar () {
  5.         PixelaModificar = "ColordePixel"+Puntero;
  6.         ColordePixelaModificar = eval(PixelaModificar);
  7.         // ¿El pixel puede cambiar de color?
  8.         if (ColordePixelaModificar<1) {
  9.            // Sí, hacer los cambios:
  10.            set (PixelaModificar, ColordePixelaModificar+1);
  11.            Col = new Color("Pixel"+Puntero);
  12.            Col.setRGB(parseInt(0, 16));
  13.            trace ("Se pintó el pixel "+PixelaModificar);
  14.            // Para juzgar: ¿El dibujo es repetido?
  15.            SumadePintados = SumadePintados+1;
  16.            // ¿El píxel está en el extremo derecho o abajo, donde no había en una hoja más chica?
  17.            if (Puntero/PixelesdeLargo == Math.floor(Puntero/PixelesdeLargo) or Puntero>MinPixelInferior) {
  18.               // Sí, actualizar SumadePintadosNuevos:
  19.               SumadePintadosNuevos = SumadePintadosNuevos+1;
  20.            }
  21.            trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
  22.            // ¿El dibujo tiene píxeles donde no había en una hoja más chica...
  23.            // y son al menos (PixelesdeLargo) píxeles?
  24.            if (SumadePintadosNuevos>0 && SumadePintados>=MinSumadePintados) {
  25.               // Sí, hacer dibujo y dar tiempo para verlo:
  26.               Puntero = MaxPosiciondePuntero;
  27.               trace ("\tMostrando dibujo.");
  28.               // trace ("SumadePintados: "+SumadePintados);
  29.               trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
  30.               play ();
  31.            } else {
  32.               // No, el dibujo es repetido, no mostrarlo y hacer otro:
  33.               Puntero = MaxPosiciondePuntero;
  34.               trace ("\tRepetido, salteándolo.");
  35.               // trace ("SumadePintados: "+SumadePintados);
  36.               trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
  37.               Variar();
  38.            }
  39.         } else {
  40.            // El pixel no puede cambiar de color, resetearlo:
  41.            set (PixelaModificar, 0);
  42.            Col = new Color("Pixel"+Puntero);
  43.            Col.setRGB(parseInt("FFFFFF", 16));
  44.            trace ("Se reseteó el pixel "+PixelaModificar);
  45.            SumadePintados = SumadePintados-1;
  46.            // ¿El píxel está en el extremo derecho o abajo, donde no había en una hoja más chica?
  47.            if (Puntero/MaxPosiciondePuntero == Math.floor(Puntero/MaxPosiciondePuntero) or Puntero>=MinPixelInferior) {
  48.               // Sí, actualizar SumadePintadosNuevos:
  49.               SumadePintadosNuevos = SumadePintadosNuevos-1;
  50.            }
  51.            trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
  52.            // ¿Hay un pixel anterior?
  53.            if (Puntero>1) {
  54.               // Sí, apuntar a ese:
  55.               Puntero = Puntero-1;
  56.               // Continuar haciendo el dibujo:
  57.               trace ("\tHaciendo dibujo, apuntando al pixel anterior.");
  58.               // trace ("SumadePintados: "+SumadePintados);
  59.               trace ("SumadePintadosNuevos: "+SumadePintadosNuevos);
  60.               Variar();
  61.            } else {
  62.               // No, aumentar tamaño de hoja y reiniciar.
  63.               gotoAndPlay (2);
  64.            }
  65.         }
  66.      }
  67.   actions for fotograma 2
  68.      PixelesdeLargo = PixelesdeLargo+1;
  69.      // Colocados:
  70.      Pixeles = 0;
  71.      DistanciaEntrePixeles = 384/PixelesdeLargo;
  72.      PosicionX = 64-DistanciaEntrePixeles;
  73.      EnlaFilaActual = 0;
  74.      PosicionY = 0;
  75.      MaxPosiciondePuntero = PixelesdeLargo*PixelesdeLargo;
  76.      Puntero = MaxPosiciondePuntero;
  77.      // Píxeles pintados:
  78.      SumadePintados = 0;
  79.      // Esta variable parece eliminable pero antes era-1,
  80.      // y podría ser que deba aumentar en ciertos casos:
  81.      MinSumadePintados = PixelesdeLargo;
  82.      MinPixelInferior = PixelesdeLargo*(PixelesdeLargo-1);
  83.      // Píxeles pintados que no estaban en hojas de menos píxeles:
  84.      SumadePintadosNuevos = 0;
  85.      // Agregar píxeles en blanco:
  86.      do {
  87.         Pixeles = Pixeles+1;
  88.         if (EnlaFilaActual<PixelesdeLargo) {
  89.            EnlaFilaActual = EnlaFilaActual+1;
  90.            PosicionX = PosicionX+DistanciaEntrePixeles;
  91.         } else {
  92.            PosicionX = 64;
  93.            EnlaFilaActual = 1;
  94.            PosicionY = PosicionY+DistanciaEntrePixeles;
  95.         }
  96.         trace ("El pixel "+Pixeles+" se colocó en "+PosicionX+", "+PosicionY);
  97.         attachMovie("mPixel", "Pixel"+Pixeles, Pixeles);
  98.         setProperty ("Pixel"+Pixeles, _x, PosicionX);
  99.         setProperty ("Pixel"+Pixeles, _y, PosicionY);
  100.         setProperty ("Pixel"+Pixeles, _width, DistanciaEntrePixeles);
  101.         setProperty ("Pixel"+Pixeles, _height, DistanciaEntrePixeles);
  102.      } while (Pixeles<MaxPosiciondePuntero);
  103.      stop ();
  104.   actions for fotograma 3
  105.      stop ();
  106.   actions for Vacío
  107.      onClipEvent (enterFrame) {
  108.         _level0.Variar();
  109.      }
  110.   actions for fotograma 4
  111.      stop ();
  112.   actions for fotograma 5
  113.      gotoAndPlay (3);
  114.  

¿Cómo lo soluciono?


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.390


Hackentifiko!


Ver Perfil
Re: No logro que el programa cuente bien los nuevos píxeles pintados.
« Respuesta #1 en: 9 Marzo 2024, 21:53 pm »

Probablemente hallé el problema.

Cuando se insertaba un pixel se hacía:
Código:
if (Puntero/PixelesdeLargo == Math.floor(Puntero/PixelesdeLargo) or Puntero>MinPixelInferior) {
// Sí, actualizar SumadePintadosNuevos:
SumadePintadosNuevos = SumadePintadosNuevos+1;
}

Y cuando se lo reseteaba:
Código:
if (Puntero/MaxPosiciondePuntero == Math.floor(Puntero/MaxPosiciondePuntero) or Puntero>=MinPixelInferior) {
// Sí, actualizar SumadePintadosNuevos:
SumadePintadosNuevos = SumadePintadosNuevos-1;
}

No sé por qué estaba tan distinto >___<


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