Parece que con vuestra ayuda logré que se generen dibujos al azar pero siempre simétricos y siempre con 3 colores, ejemplo:

El gris no cuenta, es para separar los dibujos.
Pero el código me parece un lío en cuanto a las ecuaciones, creo que a veces las columnas y/filas se cuentan desde 0 y a veces desde 1, o sino, da igual ¿de qué manera los cálculos se vuelven más sencillos? ¿contando filas y/o columnas desde 0 o desde 1? ¿y a los cuadraditos me conviene nombrarlos desde 0 o desde 1?
De momento los tengo contados desde 1 así:
1 2 3...
Los dibujos también están contados así.
Bueno, dejo los códigos, simplifiquen las ecuaciones.
Esto coloca los dibujos, no los cuadraditos, probablemente sea irrelevante en la cuestión:
DibujosPorFila = 4;
// Cada cuadro será un dibujo, así que esto...
// luego sería MaxDibujo:
MaxCuadro = DibujosPorFila*DibujosPorFila;
CuadraditosPorFila = 6;
// Columna izquierda más cercana al centro...
// contámndolas desde 0:
ColumnaCentralIzquierda0 = Math.floor((CuadraditosPorFila-1)/2);
// Lo mismo pero derecha:
ColumnaCentralDerecha0 = Math.ceil((CuadraditosPorFila-1)/2);
// Contando desde 1:
ColumnaCentralDerecha1 = ColumnaCentralDerecha0+1;
ColumnaCentral0 = (CuadraditosPorFila-1)/2;
ColumnaCentral1 = (CuadraditosPorFila+1)/2;
MaxCuadradito = CuadraditosPorFila*CuadraditosPorFila;
LargoDeCuadraditos = 384/(CuadraditosPorFila*DibujosPorFila+DibujosPorFila-1);
LargoDeDibujos = CuadraditosPorFila*LargoDeCuadraditos;
DistintasMutaciones = Math.floor(MaxCuadro/CuadraditosPorFila);
Resto = MaxCuadro%CuadraditosPorFila;
PosiblesColores = [0xFFFFFF, 0x0000FF, 0x000000];
ColoresRequeridos = 3;
// Agregar y distribuir cuadros (que serán dibujos):
CuadrosColocados = 0;
Columna = 0;
Fila = 0;
do {
CuadrosColocados++;
// mCuadro tiene código.
attachMovie("mCuadro", "Dibujo"+CuadrosColocados, CuadrosColocados);
setProperty ("Dibujo"+CuadrosColocados, _x, 64+LargoDeDibujos*Columna+Columna*LargoDeCuadraditos);
setProperty ("Dibujo"+CuadrosColocados, _y, LargoDeDibujos*Fila+Fila*LargoDeCuadraditos);
Columna = Columna+1;
if (Columna == DibujosPorFila) {
Columna = 0;
Fila = Fila+1;
}
// Un ID usado en el botón de los dibujos:
set ("Dibujo"+CuadrosColocados+".ID", CuadrosColocados);
} while (CuadrosColocados<MaxCuadro);Esto es el código en mCuadros, o sea en los dibujos, es lo que genera las diferencias entre cada dibujo y lo que quiero simplificar:
// Agregar, distribuir cuadraditos y asignarles un color,
// de modo que queden coloreados simétricamente
// (espejo así | ):
CuadraditosColocados = 0;
Columna = 0;
Fila = 0;
trace ("Asignando colores para un nuevo dibujo");
do {
CuadraditosColocados = CuadraditosColocados+1;
attachMovie("mCuadradito", "Cuadradito"+CuadraditosColocados, CuadraditosColocados);
setProperty ("Cuadradito"+CuadraditosColocados, _x, Columna*_level0.LargoDeCuadraditos);
setProperty ("Cuadradito"+CuadraditosColocados, _y, Fila*_level0.LargoDeCuadraditos);
setProperty ("Cuadradito"+CuadraditosColocados, _width, _level0.LargoDeCuadraditos);
setProperty ("Cuadradito"+CuadraditosColocados, _height, _level0.LargoDeCuadraditos);
ColorDeCuadradito = new Color("Cuadradito"+CuadraditosColocados);
// Si el cuadradito está a la izquierda o en el centro:
if (Columna < _level0.ColumnaCentralDerecha0) {
// Asignar color al azar:
ColorDeCuadradito.setRGB(_level0.PosiblesColores[random(_level0.PosiblesColores.length)]);
// Incrementar el contador de cuadraditos de ese color:
Resumen = "Color"+ColorDeCuadradito;
set(Resumen, eval(Resumen)+1);
} else {
// trace ("Tiene simetría el "+CuadraditosColocados);
// Asignar el mismo color que su simétrico:
CuadraditoReflejo = (2*(Fila+1)-1)*_level0.CuadraditosPorFila+1-CuadraditosColocados;
ColoraReflejar = new Color("Cuadradito"+CuadraditoReflejo);
ColorDeCuadradito.setRGB(ColoraReflejar.getRGB());
}
Columna++;
if (Columna == _level0.CuadraditosPorFila) {
Columna = 0;
Fila = Fila+1;
// CuadraditoCentralDeLaFila = (_level0.CuadraditosPorFila*Fila+1+_level0.CuadraditosPorFila*(Fila+1))/2;
}
} while (CuadraditosColocados<_level0.MaxCuadradito);
// El dibujo debe tener la cantidad de colores...
// indicada por _level0.ColoresRequeridos. Por eso,
// y por practicidad, se asignará a cuadraditos al azar,
// cada uno de los colores, evitando reelegir cuadraditos.
// También se intentará conservar la simetría,
// así que los elegidos sólo estarán en el centro o...
// en la izquierda, en cuyo caso se copiará a la derecha:
Colores = 0;
MaxColumnaElegible = Math.floor(_level0.ColumnaCentral0);
do {
// Elegir cuadradito al azar:
ColumnaElegida = random(MaxColumnaElegible)+1;
// Esto es contando desde 0 por eficiencia al calcular:
FilaElegida = random(_level0.CuadraditosPorFila);
CuadraditoElegido = ColumnaElegida + _level0.CuadraditosPorFila*FilaElegida;
trace("CuadraditoElegido: "+CuadraditoElegido);
// Esto puede cambiar:
ElegidoValido = "Sí";
// Ver si ya fue elegido:
PunteroDeElegidos = 0;
while (Colores>PunteroDeElegidos) {
PunteroDeElegidos++;
trace("Comparando con el "+PunteroDeElegidos+", que es: "+eval("Elegido"+PunteroDeElegidos));
if (eval("Elegido"+PunteroDeElegidos) == CuadraditoElegido) {
trace("Repetido");
// Ya elegido, repetir el proceso para elegir otro:
ElegidoValido = "No";
// Terminar este loop:
PunteroDeElegidos = Colores;
}
}
if (ElegidoValido == "Sí") {
Colores++;
// Guardar en la lista al cuadradito elegido:
set("Elegido"+Colores, CuadraditoElegido);
trace("El recién elegido fue guardado en: Elegido"+Colores);
// Asignarle el color:
ColorDeCuadradito = new Color("Cuadradito"+CuadraditoElegido);
ColorDeCuadradito.setRGB(_level0.PosiblesColores[Colores-1]);
trace("Se le asignó el color "+_level0.PosiblesColores[Colores-1]);
trace("La cantidad de colores asignada es "+Colores);
// Si el cuadradito no está en la columna central:
if (ColumnaElegida-1 != _level0.ColumnaCentral0) {
// Se refleja:
CuadraditoReflejo = (2*(FilaElegida+1)-1)*_level0.CuadraditosPorFila+1-CuadraditoElegido;
trace("CuadraditoReflejo: "+CuadraditoReflejo);
ColorDelReflejo = new Color("Cuadradito"+CuadraditoReflejo);
ColorDelReflejo.setRGB(ColorDeCuadradito.getRGB());
}
}
} while (Colores<_level0.ColoresRequeridos);
// El botón queda del mismo tamaño que este dibujo:
setProperty (Boton, _width, getProperty(this, _width));
setProperty (Boton, _height, getProperty(this, _height));Si no entienden algo que precisan, pueden decirme e intentaré explicarlo.