fractalkitty looking for math? fractalkitty.com

weekly creative coding

nope

#random#trig#text#interactive#animation#wcc

cArraynopeArray

let cArray;
let col, row;
let size = 40;
let nopeArray = [];
function setup() {
  createCanvas(windowWidth, windowHeight);
  r = random(150, 255);
  g = random(150, 255);
  b = random(150, 255);
  size = random(120, 200);
  row = int(height / (size + 6));
  col = int(width / (size + 6));
  cArray = [];
  nopeArray = [];
  rectMode(CENTER);
  cnt = 0;
  truei = int(random(0, row));
  truej = int(random(0, col));
  for (let i = 0; i < row; i++) {
    for (let j = 0; j < col; j++) {
      if (i == truei && j == truej) {
        theone = true;
        theonei = cnt;
      } else {
        theone = false;
      }

      cArray[cnt] = {
        x: size / 1.5 + j * (size + 5),
        y: size / 1.5 + i * (size + 5),
        truth: theone,
        checked: false
      };
      nopeArray[cnt] = {
        x: random(-20, width - 50),
        y: random(0, height - 20),
        r: random(100, 255),
        g: random(0, 50),
        b: random(0, 50),
        size: random(12, 100)
      };
      cnt++;
    }
  }
}

function draw() {
  background(r, g, b);
  nChecked = 0;
  for (let i = 0; i < cArray.length; i++) {
    if (cArray[i].checked) {
      nChecked++;
    }
  }
  if (nChecked == cArray.length) {
    cArray[floor(random(0, cArray.length - 0.001))].checked = false;
  }

  for (let i = 0; i < cArray.length; i++) {
    noStroke();
    fill(r - 100, g - 100, b - 100, 210);
    rect(cArray[i].x + 0.5, cArray[i].y + 0.5, size + 1, size + 1, 2, 2, 2, 2);

    if (cArray[i].checked) {
      if (cArray[i].truth) {
        fill(100, 222, 112);
      } else {
        fill(200, 0, 0);
      }
    } else {
      fill(r + 20, g + 20, b + 20);
    }

    rect(cArray[i].x, cArray[i].y, size, size, 2, 2, 2, 2);
  }
  for (let i = 0; i < cArray.length; i++) {
    if (cArray[i].checked) {
      if (cArray[i].truth) {
        fill(100, 222, 112);
        stroke(100, 222, 112);
        textSize(120);
        text("nope", width / 2, height / 2);
      } else {
        fill(nopeArray[i].r, nopeArray[i].g, nopeArray[i].b);
        stroke(nopeArray[i].r, nopeArray[i].g, nopeArray[i].b);
        textSize(nopeArray[i].size);
        if (cArray[theonei].checked) {
          text("nope", nopeArray[i].x, nopeArray[i].y);
        } else {
          text(
            "nope",
            nopeArray[i].x +
              100 * Math.cos(((frameCount / 2000) * nopeArray[i].size) / 3),
            nopeArray[i].y +
              100 * Math.sin(((frameCount / 2000) * nopeArray[i].size) / 3)
          );
        }
      }
    }
  }
}

function mousePressed() {
  for (let i = 0; i < cArray.length; i++) {
    if (
      mouseX >= cArray[i].x - size / 2 &&
      mouseX <= cArray[i].x + size / 2 &&
      mouseY >= cArray[i].y - size / 2 &&
      mouseY <= cArray[i].y + size / 2
    ) {
      cArray[i].checked = !cArray[i].checked;
    }
  }
}

function windowResized() {
  setup();
}