Código
// Usada ahora y cada vez que cambia la cantidad de cuadros o cuadraditos por fila: function InsertarCuadros () { AjustarVariables(); NroDelCuadroaColocar = 0; // Sus columnas y filas se cuentan desde 0 también: ColumnaDeCuadro = 0; FilaDeCuadro = 0; do { Cuadro_ = "Cuadro"+NroDelCuadroaColocar; attachMovie("sCuadro", Cuadro_, NroDelCuadroaColocar); setProperty (Cuadro_, _x, LargoDeCuadros*ColumnaDeCuadro+ColumnaDeCuadro*LargoDeCuadraditos); setProperty (Cuadro_, _y, LargoDeCuadros*FilaDeCuadro+FilaDeCuadro*LargoDeCuadraditos); ColumnaDeCuadro++; if (ColumnaDeCuadro == CuadrosPorFila) { ColumnaDeCuadro = 0; FilaDeCuadro++; } // Se agregarán y distribuirán cuadraditos en el cuadro... // recién agregado, numerándolos del mismo modo: NroDelCuadraditoaColocar = 0; // Sus columnas y filas se cuentan desde 0: ColumnaDeCuadradito = 0; FilaDeCuadradito = 0; // p representa un ".", "punto". Cuadro_pCuadradito = Cuadro_+".Cuadradito"; if (Modo == "Cuadrados" or Modo == "Rectangulos") { // Inicialmente los cuadraditos del cuadro tendrán... // el mismo color: ColorDelCuadro = PosiblesColores[random(PosiblesColores.length)]; // trace("ColorDelCuadro: "+ColorDelCuadro); } do { eval(Cuadro_).attachMovie("sCuadradito", "Cuadradito"+NroDelCuadraditoaColocar, NroDelCuadraditoaColocar); Cuadro_pCuadradito_ = Cuadro_pCuadradito+NroDelCuadraditoaColocar; setProperty (Cuadro_pCuadradito_, _x, ColumnaDeCuadradito*LargoDeCuadraditos); setProperty (Cuadro_pCuadradito_, _y, FilaDeCuadradito*LargoDeCuadraditos); setProperty (Cuadro_pCuadradito_, _width, LargoDeCuadraditos); setProperty (Cuadro_pCuadradito_, _height, LargoDeCuadraditos); ColumnaDeCuadradito++; if (ColumnaDeCuadradito == CuadraditosPorFila) { ColumnaDeCuadradito = 0; FilaDeCuadradito++; } if (Modo == "MuchoAzar") { ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_); ParaColorDeCuadradito.setRGB(PosiblesColores[random(PosiblesColores.length)]); } else if (Modo == "Cuadrados" or Modo == "Rectangulos") { ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_); ParaColorDeCuadradito.setRGB(ColorDelCuadro); } NroDelCuadraditoaColocar++; } while (NroDelCuadraditoaColocar<Cuadraditos); // Un ID usado en el botón de los cuadros: set (Cuadro_+".ID", NroDelCuadroaColocar); // El botón para transmitir y mutar queda del mismo... // tamaño que el cuadro: setProperty (Cuadro_+".Boton", _width, LargoDeCuadros); setProperty (Cuadro_+".Boton", _height, LargoDeCuadros); if (Modo == "Cuadrados") { GenerarCuadrados(); } else if (Modo == "Rectangulos") { GenerarRectangulos(); } NroDelCuadroaColocar++; } while (NroDelCuadroaColocar<Cuadros); if (Modo == "AzarrazA") { RepintarCuadrosAzarrazA(); } else if (Modo == "AzarAzar") { RepintarCuadrosAzarAzar(); } // delete ColorDelCuadro; Fondo.CargaParaNuevosDibujos = 0; } // Usada en InsertarCuadros cuando Modo es Cuadrados y en RepintarCuadrosCuadrados: function GenerarCuadrados () { // Pintar cuadraditos de modo que se forme un cuadrado: // Elegir un color distinto al color del cuadro: // trace("ColorDelCuadro: "+ColorDelCuadro); do { ColorDeImagen = PosiblesColores[random(PosiblesColores.length)]; } while (ColorDelCuadro == ColorDeImagen); // trace("ColorDeImagen: "+ColorDeImagen); // Determinar su base y altura: LargoDeImagen = random(MaxLargoDeImagenes)+1; // trace ("LargoDeImagen: "+LargoDeImagen); // Determinar dónde empieza: FilaInicialDeImagen = random(CuadraditosPorFila-LargoDeImagen+1); ColInicialDeImagen = random(CuadraditosPorFila-LargoDeImagen+1); FilaFinalDeImagen = FilaInicialDeImagen+LargoDeImagen-1; ColFinalDeImagen = ColInicialDeImagen+LargoDeImagen-1; // Pintar los cuadraditos de esa imagen: FilaDelPintandose = FilaInicialDeImagen; while (FilaDelPintandose <= FilaFinalDeImagen) { ColumnaDelPintandose = ColInicialDeImagen; while (ColumnaDelPintandose <= ColFinalDeImagen) { // Averiguar qué cuadradito es: NroDelCuadraditoaPintar = FilaDelPintandose*CuadraditosPorFila+ColumnaDelPintandose; ParaColorDeCuadradito = new Color(Cuadro_pCuadradito+NroDelCuadraditoaPintar); ParaColorDeCuadradito.setRGB(ColorDeImagen); ColumnaDelPintandose++; } FilaDelPintandose++; } }
El problema que veo por ahora es que con esto
Código
Cuando el modo es Cuadrados o Rectangulos asigna un color X a cada cuadradito, o sea todos quedan de color X.
} else if (Modo == "Cuadrados" or Modo == "Rectangulos") { ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_); ParaColorDeCuadradito.setRGB(ColorDelCuadro);
Pero luego hace
Código
y esas funciones lo que hacen es pintar cuadraditos de modo que se forme lo que dice, pero entonces antes algunos se pintaron en vano.
if (Modo == "Cuadrados") { GenerarCuadrados(); } else if (Modo == "Rectangulos") { GenerarRectangulos(); }
Digamos que al inicio todos se pintaron de rojo.
Luego algunos se pintan de negro.
Esos algunos se habían pintado de rojo antes, eso fue en vano ¿cómo pintar solo 1 vez cada uno, de forma eficiente?
Es que el programa se va complicando, me quedó así, hay varios "modos".
El modo cuadrados y el modo rectángulos ya lo expliqué, pero también está esto
Código
Se usa cada cierto tiempo.
function RepintarCuadrosCuadrados () { NroDelCuadroaRepintar = 0; do { NroDelCuadraditoaRepintar = 0; // p representa un ".", "punto". Cuadro_pCuadradito = "Cuadro"+NroDelCuadroaRepintar+".Cuadradito"; // Inicialmente los cuadraditos del cuadro tendrán el mismo color: ColorDelCuadro = PosiblesColores[random(PosiblesColores.length)]; do { Cuadro_pCuadradito_ = Cuadro_pCuadradito+NroDelCuadraditoaRepintar; ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_); ParaColorDeCuadradito.setRGB(ColorDelCuadro); NroDelCuadraditoaRepintar++; } while (NroDelCuadraditoaRepintar<Cuadraditos); NroDelCuadroaRepintar++; GenerarCuadrados(); } while (NroDelCuadroaRepintar<Cuadros); }
Necesito, en el caso de insertar:
- que se inserten los cuadros y los cuadraditos. Eso tiene 2 whiles, uno varía qué cuadro se inserta, y el otro qué cuadradito (cuadro es como tablero y cuadradito casilleros, tenemos entonces muchos tableros con casilleros). Eso parece bien.
Código:
Repetir
insertar cuadro x
repetir
insertar cuadradito y
mientras y <= cuadraditos necesarios
mientras x <= cuadros necesarios
Código:
Repetir
x++
insertar cuadro x
y=0
repetir
y++
insertar cuadradito y (del cuadro x)
mientras y <= cuadraditos necesarios
mientras x <= cuadros necesarios
si modo == cuadrados
Repetir
x++
señalar cuadro x
y=0
repetir
pintar cuadradito y (del cuadro x)
mientras y <= cuadraditos necesarios
mientras x <= cuadros necesarios
sino si modo == rectangulos...
Ponerlos antes fue lo que intenté más o menos... en fin, me cuesta entenderlo, ergo explicarlo también.
Imagen de muestra:

Sería algo como:
Código:
Repetir
x++
insertar cuadro x
y = 0
si modo es cuadrados o rectangulos
elegir color de fondo
elegir color de la imagen
elegir su posición, largo y altura
repetir
insertar cuadradito y
si modo es MuchoAzar
asignarle color al azar
sino si modo es cuadrados
si el cuadradito es parte del cuadrado
asignarle el color de la imagen
sino
asignarle el color de fondo
sino si modo es rectángulos
si el cuadradito es parte del rectángulos
asignarle el color de la imagen
sino
asignarle el color de fondo
sino si modo es azarraza (simetría con espejo vertical)
si el cuadradito está a la izquierda o en la columna central
asignarle un color al azar
sino
asignarle el color del cuadradito simétrico
sino si modo es azarazar (simetría con espejo horizontal)
si el cuadradito está arriba de la fila central o en ella
asignarle un color al azar
sino
asignarle el color del cuadradito simétrico
mientras y <= cuadraditos necesarios
mientras x <= cuadros necesarios
Y los códigos para repintar (que no implican insertar) serían parecidos, sin ifs, por ejemplo repintar cuadrados:
Código:
Repetir
x++
señalar cuadro x
y = 0
elegir color de fondo
elegir color de la imagen
elegir su posición, largo y altura
repetir
señalar cuadradito y
si el cuadradito es parte del cuadrado
asignarle el color de la imagen
sino
asignarle el color de fondo
mientras y <= cuadraditos necesarios
mientras x <= cuadros necesarios
Bueno, ya que en teoría lo resolví ¿alguien quiere programarlo usando las palabras y fórmulas que mostré?
Entiendo que no se hacen tareas, pero si la tarea de entender qué rayos había que hacer la hice... no debería estar mal pedir la otra parte.
Si nadie lo hace, lo haré, pero estoy algo ocupado con generar circulos.





Autor



En línea
