Bubbles – OOP assignment

Ideation

For this assignment, I wanted to create something that was colorful and dynamic. My immediate thoughts went to something that would grow on the screen and somehow interact with other objects.

First iteration – without OOP

First, I just wanted to draw a circle on the screen at a fixed position and have it grow in size.
Once I finished this, I worked on creating an object for the circles so that I can have multiple of them on the screen using an array.

Second Iteration – OOP

I also wanted to add some randomness to the way the bubbles change, so I used random for creating a different starting position, radius, color, and growth rate. I removed the stroke because it looks neater.

Bubbles pop!

To make the bubbles pop, I did something similar to a coin flip but with tighter constraints so that they pop slower.

Pop them yourself

Click on the bubbles to pop them.

Find the code here and below:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
let bubbles = [];
function setup() {
createCanvas(800, 800);
for (let i = 0; i < 100; i++) {
let colorVals = color(
random(255),
random(255),
random(255),
random(100, 150)
);
let growth = random(1.5);
let diameter = random(5);
let timer = random(20);
let x = random(diameter, height - diameter);
let y = random(diameter, width - diameter);
bubbles.push(new Bubble(x, y, diameter, timer, growth, colorVals));
}
}
function draw() {
background(220);
for (let i = 0; i < bubbles.length; i++) {
bubbles[i].run();
}
}
function mousePressed() {
for (let i = bubbles.length - 1; i >= 0; i--) {
let popped = bubbles[i].pop();
if (popped) {
bubbles.splice(i, 1);
break;
}
}
}
class Bubble {
constructor(posX, posY, diameter, timer, growth, colorValues) {
this.color = color(colorValues);
this.size = diameter;
this.timer = timer;
this.growth = growth;
this.x = posX;
this.y = posY;
this.radius = this.size / 2;
}
run() {
this.draw();
this.update();
}
draw() {
noStroke();
fill(this.color);
circle(this.x, this.y, this.size);
}
update() {
this.size += this.growth;
this.radius = this.size / 2;
}
pop() {
let d = dist(mouseX, mouseY, this.x, this.y);
if (d < this.radius) {
return true;
}
}
}
let bubbles = []; function setup() { createCanvas(800, 800); for (let i = 0; i < 100; i++) { let colorVals = color( random(255), random(255), random(255), random(100, 150) ); let growth = random(1.5); let diameter = random(5); let timer = random(20); let x = random(diameter, height - diameter); let y = random(diameter, width - diameter); bubbles.push(new Bubble(x, y, diameter, timer, growth, colorVals)); } } function draw() { background(220); for (let i = 0; i < bubbles.length; i++) { bubbles[i].run(); } } function mousePressed() { for (let i = bubbles.length - 1; i >= 0; i--) { let popped = bubbles[i].pop(); if (popped) { bubbles.splice(i, 1); break; } } } class Bubble { constructor(posX, posY, diameter, timer, growth, colorValues) { this.color = color(colorValues); this.size = diameter; this.timer = timer; this.growth = growth; this.x = posX; this.y = posY; this.radius = this.size / 2; } run() { this.draw(); this.update(); } draw() { noStroke(); fill(this.color); circle(this.x, this.y, this.size); } update() { this.size += this.growth; this.radius = this.size / 2; } pop() { let d = dist(mouseX, mouseY, this.x, this.y); if (d < this.radius) { return true; } } }
let bubbles = [];

function setup() {
  createCanvas(800, 800);

  for (let i = 0; i < 100; i++) {
    let colorVals = color(
      random(255),
      random(255),
      random(255),
      random(100, 150)
    );
    let growth = random(1.5);
    let diameter = random(5);
    let timer = random(20);
    let x = random(diameter, height - diameter);
    let y = random(diameter, width - diameter);
    bubbles.push(new Bubble(x, y, diameter, timer, growth, colorVals));
  }
}

function draw() {
  background(220);

  for (let i = 0; i < bubbles.length; i++) {
    bubbles[i].run();
  }
}

function mousePressed() {
  for (let i = bubbles.length - 1; i >= 0; i--) {
    let popped = bubbles[i].pop();
    if (popped) {
      bubbles.splice(i, 1);
      break;
    }
  }
}

class Bubble {
  constructor(posX, posY, diameter, timer, growth, colorValues) {
    this.color = color(colorValues);
    this.size = diameter;
    this.timer = timer;
    this.growth = growth;
    this.x = posX;
    this.y = posY;
    this.radius = this.size / 2;
  }

  run() {
    this.draw();
    this.update();
  }

  draw() {
    noStroke();
    fill(this.color);
    circle(this.x, this.y, this.size);
  }

  update() {
    this.size += this.growth;
    this.radius = this.size / 2;
  }

  pop() {
    let d = dist(mouseX, mouseY, this.x, this.y);
    if (d < this.radius) {
      return true;
    }
  }
}

 

Leave a Reply