Array true o false cambio colore

Ciao a tutti!
Ho un blocco per quanto riguarda un codice che sto scrivendo, il mio obbiettivo è quello di far in modo che nel momento in cui ho un valore true i rettangoli assumano un determinato colore e nel caso fossero false invece un altro colore…
L’unico problema è che non saprei come fare :frowning:
Qualcuno sa darmi una mano?

float randomNum;
boolean[] contenitore = new boolean [5];

float[] cellPos = {0, 0};  
float[] cellSize = {400/5, 400};  


color color1 = #2179db;
color color2 = #2621db;

void setup() {
  surface.setTitle("esercizio Array");
  size(400, 400);
  background(127);
  frameRate(1);
}

void draw() {
  for (int i = 0; i <contenitore.length; i++) {
    randomNum = random(100);
    if (randomNum < 50) {
      contenitore [i] = true;
      rect(0, 0, width/5, height = width );
      rect(80, 0, width/5, height = width);
      rect(160, 0, width/5, height = width);
      rect(240, 0, width/5, height = width);
      rect(320, 0, width/5, height = width);
    } else {
      contenitore[i] = false;
    }

    stroke(0);
  }

  printArrayValues();
}

void printArrayValues() {
  String s = "";
  for (int i=0; i<contenitore.length; i++) {
    s += "[" + i + "]" + contenitore[i] + "\t";
  }
  println(s);
}

Grazie a chiunque voglia aiutarmi :slight_smile:

1 Like

here is an idea

instead of

  • drawing all rects in the for loop every time
  • we better draw only one rect per one go of the for-loop
float randomNum;
boolean[] contenitore = new boolean [5];

float[] cellPos = {0, 0};  
float[] cellSize = {400/5, 400};  


color color1 = #2179db;
color color2 = #2621db;

void setup() {
  size(400, 400);
  surface.setTitle("esercizio Array");
  background(127);
  frameRate(1);
}

void draw() {
  for (int i = 0; i <contenitore.length; i++) {
    randomNum = random(100);
    if (randomNum < 50) {
      contenitore [i] = true;
    } else {
      contenitore[i] = false;
    }

    stroke(0);
    if (contenitore [i])
      fill(color1);
    else fill(color2); 

    // calc position from i (i*80)
    rect(i*80, 0, width/5, height);
    //rect(80, 0, width/5, height = width);
    //rect(160, 0, width/5, height = width);
    //rect(240, 0, width/5, height = width);
    //rect(320, 0, width/5, height = width);
  }//for 

  printArrayValues();
}

void printArrayValues() {
  String s = "";
  for (int i=0; i<contenitore.length; i++) {
    s += "[" + i + "]" + contenitore[i] + "\t";
  }
  println(s);
}
//
2 Likes

Buenas, con el nivel de italiano que duelingo me proporcionó creo que entiendo lo que quieres hacer :sweat_smile:.

Lo primero, ¿esto es una tarea (homework) ?, si es así deberías decirlo cuando preguntes para saber como contestarte :face_with_monocle:

Y bueno, relativo al código y lo que quieres hacer, hay varias maneras de hacerlo, por ejemplo usando objetos/clases; pero para esta solución lo he hecho de otra manera :cowboy_hat_face::

:thinking: Lo primero que tienes que saber es como colorear un rectángulo (para poder cambiarle el color) :purple_heart: :blue_heart: :green_heart: :yellow_heart:, lo siguiente, si vas a dibujar rectángulos según una regla (cada 80 píxeles en el eje X en este caso) ahorra líneas de código escribíendolo en un for :brain: , y por último, para dibujar cada rectángulo, según su booleano, de un color u otro, tendrás que comprobar si su índice es verdadero o falso :raised_hands:.

Dicho esto, te paso mi solución :stuck_out_tongue_winking_eye::

float randomNum;
boolean[] contenitore = new boolean [5];

float[] cellPos = {0, 0};  
float[] cellSize = {400/5, 400};  


color color1 = #2179db;
color color2 = #2621db;

void setup() {
  surface.setTitle("esercizio Array");
  size(400, 400);
  background(127);
  frameRate(1);
}

void draw() {
  for (int i = 0; i <contenitore.length; i++) {
    randomNum = random(100);
    if (randomNum < 50) {
      contenitore [i] = true;
    } else {
      contenitore[i] = false;
    }
    if(contenitore[i])
      fill(color1);
      else
      fill(color2);
    rect(i*80,0, width/5, height = width );
    
    stroke(0);
  }
  
  printArrayValues();
}

void printArrayValues() {
  String s = "";
  for (int i=0; i<contenitore.length; i++) {
    s += "[" + i + "]" + contenitore[i] + "\t";
  }
  println(s);
}

También, como nota, comentar que si sólo es para dibujarlos una vez, no hace falta guardar el booleano en un array, puedes, simplemente, si el número rándom es menor que 50, fill(color1), sin necesidad de guardarlo en el array :crazy_face:.

Espero que te sirva :four_leaf_clover:

3 Likes

Grazie mille!! ti sono davvero grata :smiling_face_with_three_hearts:

1 Like

Grazie mille!!
Molto gentile, ti ringrazio del tuo aiuto :smiling_face_with_three_hearts: