Por ahora en mi programa:
1eros dibujos en 4 cuadros de 3*3 cuadraditos:

1eros dibujos en 9 cuadros de 4*4 cuadraditos, queda más bonito no sé por qué:

Intentaré explicar, si no se entiende pregunten.
// Si cada cuadradito tuviera 2 colores posibles:
DibujosPosibles = Math.pow(2, Cuadraditos);
// Esa cantidad se dividirá según la cantidad de cuadros,
// de modo que cada cuadro mostrará la misma cantidad de...
// dibujos, pero distintos a los de otros cuadros:
Disminucion = Math.floor(DibujosPosibles/Cuadros);
// Se llama disminución porque se comenzará mostrando...
// el dibujo que según el modo conque los numero,
// es el último, y se irá disminuyendo:
DibujoaMostrar = DibujosPosibles-1;En un cuadro de 3*3 cuadraditos hay 512 dibujos posibles.
Se quiere que 512/4 se muestren en cada cuadro.
Se debe calcular qué dibujo mostrará el 1er cuadro, qué dibujo mostrará el 2ndo, y así.
Podría ser:
1er cuadro: Dibujo nro 1
2ndo cuadro: Dibujo nro 129
3er cuadro: Dibujo nro 257
4to cuadro: Dibujo nro 385
El nro de dibujo que muestre cada cuadro irá aumentando, así que en teoría cuando el 1er cuadro muestre el dibujo
128, el 4to mostrará el
512.
Error señalado por Richard, corregido.Como el negro se puede asignar fácil como 0, puse que un cuadradito negro se considere 0 y uno blanco 1.
Y quiero que los dibujos empiecen en blanco.
Si quiero averiguar cómo es un dibujo, por ejemplo el nro 385, un método es convertir ese número en binario.
Es un poco problemático porque los dibujos en blanco, que son los 1eros, son los que tienen más valor, así que en vez de ir aumentando el dibujo a mostrar lo disminuyo:
1er cuadro: Dibujo nro 512
2ndo cuadro: Dibujo nro 384
3er cuadro: Dibujo nro 256
4to cuadro: Dibujo nro 128
Pero en binario 512 tiene 10 dígitos, y mis dibujos 9, lo cual sucede porque en el conteo de binarios el 0 es un valor, pero en mis dibujos no existe el dibujo nro 0. Por eso sí los contaré desde 0, entonces el 1er dibujo que se muestra es el nro 511, que se traduce como 111111111.
¡Todo eso ya está hecho! Ya lo tengo. Acá, es parte del código de cuando se insertan cuadros:
// Se pintarán de modo que muestren el dibujo...
// acorde a la división de dibujos; averiguarlo:
// Averiguar cómo es en binario:
DibujoEnBinario = "";
Resto = DibujoaMostrar;
while (Resto>0) {
DibujoEnBinario = DibujoEnBinario+Resto%2;
Resto = Math.floor(Resto/2);
}
// Agregar 0s a DibujoEnBinario si hacen falta:
while (DibujoEnBinario.length<Cuadraditos) {
DibujoEnBinario = DibujoEnBinario+0;
}
(...)
DibujoaMostrar = DibujoaMostrar-Disminucion;Eso se repite para cada cuadro insertado. O sea, en cada repetición se calcula cómo es en binario el dibujo a mostrar, y al final se obtiene el siguiente dibujo (en decimal) a mostrar.
Lo que ahora quiero lograr es que el 1er dibujo, en vez de ser todo blanco, sea algo así: Γo sea, por ejemplo en el caso de cuadros de 3*3:
000
011
011
Debo:
- Obtener el número binario o decimal correspondiente a ese dibujo según la cantidad de cuadros y cuadraditos.- Si es binario, convertirlo a decimal.
- Al total de dibujos posibles, restarle el número decimal obtenido.
Luego ya el programa funcionaría como está.
¿Cómo lo hago?
Se me ocurre algo como:
Al dibujo a mostrar, siendo todo blanco, ya tengo código que lo calcula, en este caso es:
DibujoaMostrar = 111111111;
Luego:
Convertirlo en texto.
FilaoColumna = 1;
Repetir
// Para crear la línea en columnas:
Su caracter nro (FilaoColumna) convertirlo en 0
// Para crear la línea en filas:
Su caracter nro (FilaoColumna*Cuadraditos) convertirlo en 0
FilaoColumna++
mientras FilaoColumna < CuadraditosPorFilaTendría que probarlo. Al principio no se me ocurría. Igual ¿no hay algo más eficiente, directo, una ecuación que resulte ese número?