elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Código lioso, hacerlo más eficiente.
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Código lioso, hacerlo más eficiente.  (Leído 76 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.707


Hackentifiko!


Ver Perfil
Código lioso, hacerlo más eficiente.
« en: Hoy a las 08:23 »

Código
  1. // Usada ahora y cada vez que cambia la cantidad de cuadros o cuadraditos por fila:
  2. function InsertarCuadros () {
  3. AjustarVariables();
  4. NroDelCuadroaColocar = 0;
  5. // Sus columnas y filas se cuentan desde 0 también:
  6. ColumnaDeCuadro = 0;
  7. FilaDeCuadro = 0;
  8. do {
  9. Cuadro_ = "Cuadro"+NroDelCuadroaColocar;
  10. attachMovie("sCuadro", Cuadro_, NroDelCuadroaColocar);
  11. setProperty (Cuadro_, _x, LargoDeCuadros*ColumnaDeCuadro+ColumnaDeCuadro*LargoDeCuadraditos);
  12. setProperty (Cuadro_, _y, LargoDeCuadros*FilaDeCuadro+FilaDeCuadro*LargoDeCuadraditos);
  13. ColumnaDeCuadro++;
  14. if (ColumnaDeCuadro == CuadrosPorFila) {
  15. ColumnaDeCuadro = 0;
  16. FilaDeCuadro++;
  17. }
  18. // Se agregarán y distribuirán cuadraditos en el cuadro...
  19. // recién agregado, numerándolos del mismo modo:
  20. NroDelCuadraditoaColocar = 0;
  21. // Sus columnas y filas se cuentan desde 0:
  22. ColumnaDeCuadradito = 0;
  23. FilaDeCuadradito = 0;
  24. // p representa un ".", "punto".
  25. Cuadro_pCuadradito = Cuadro_+".Cuadradito";
  26. if (Modo == "Cuadrados" or Modo == "Rectangulos") {
  27. // Inicialmente los cuadraditos del cuadro tendrán...
  28. // el mismo color:
  29. ColorDelCuadro = PosiblesColores[random(PosiblesColores.length)];
  30. // trace("ColorDelCuadro: "+ColorDelCuadro);
  31. }
  32. do {
  33. eval(Cuadro_).attachMovie("sCuadradito", "Cuadradito"+NroDelCuadraditoaColocar, NroDelCuadraditoaColocar);
  34. Cuadro_pCuadradito_ = Cuadro_pCuadradito+NroDelCuadraditoaColocar;
  35. setProperty (Cuadro_pCuadradito_, _x, ColumnaDeCuadradito*LargoDeCuadraditos);
  36. setProperty (Cuadro_pCuadradito_, _y, FilaDeCuadradito*LargoDeCuadraditos);
  37. setProperty (Cuadro_pCuadradito_, _width, LargoDeCuadraditos);
  38. setProperty (Cuadro_pCuadradito_, _height, LargoDeCuadraditos);
  39. ColumnaDeCuadradito++;
  40. if (ColumnaDeCuadradito == CuadraditosPorFila) {
  41. ColumnaDeCuadradito = 0;
  42. FilaDeCuadradito++;
  43. }
  44. if (Modo == "MuchoAzar") {
  45. ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_);
  46. ParaColorDeCuadradito.setRGB(PosiblesColores[random(PosiblesColores.length)]);
  47. } else if (Modo == "Cuadrados" or Modo == "Rectangulos") {
  48. ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_);
  49. ParaColorDeCuadradito.setRGB(ColorDelCuadro);
  50. }
  51. NroDelCuadraditoaColocar++;
  52. } while (NroDelCuadraditoaColocar<Cuadraditos);
  53. // Un ID usado en el botón de los cuadros:
  54. set (Cuadro_+".ID", NroDelCuadroaColocar);
  55. // El botón para transmitir y mutar queda del mismo...
  56. // tamaño que el cuadro:
  57. setProperty (Cuadro_+".Boton", _width, LargoDeCuadros);
  58. setProperty (Cuadro_+".Boton", _height, LargoDeCuadros);
  59. if (Modo == "Cuadrados") {
  60. GenerarCuadrados();
  61. } else if (Modo == "Rectangulos") {
  62. GenerarRectangulos();
  63. }
  64. NroDelCuadroaColocar++;
  65. } while (NroDelCuadroaColocar<Cuadros);
  66. if (Modo == "AzarrazA") {
  67. RepintarCuadrosAzarrazA();
  68. } else if (Modo == "AzarAzar") {
  69. RepintarCuadrosAzarAzar();
  70. }
  71. // delete ColorDelCuadro;
  72. Fondo.CargaParaNuevosDibujos = 0;
  73. }
  74. // Usada en InsertarCuadros cuando Modo es Cuadrados y en RepintarCuadrosCuadrados:
  75. function GenerarCuadrados () {
  76. // Pintar cuadraditos de modo que se forme un cuadrado:
  77. // Elegir un color distinto al color del cuadro:
  78. // trace("ColorDelCuadro: "+ColorDelCuadro);
  79. do {
  80. ColorDeImagen = PosiblesColores[random(PosiblesColores.length)];
  81. } while (ColorDelCuadro == ColorDeImagen);
  82. // trace("ColorDeImagen: "+ColorDeImagen);
  83. // Determinar su base y altura:
  84. LargoDeImagen = random(MaxLargoDeImagenes)+1;
  85. // trace ("LargoDeImagen: "+LargoDeImagen);
  86. // Determinar dónde empieza:
  87. FilaInicialDeImagen = random(CuadraditosPorFila-LargoDeImagen+1);
  88. ColInicialDeImagen = random(CuadraditosPorFila-LargoDeImagen+1);
  89. FilaFinalDeImagen = FilaInicialDeImagen+LargoDeImagen-1;
  90. ColFinalDeImagen = ColInicialDeImagen+LargoDeImagen-1;
  91. // Pintar los cuadraditos de esa imagen:
  92. FilaDelPintandose = FilaInicialDeImagen;
  93. while (FilaDelPintandose <= FilaFinalDeImagen) {
  94. ColumnaDelPintandose = ColInicialDeImagen;
  95. while (ColumnaDelPintandose <= ColFinalDeImagen) {
  96. // Averiguar qué cuadradito es:
  97. NroDelCuadraditoaPintar = FilaDelPintandose*CuadraditosPorFila+ColumnaDelPintandose;
  98. ParaColorDeCuadradito = new Color(Cuadro_pCuadradito+NroDelCuadraditoaPintar);
  99. ParaColorDeCuadradito.setRGB(ColorDeImagen);
  100. ColumnaDelPintandose++;
  101. }
  102. FilaDelPintandose++;
  103. }
  104. }

