|
211
|
Media / Multimedia / Texto apareciendo a medida que moto lo atraviesa.
|
en: 25 Noviembre 2024, 14:10 pm
|
En el siguiente video pueden ver 2 animaciones. https://youtu.be/If4OhphUivwLa 1era está bien, pero la moto anda en un fondo negro, vacío. La 2nda está mal, pero tiene pista. Quiero que esté bien y tenga pista. En la 1era, delante del texto hay un cuadro negro que se va achicando a medida que la moto avanza. En la 2nda no puedo hacer lo mismo, no puedo poner un cuadro negro o se vería una cosa negra moverse en la pista. Tampoco puedo poner algo similar a la pista, que se achique o mueva, porque la pista tiene puntitos separados y se notaría. Intenté poner una máscara (cosa de Flash), pero nunca tuve claro cómo funciona y en este caso no me sirvió. Creo que es: - Máscara. - Capa en máscara. - Capa común. El objeto que haya en la máscara determina lo que se muestra de la capa en máscara. Lo que tape se muestra. No afecta a la capas comunes. Basado en eso acabo de probar que el cuadro negro esté pequeño y se agrande, pero no parece que se agrande porque el texto sólo se ve donde está el objeto, chiquito. En la versión anterior se achica sin problema, ahora sólo cambié un - por un + y puse al objeto en una máscara ¿es por eso? onClipEvent (load) { Wait = 15; } onClipEvent (enterFrame) { setProperty ("_level0.Excitebiker", _x, getProperty("_level0.Excitebiker", _x)+5); setProperty ("_level0.Tapador", _width, getProperty("_level0.Tapador", _width)+5); setProperty ("_level0.Texto", _x, getProperty("_level0.Texto", _x)-0.1); Wait--; if (Wait == 0) { setProperty ("_level0.Texto", _alpha, getProperty("_level0.Texto", _alpha)-1); Wait = 15; if (getProperty("_level0.Texto", _alpha) < 20) { _level0.gotoAndStop (3); } } }
En fin ¿cómo lo podría hacer?
|
|
|
212
|
Programación / Programación General / Re: Busco eficiencia, tengo while con función y quiero evitar un if.
|
en: 25 Noviembre 2024, 08:12 am
|
No te entiendo y lo explicaré más pues quizá me faltó, no sé. El programa luego de hacer dibujos de 3x3 hace de 4x4, empezando así: BBBN BBNB BNBB NBBB Donde N es negro y B blanco. Traza una / no viene al caso por qué. Luego pinta o despinta cuadraditos desde abajo hacia la izquierda, por lo que el siguiente dibujo será: BBBN BBNB BNBB NBBN Están nombrados así: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Y pinta/despinta desde el 16, haciendo todas las combinaciones posibles. Debido a esa forma conque pinta/despinta, cuando se quiere saber si el recién pintado está aislado, no es necesario chequear el de la derecha ni los de abajo. Porque todos estarán despintados. Es como cuando reduces lo mínimo posible al binario 1000, te va a quedar 0111, no sé si realmente es así en binario pero el punto es que cuando disminuye algo de adelante, todo lo demás queda al máximo, que en este caso es despintado (pintado=0 porque en Flash el color negro es 0, así no me entrevero en eso, y 1 es despintado, blanco). Por lo tanto, había puesto que esos análisis innecesarios no se hagan.Por otro lado, se quiere que los dibujos no sean simétricos (espejo | ) a otros ya hechos, porque son iguales pero al revés, es aburrido. No confundir conque el dibujo sea simétrico. Esto es simétrico: NBBN BBBB NNNN NBBN o capicúa, como quieran. Pero lo que yo digo es simétrico a uno ya hecho, por ejemplo este: NNBB BBBB BBBB BBBB es simétrico a: BBNN BBBB BBBB BBBB que fue hecho antes. Para saber si fue hecho antes, se usan los números. Como di a entender, los dibujos con más valor son hechos antes. El cuadradito 1 empieza teniendo valor 1, el 2 también, etc, y el valor va bajando como dije en el ejemplo de los binarios. La fila superior del que se quiere analizar (NNBB) es 0011. Si eso es < que su inverso (1100) entonces su simétrico ya fue hecho y ese dibujo no debe mostrarse. No me acuerdo de memoria el resto, acá está: // El dibujo puede ser simétrico... // a otro ya mostrado. ¿Lo es? // Esto puede cambiar: DibujoEsSimetrico = "No"; // Captar valor (colores) de cada fila; // si alguno es menor al inverso, sí: PunteroDeFilas = 0; do { PunteroDeFilas++; PunteroDeColumnas = 0; PunteroInverso = CuadraditosPorFila; do { PunteroDeColumnas++; Valor = eval("Cuadradito"+PunteroDeFilas+"_"+PunteroDeColumnas); ValorInverso = eval("Cuadradito"+PunteroDeFilas+"_"+PunteroInverso); // trace("Valor: "+Valor); // trace("ValorInverso: "+ValorInverso); if (Valor<ValorInverso) { DibujoEsSimetrico = "Sí"; FilaFallada = PunteroDeFilas; PunteroDeFilas = CuadraditosPorFila; break; } else if (Valor>ValorInverso) { // Es ok: PunteroDeFilas = CuadraditosPorFila; break; } PunteroInverso--; } while (PunteroDeColumnas<CuadraditosPorFila); } while (PunteroDeFilas<CuadraditosPorFila);
Ya más o menos comprobé que eso puede ocurrir desde que un superior izquierdo está pintado: IIDD Bueno, cuando se capta un simétrico, intenté evitar que se produzcan dibujos que también lo serán. Para eso, en vez de mandar el Puntero hacia el inferior derecho, lo mando al final de la fila que se captó como "fallida". Porque si por ejemplo el error está en la fila superior, hacer todas las variaciones posibles en filas inferiores es inútil, el dibujo seguirá siendo simétrico. No es el método ideal de evitarlos, sólo lo mejor que se me ocurrió. Pero al cambiar el lugar a donde va el Puntero en esos casos, ahora sí es necesario chequear otros cuadraditos. O eso creo... antes desde que se captaba una simetría el contador de cuadraditos aislados me daba -1 a partir de cierto punto, está mal, y dibujos que estaban bien los consideraba con muchos aislados. En fin, yo no puedo entender todo esto todo el tiempo, a veces me olvido de algunas cosas. Vamos a ver un caso concreto, este es el 1er simétrico que capta en 4x4:  Los que pinté de rojo es que están aislados. ¿Por qué ese es el 1er simétrico captado? Supongo que porque otros anteriores fueron descartados por otros motivos (es "pequeño" o tiene demasiados aislados). 1010 > 0101 así que no debería captarse como simétrico, m... Lo grabo en video a ver si lo entiendo mejor. Como se saltea dibujos, no sé bien qué pasa, y no tengo ganas de cambiar el code ahora y ver otra vez: https://youtu.be/e-Qn3K8t_3ALuego de esto:  Se pinta el inferior derecho y se capta como dibujo denso (demasiados pintados). Luego quedará así: BNBB BBBB BBBB BBBB Se considera "pequeño" (hay alguna columna o fila donde no hay un pintado), y en este caso especial (el mínimo pintado disminuyó, o sea, el 1er pintado era el 3, ahora el 2), para evitar simétricos supongo, se pone el Puntero en el superior derecho, por lo que el siguiente es: BNBN BBBB BBBB BBBB Pequeño. Ahora el Puntero se pone en el inferior derecho. Y sigue, pero no entiendo por qué se considera simétrico el mencionado antes, tendré que pensarlo. La cosa es que yo quería evitar hace los análisis innecesarios, pero ahora a veces lo son así que podría poner un if para ver si debe hacer el análisis completo o no, pero no quiero poner ese if, no sé, eso es lo que recuerdo de todo esto xP Por ahora puse que se haga el análisis completo siempre. EDIT: El error estaba en una parte del código que no mostré porque no pensé que pudiera tener un error. Cuando el dibujo se agranda, a cada cuadradito se le asigna color de 3 maneras, o mejor dicho hay 3 variables que guardan el mismo color, aunque puede que con distinto valor: - La normal, la que tiene efecto directo, cambia el color del cuadradito. - ColordeCuadradito1, ColordeCuadradito2, etc, los valores son 0 para negro y 1 para blanco. - Cuadradito1_1, Cuadradito1_2, etc, es igual que el anterior pero se indica con filas y columnas. Bueno, en ese momento se hacía: set ("Cuadradito"+(Fila+1)+"_"+(Columna+1), "FFFFFF"); Luego al hacer el análisis de simetría, en unos traces decía: Analizando fila 1, columna 1 Valor: FFFFFF ValorInverso: 0 Analizando fila 1, columna 2 Valor: 0 ValorInverso: 1 0 < 1 ...No se interpretaba que "FFFFFF" fuese > 0. causando el error. Lo corregí poniendo 1 en vez de "FFFFFF" cuando se define, nunca se usa el "FFFFFF" excepto para asignar el color real, pero no necesita estar definido ahí.
|
|
|
213
|
Programación / Programación General / Re: ¿Por qué el cambio de color no se aplica?
|
en: 24 Noviembre 2024, 07:40 am
|
¿Por qué siempre usas un String para hacer referencia a un Objeto Porque me acostumbré y suelo hacer referencia a objetos variables, por ejemplo si hay Cuadradito1, 2, etc, y les estoy cambiando el color con un while, me referiré a ellos con "Cuadradito"+Contador, por lo que considero que el nombre va en comillas si es un objeto, y sin comillas cuando es una variable. Pero pruebo lo que me dices. Funciona xD  ¿Por qué con string no? Ah, ya entendí, lo explicaste luego 
|
|
|
214
|
Programación / Programación General / Re: Busco eficiencia, tengo while con función y quiero evitar un if.
|
en: 24 Noviembre 2024, 07:26 am
|
Si en vez de while usara autollamadas o llamadas a la función similar, sería el fin del problema. Lo hice pero me di cuenta de 2 cosas: > Luego de que se detecta simetría y hay variaciones, los análisis posiblemente deberían ser completos, es decir como VariarLuegoDeSimetria, así que las funciones serían más distintas de lo que pensé, VariarLuegoDeSimetria podría tener que autollamarse donde normalmente se llamaría a Variar. > Luego de que se detecta simetría y se despinta un cuadradito, el chequeo de aislados posiblemente debe ser completo. ...Intento evitar que el programa haga análisis en vano, pero es muy complicado parece, así que parece que conviene que el análisis sea completo siempre.
O sea, puse que cuando se pinta/despinta un cuadradito, mire de todos los contiguos a ver si estaban aislados. Dudo que sea lo más eficiente pero me resulta muy complicado todo esto, ni siquiera estoy seguro de haber logrado resultados correctos, pero eso es otro tema.
|
|
|
215
|
Informática / Software / Re: ¿Cómo averiguo los passwords de archivos rar o extraigo sus contenidos sin saberlos?
|
en: 24 Noviembre 2024, 04:50 am
|
No puedo ver tu gif en este momento porque imgbb está caído, pero usando Wordpad pude abrir un archivo más pequeño que tengo, seguí las instrucciones y se dañó el archivo (era una copia). Tal vez es porque mi archivo rar tiene muchos dentro, o es que sólo hay que hacer las 2 sustituciones 1 vez. Igual parecía demasiado fácil ese método (4).
En cuanto al bat, pensé en modificarlo para que generara las que me interesan, pero supuse que john sería más rápido, y considerando lo que yo tardaría en aprender.
|
|
|
216
|
Foros Generales / Foro Libre / Hacer lista de métodos que sólo quitan caracteres, sin liarse.
|
en: 24 Noviembre 2024, 02:25 am
|
En cuanto a métodos conque se obtiene o genera un número a partir de otro, por ahora me sirvió clasificarlos en 4 tipos: A: No cambian los caracteres, sólo cambian de lugar. B: Se pierden algunos y se generan otros. C: Se pierden algunos. D: Se generan algunos. Por ahora intento hacer la lista de los C, es decir de los métodos que modifican a un número mediante quitarle caracteres, sin cambiarlos de lugar ni transformarlos de otros modos. Lo más reciente que tengo es esto:  Vease que en naranja parece haber 2 variables: 1: Qué caracter se quita: El 1ero, el central, el último. 2: De qué parte se quita: Del todo, de la parte entera, de la decimal, 1 de cada una. La variable 1 varía hacia abajo, la 2 varía hacia la derecha. En rojo hay 3 variables así que me lío, no puedo variarlas hacia 3 lados porque la tabla sólo tiene 2 dimensiones. Que una varíe hacia la izquierda y la otra a la derecha no sirve porque ya no habría cruces de 3 coordenadas. Lo que se me ocurre es que una de las variables varíe en hojas, o sea, en otra hoja sólo estaría lo rojo y en vez de decir "su siguiente presencia" podría decir "su última presencia" (referirse a la central no es tan simple), pero para mí es lioso, y además ¿si llegan a ser 4 qué, hago distintos archivos? Pienso que debe haber alguna buena manera de hacer la lista visiblemente ordenada, para facilitar que se pongan todas las posibilidades, pero distintas cosas que probé no me funcionaron por a o por b. Es combinatoria, pero los posibles valores no se saben a priori. Tampoco se pueden concatenar todos igual. Lo normal es hacer una lista de una columna, hacia abajo: A0a A0b etc donde cada caracter de eso sería cada valor de las variables, 3 en este caso. Pero yo haciéndolo así me entrevero en este caso, no sé bien por qué, me parece que queda más comprensible si los que son similares se ponen al lado, formando una tabla. Se me acaba de ocurrir hacer una tabla en que en cada celda, los valores varíen cada cierto tiempo, de ese modo podrían entrar en 2 dimensiones la variación de 3 variables, pero ya probé algo similar y el hecho de que parte del texto cambie mientras lo miro me genera cierta confusión en casos como este. Además si hay 4 variables no servirá. Este tipo de problemas los tuve varias veces. ¿Sugerencias?
|
|
|
217
|
Programación / Programación General / ¿Por qué el cambio de color no se aplica?
|
en: 23 Noviembre 2024, 08:41 am
|
on (release) { // Los separadores (fondo) tendrán el color de este botón, // y este botón el color que tenían los separadores: ExColorDelFondo = _level0.ColorDelFondo; _level0.ColorDelFondo = ColorDeCentro.getRGB().toString(16).toUpperCase(); _level0.ColorDelObjetoFondo.setRGB(parseInt(_level0.ColorDelFondo, 16)); ColorDeCentro.setRGB(parseInt(ExColorDelFondo, 16)); }
Funciona todo menos: _level0.ColorDelObjetoFondo.setRGB(parseInt(_level0.ColorDelFondo, 16)); No importa qué ponga luego de RGB, no se aplica. Pero desde el lv0 funciona: ColorDelFondo = Rojo+Verde+Azul; // Actualizar el color del objeto: ColorDelObjetoFondo.setRGB(parseInt(ColorDelFondo, 16)); Le paso un texto hexadecimal (ColorDelFondo), lo convierte en decimal, y se lo asigna de color a un objeto. La situación es la misma. _level0.ColorDelFondo: FFFFFF ColorDeCentro: 10066329 Explico desde el principio, no sé... Esto es lo relevante en este momento:  Es largo explicar por qué se ve así, no viene al caso. Lo que tiene color cyan es "las separaciones", también fondo. Se inició así: ColorDelObjetoFondo = new Color("Fondo"); ColorDelObjetoFondo.setRGB(parseInt(ColorDelFondo, 16));
Y se le puede cambiar el color con los botones con flechita de colores, así: function ActualizarColorDelFondo () { // Formar el color: ColorDelFondo = Rojo+Verde+Azul; // Actualizar el color del objeto: ColorDelObjetoFondo.setRGB(parseInt(ColorDelFondo, 16)); }
Los botones cambian el color correspondiente y luego aplican eso. Estoy agregando botones que al presionarlos hagan intercambios, o sea, se ve uno blanco, al cliquearlo quedaría cyan (o como esté el fondo o separador en ese momento) y el fondo quedaría blanco. Pero ese botón, para que aparezca de un color variable y haga un efecto, lo puse en una película. No debería haber problema con eso. Pero sucede lo que dije al inicio, no se aplica, no sé qué pasa. Les dejo el archivo. Tienen que mirar el código del botón superior izquierdo, que en la imagen se ve blanco pero en el editor se ve gris como los demás. Vayan al 2ndo frame de eso y vean el cuadrado negro. Ahí está el código que falla. Acabo de poner esto: _level0.Rojo = "FF"; _level0.ActualizarColorDelFondo (); ...y funciona. Pero por qué esto no: _level0.ColorDelObjetoFondo.setRGB(parseInt(_level0.ColorDelFondo, 16)); si es lo mismo que: ColorDelObjetoFondo.setRGB(parseInt(ColorDelFondo, 16)); ¿Hay algo mal escrito que no veo? La única diferencia es que el 1ero dice _level0. en 2 lados porque fue usado desde una película y lo que se quiere señalar está en el lv0. Podría entonces usar la función mencionada luego de cambiar el valor del rojo, etc, pero no tiene mucho sentido modificar partes si ya tengo una variable que tiene el color a transferir. Una posible explicación sería que ActualizarColorDelFondo se esté aplicando todo el tiempo pero la quité, puse _level0.ColorDelObjetoFondo.setRGB(0); y no funcionó. https://docs.google.com/document/d/1HkhDR97uRp5Gv_ECbm7z0w301a5SFc-6/edit?usp=sharing&ouid=109273743447273895658&rtpof=true&sd=trueEDIT: Parece que es un bug. Si esto: on (release) { _level0.ColorDelObjetoFondo.setRGB(0); } está en un botón del level0, funciona. Pero si el botón está dentro de una película, no. Se puede hacer funcionar poniendo el código en una función y llamándola, pero no debería ser necesario.
|
|
|
218
|
Programación / Programación General / Re: ¿Cómo generar passwords rápido? Flash es muy lento y mi PC creo que no resiste.
|
en: 23 Noviembre 2024, 03:05 am
|
Primero probaré C. De Phython no me había gustado cómo concatena números y letras. Daniel ¿cómo hace los passwords? ¿en un archivo? ¿o es posible que los genere en un texto y que el mismo programa lo ponga en el portapapeles? Igual creo que son demasiados passwords para mi PC, incluso si sólo produzco de largo 4 iniciando con A, supongo que podría producir 1000 por ejemplo, guardar dónde quedó, probar esos, y repetir el proceso... Voy a probar eso. Soy vago para probar programas nuevos xD Probé Phython, ya que EdePC lo dejó tan fácil, en menos de 2 minútos me generó un archivo de 100 mb aprox  Cool.
|
|
|
220
|
Programación / Programación General / Busco eficiencia, tengo while con función y quiero evitar un if.
|
en: 22 Noviembre 2024, 07:37 am
|
Tengo algo como: Repetir Si se puede variar VariaciónConChequeoNormal Si se capta simetría repetir pero VariaciónConChequeoExtra sino repetir normalmente sino despintar mientras no se capte un dibujo ok
Básicamente, en un caso tengo que hacer unos chequeos extra que normalmente no, así que no quiero hacerlos si es innecesario, pero quiero evitar poner ese if en el código que siento que es innecesario (*), y por cómo es el código es complicado... ¿Basado en eso se les ocurre algo? Me refiero a algo así: Repetir Si se puede variar Si no se captó simetría VariaciónConChequeoNormal sino VariaciónConChequeoExtra fin del si Si se capta simetría Marcar que se detectó simetría y repetir sino Marcar que no se detectó simetría y repetir sino despintar mientras no se capte un dibujo ok
Esto: Si no se captó simetría VariaciónConChequeoNormal sino VariaciónConChequeoExtra fin del si
Si en vez de VariaciónConChequeoExtra se pudiera poner un do parecido al original, tal vez... Lo pensaré. Aquí una explicación más detallada: Intento que un programa genere todos los dibujos de X*X cuadraditos en blanco y negro, que cumplan ciertas condiciones, X va aumentando. Las condiciones son: // debe tener algún cuadradito pintado en cada columna y fila, // no debe haber muchos pintados aislados, // no debe ser simétrico (espejo vertical | ) a alguno ya mostrado, // y no debe tener demasiados cuadraditos despintados (contando desde el MinPintado, que se cuenta desde arriba a la derecha, como un texto). El conteo de aislados, cuando se pinta un cuadradito, no es completo porque no es necesario, porque como se pintan desde abajo a la izquierda, nunca habrá uno pintado a la derecha ni abajo, como se explica aquí (más abajo está el código completo): // Debido a que al pintar un cuadradito... // los de abajo y el de la derecha estarán despintados, // sólo se miran el de la izquierda y los de arriba: Eso es el chequeo normal. Cuando se capta que un dibujo es simétrico a uno ya hecho, para evitar que se generen posibles otros simétricos se modifica el cuadradito más derecho de la fila donde se detectó la falla, en vez de modificar el cuadradito de más abajo o donde fuera normalmente. Esto es bueno, pero al hacerlo se requiere un chequeo extra de los aislados, porque en este caso puede que haya pintados abajo. Son suposiciones sobre este programa, un error que me ha parecido detectar, no es que lo tenga del todo claro. He pensado, como puse arriba, en crear 2 funciones para los 2 tipos de variaciones, pero no quiero usar un if, siento que no es necesario. // En este programa hay cuadraditos nombrados así: // 123 // 456 // 789 // Se irán pintando diferentes combinaciones y... // su tamaño se reducirá a medida que... // la cantidad por fila y columna aumente. // Para que un dibujo se muestre... // debe tener algún cuadradito pintado en cada columna y fila, // no debe haber muchos pintados aislados, // no debe ser simétrico (espejo vertical | ) a alguno ya mostrado, // y no debe tener demasiados cuadraditos despintados // (contando desde el MinPintado). // Ver frame 2 por más información. // // CuadraditosPorFila es también porColumna. // Debido a que en cierto chequeo se asume que... // si el cuadradito no está en la parte inferior ni... // superior entonces está en una fila intermedia, // conviene que CuadraditosPorFila comience siendo >1; // aumenta 1 antes de aplicarse: CuadraditosPorFila = 2; // Usada en Variar: function ObtenerColumnayFila () { Fila = Math.ceil(Puntero/CuadraditosPorFila); // trace ("Su Fila según el cálculo es: "+Fila); Columna = (Puntero-1)%CuadraditosPorFila+1; // trace ("Su Columna: "+Columna); // Esto se usa para evitar repeticiones... // de concatenaciones y simplificarlas: ColumnaRelevante = "PintadosenC"+Columna; FilaRelevante = "PintadosenF"+Fila; } // Usada en ParteDeContarEtc: function PosibleIncrementoDeContiguosPintados () { // ¿El contiguo indicado está pintado? if (eval("Cuadradito"+Fila3+"_"+Columna3) == 0) { // Sí, aumentar contador: ContiguosPintados++; // trace ("De ese contiguo ("+Fila2+"_"+Columna2+"), su contiguo "+Fila3+"_"+Columna3+" está pintado; por ahora se vió que tiene "+ContiguosPintados+" contiguos pintados."); } } // Usada en ContarContiguosDeContiguoAlNewPintado y ContarContiguosDeContiguoAlNewDespintado: function ParteDeContarEtc () { ContiguosPintados = 0; // trace("Analizando su inferior derecho."); Fila3 = Fila2+1; Columna3 = Columna2+1; PosibleIncrementoDeContiguosPintados(); // trace("Analizando su inferior."); Columna3--; PosibleIncrementoDeContiguosPintados(); // trace("Analizando su inferior izquierdo."); Columna3--; PosibleIncrementoDeContiguosPintados(); // trace("Analizando su derecho."); Columna3 = Columna3+2; Fila3--; PosibleIncrementoDeContiguosPintados(); // trace("Analizando su izquierdo."); Columna3 = Columna3-2; PosibleIncrementoDeContiguosPintados(); // trace("Analizando su superior derecho."); Columna3 = Columna3+2; Fila3--; PosibleIncrementoDeContiguosPintados(); // trace("Analizando su superior."); Columna3--; PosibleIncrementoDeContiguosPintados(); // trace("Analizando su superior izquierdo."); Columna3--; PosibleIncrementoDeContiguosPintados(); } // Usada en Variar: function ContarContiguosDeContiguoAlNewPintado () { // ¿El contiguo indicado está pintado? // trace ("Analizando Cuadradito"+Fila2+"_"+Columna2+": "+eval("Cuadradito"+Fila2+"_"+Columna2)); if (eval("Cuadradito"+Fila2+"_"+Columna2) == 0) { // Sí, el recién pintado no está aislado: ElRecienPintadoEstaAislado = "No"; // trace ("Está pintado; el recién pintado no está aislado."); // Se contarán los contiguos de este (contiguo al recién...). ParteDeContarEtc(); // trace ("Ese contiguo ("+Fila2+"_"+Columna2+") al recién pintado tiene "+ContiguosPintados+" contiguos pintados."); // ¿Estaba aislado? if (ContiguosPintados == 1) { // Sí, reducir el contador: CuadraditosAislados--; // trace ("El contiguo al recién pintado sólo tiene 1 contiguo pintado, estaba aislado, ahora hay "+CuadraditosAislados+" aislados."); } } else { // trace ("No está pintado."); } } // Usada en Variar: function ContarContiguosDeContiguoAlNewDespintado () { // ¿El contiguo indicado está pintado? // trace ("Analizando Cuadradito"+Fila2+"_"+Columna2+": "+eval("Cuadradito"+Fila2+"_"+Columna2)); if (eval("Cuadradito"+Fila2+"_"+Columna2) == 0) { // Sí, el recién despintado no estaba aislado: ElRecienDespintadoEstabaAislado = "No"; // trace ("Está pintado; el recién despintado no estaba aislado."); // Se contarán los contiguos de este (contiguo al recién...). ParteDeContarEtc(); // trace ("Ese contiguo ("+Fila2+"_"+Columna2+") al recién despintado tiene "+ContiguosPintados+" contiguos pintados."); // ¿Está aislado? if (ContiguosPintados == 0) { // Sí, aumentar el contador: CuadraditosAislados++; // trace ("El contiguo al recién despintado quedó aislado, ahora hay "+CuadraditosAislados+" aislados."); } } else { // trace ("No está pintado."); } } // En F3 se repite: function Variar () { // Repetir mientras no se produzca un dibujo ok: do { // Esto para modificar la variable que indica el color, // que es 0 o 1: ReferenciaAlColoraModificar = "ColordeCuadradito"+Puntero; ColoraModificar = eval(ReferenciaAlColoraModificar); // Esto para el color real: NuevoColor = new Color("Cuadradito"+Puntero); // ¿El cuadradito puede cambiar de color? if (ColoraModificar>0) { // Sí, hacer los cambios: // En la variable: set (ReferenciaAlColoraModificar, ColoraModificar-1); // Del color real: NuevoColor.setRGB(0); // trace (" Se pintó el cuadradito "+Puntero); // Asignarle el color de la 2nda manera: ObtenerColumnayFila(); set ("Cuadradito"+Fila+"_"+Columna, 0); // Incrementar contador de cuadraditos pintados en...: // la columna y fila donde se pintó: set (ColumnaRelevante, eval(ColumnaRelevante)+1); set (FilaRelevante, eval(FilaRelevante)+1); // Actualizar cantidad de cuadraditos pintados aislados: // De cada pintado al lado del recién pintado, // se verá si estaba aislado, // en cuyo caso disminuirá el contador. // Si no hay pintados al lado del nuevo, aumentará. // trace ("Se actualizará el contador de pintados aislados:"); // Esta variable puede cambiar, se refiere al recién pintado: ElRecienPintadoEstaAislado = "Sí"; // Para analizar a su izquierdo: Fila2 = Fila; Columna2 = Columna-1; // Si su izquierdo existe y está pintado, // entonces el actual no está aislado, // y se mira si el izquierdo de ese estaba aislado: // Cuántos de sus contiguos están pintados. // Si la cantidad es 1, estaba aislado, // el contador de Aislados baja. // Debido a que al pintar un cuadradito... // los de abajo y el de la derecha estarán despintados, // sólo se miran el de la izquierda y los de arriba: ContarContiguosDeContiguoAlNewPintado(); // Para analizar a su izquierdo de arriba: Fila2--; ContarContiguosDeContiguoAlNewPintado(); // Para analizar al de arriba: Columna2++; ContarContiguosDeContiguoAlNewPintado(); // Para analizar a su derecho de arriba: Columna2++; ContarContiguosDeContiguoAlNewPintado(); if (ElRecienPintadoEstaAislado == "Sí") { // trace("El recién pintado está aislado"); CuadraditosAislados++; } // trace(" El dibujo tiene "+CuadraditosAislados+" cuadraditos aislados"); // Actualizar contador de despintados // (contando desde MinPintado) CuadraditosDespintados--; // Para juzgar: // ¿El dibujo tiene cuadraditos pintados en toda columna y fila? Puntero2 = 0; // Esto puede que cambie: CuadraditoenCadaFyC = "Sí"; do { Puntero2 = Puntero2+1; // ¿La columna Puntero2 no tiene algún cuadradito pintado? if (eval("PintadosenC"+Puntero2)<1) { CuadraditoenCadaFyC = "No"; } else if (eval("PintadosenF"+Puntero2)<1) { // La fila Puntero2 no tiene algún cuadradito pintado. CuadraditoenCadaFyC = "No"; } } while (CuadraditoenCadaFyC == "Sí" && Puntero2<CuadraditosPorFila); // ¿El dibujo tiene cuadraditos pintados en toda columna y fila? if (CuadraditoenCadaFyC == "No") { // No, no mostrarlo y hacer otro: // trace (" No ocupa cada F y C, salteándolo."); DibujosPequeños++; // Actualizar MinCuadraditoPintado si corresponde: if (Puntero<MinCuadraditoPintado) { MinCuadraditoPintado = Puntero; // trace(Puntero); // Como ahora se cuenta un cuadradito extra, // que estaba despintado, el contador aumenta: CuadraditosDespintados++; // Si se llegó al punto en que los dibujos... // pueden ser simétricos a unos ya hechos: if (Puntero<CuadraditoCentraloCD) { // En el próximo dibujo se pintará el superior derecho: Puntero = CuadraditosPorFila; } else { // Preparar Puntero para generar el próximo dibujo: Puntero = MaxPosiciondePuntero; } } else { // Preparar Puntero para generar el próximo dibujo: Puntero = MaxPosiciondePuntero; } } else if (CuadraditosAislados>MaxCuadraditosAislados) { // trace (" Tiene demasiados cuadraditos pintados aislados: "+CuadraditosAislados+" salteándolo."); DibujosAislados++; // Preparar Puntero para generar el próximo dibujo: Puntero = MaxPosiciondePuntero; } else if (MinCuadraditoPintado<CuadraditoCentraloCD) { // El dibujo puede ser simétrico... // a otro ya mostrado. ¿Lo es? // Esto puede cambiar: DibujoEsSimetrico = "No"; // Captar valor (colores) de cada fila; // si alguno es menor al inverso, sí: PunteroDeFilas = 0; do { PunteroDeFilas++; PunteroDeColumnas = 0; PunteroInverso = CuadraditosPorFila; do { PunteroDeColumnas++; Valor = eval("Cuadradito"+PunteroDeFilas+"_"+PunteroDeColumnas); ValorInverso = eval("Cuadradito"+PunteroDeFilas+"_"+PunteroInverso); // trace("Valor: "+Valor); // trace("ValorInverso: "+ValorInverso); if (Valor<ValorInverso) { DibujoEsSimetrico = "Sí"; FilaFallada = PunteroDeFilas; PunteroDeFilas = CuadraditosPorFila; break; } else if (Valor>ValorInverso) { // Es ok: PunteroDeFilas = CuadraditosPorFila; break; } PunteroInverso--; } while (PunteroDeColumnas<CuadraditosPorFila); } while (PunteroDeFilas<CuadraditosPorFila); // Este if es probablemente innecesario, // porque se supone que el dibujo será simétrico u ok, // antes de que se terminen de comparar todas las filas. if (DibujoEsSimetrico == "Sí") { // trace (" El dibujo es simétrico a otro ya mostrado."); DibujosSimetricos++; // Al Puntero ponerlo al final de la fila... // captada como simétrica, para posiblemente... // evitar algunos otros dibujos simétricos: Puntero = CuadraditosPorFila*FilaFallada; } else if (CuadraditosDespintados<MinCuadraditosDespintados) { trace (" El dibujo tiene demasiados cuadraditos despintados: "+CuadraditosDespintados); DibujosDensos++; // Preparar Puntero para generar el próximo dibujo: Puntero = MaxPosiciondePuntero; } else { DibujosOk++; // trace (" Mostrando dibujo nro: "+DibujosOk); // Preparar Puntero para generar el próximo dibujo: Puntero = MaxPosiciondePuntero; play (); break; } } else if (CuadraditosDespintados<MinCuadraditosDespintados) { trace (" El dibujo tiene demasiados cuadraditos despintados: "+CuadraditosDespintados); DibujosDensos++; // Preparar Puntero para generar el próximo dibujo: Puntero = MaxPosiciondePuntero; } else { DibujosOk++; // trace (" Mostrando dibujo nro: "+DibujosOk); // Preparar Puntero para generar el próximo dibujo: Puntero = MaxPosiciondePuntero; play (); break; } } else { // Despintar un cuadradito, no viene al caso. } } while (true); }
Pero dudo que convenga poner por ahí una copia modificada de todo eso... Tendría que crear muchas funciones. No sé, joder ¿ideas?
|
|
|
|
|
|
|