El problema que veo por ahora es que con esto
Código
  1. } else if (Modo == "Cuadrados" or Modo == "Rectangulos") {
  2. ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_);
  3. ParaColorDeCuadradito.setRGB(ColorDelCuadro);
  4.  
Cuando el modo es Cuadrados o Rectangulos asigna un color X a cada cuadradito, o sea todos quedan de color X.
Pero luego hace
Código
  1. if (Modo == "Cuadrados") {
  2. GenerarCuadrados();
  3. } else if (Modo == "Rectangulos") {
  4. GenerarRectangulos();
  5. }
  6.  
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.
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
  1. function RepintarCuadrosCuadrados () {
  2. NroDelCuadroaRepintar = 0;
  3. do {
  4. NroDelCuadraditoaRepintar = 0;
  5. // p representa un ".", "punto".
  6. Cuadro_pCuadradito = "Cuadro"+NroDelCuadroaRepintar+".Cuadradito";
  7. // Inicialmente los cuadraditos del cuadro tendrán el mismo color:
  8. ColorDelCuadro = PosiblesColores[random(PosiblesColores.length)];
  9. do {
  10. Cuadro_pCuadradito_ = Cuadro_pCuadradito+NroDelCuadraditoaRepintar;
  11. ParaColorDeCuadradito = new Color(Cuadro_pCuadradito_);
  12. ParaColorDeCuadradito.setRGB(ColorDelCuadro);
  13. NroDelCuadraditoaRepintar++;
  14. } while (NroDelCuadraditoaRepintar<Cuadraditos);
  15. NroDelCuadroaRepintar++;
  16. GenerarCuadrados();
  17. } while (NroDelCuadroaRepintar<Cuadros);
  18. }
Se usa cada cierto tiempo.

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
algo así es lo que tengo. Nada hay ahí sobre cómo pintarlos. Poner los ifs luego sería repetir whiles, por ejemplo:
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.


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