//Corn Popper by Shane Logtenberg 991435131
//Click and drag the handle to move corn popper. balls will bounce in dome.
//"Enjoy your toy, baby."
int aX = 150;
int handleX = 2;
int handleY = 126;
int handleX2 = 28;
int handleY2 = 153;
boolean click = false;
int pX;
float x0= aX, x1= aX, x2 = aX, x3 = aX;
float y0= 315, y1= 315, y2 = 315, y3 = 315;
float yspeed0, yspeed1, yspeed2 = 0, yspeed3 = 0;
float xspeed0, xspeed1, xspeed2 = 0, xspeed3 = 0;
float gravity =0.9;
boolean click0, click1, click2, click3 = false;
void setup() {
size (400, 400);
}
void draw() {
//1 Make background
carpet();
//2 Draw initial Corn Popper position depending on handle position
aX = handleX+148;
popper(aX);
//3 draw popping balls
drawBalls();
mouseClick();
moveRed();
moveYellow();
moveBlue();
moveGreen();
}
// If mouse is over handle, and is clicked, then handle is held
void mouseDragged() {
if (pmouseX >= handleX && pmouseX <= handleX2 && pmouseY >= handleY && pmouseY <= handleY2) {
click = true;
}
//If handle is held, moving the mouse will move the handle and corn popper.
if (click == true) {
handleX = pmouseX;
handleX2 = pmouseX + 26;
}
// Keep handle and corn popper on screen
if (handleX > 202) {
handleX = 202;
handleX2 = 228;
}
if (pmouseX < 0) {
handleX = 2;
handleX2 = 28;
}
}
//If mouse is released, handle is not held
void mouseReleased() {
click = false;
}
void popper(int pX) {
ellipseMode(CENTER);
rectMode(CORNER);
// draw handle
fill(0, 153, 204);
stroke(0);
strokeWeight(1);
quad(pX-130, 140, pX-140, 140, pX-50, 340, pX-50, 320);
ellipse(pX-135, 140, 25, 25);
// draw popper
fill(255, 255, 255);
ellipse(pX, 350, 60, 60);
rect(pX-50, 315, 100, 25);
arc(pX, 340, 100, 20, 0, PI);
noFill();
arc(pX, 315, 100, 20, 0, PI);
// draw dome
stroke(0, 153, 204, 70);
fill(0, 153, 204, 20);
arc(aX, 320, 100, 140, PI, 2*PI);
arc(aX, 320, 80, 10, 0, PI);
// draw wheel
stroke(0);
fill(255, 0, 0);
ellipse(pX, 372, 40, 40);
stroke(170, 0, 0);
strokeWeight(3);
ellipse(pX, 372, 20, 20);
//draw highlight
noFill();
stroke(255);
strokeWeight(1);
arc(aX, 320, 90, 120, PI*random(1.4, 1.45), PI*random(1.7, 1.75));
arc(pX, 372, 30, 30, PI*random(1.3, 1.4), PI*random(1.7, 1.8));
line(pX-125, 160, pX-52, 325);
arc(pX-135, 140, 20, 20, PI*random(1.4, 1.5), PI*random(1.8, 1.9));
}
void carpet() {
background(204, 255, 255);
stroke(198, 127, 0);
strokeWeight(3);
fill(153, 102, 0);
rect(-3, 280, width+5, 320);
line(0, 290, width, 290);
//Loop dots of variety of opacity to make texture for carpet (use for and randomSeed)
randomSeed(90);
for (int carpetx=0; carpetx < width; carpetx+= 2) {
for (int carpety=320; carpety < height; carpety+= 2) {
noStroke();
fill(random(200, 240), random(200, 230), random(150, 170));
rect(carpetx, carpety, carpetx+2, carpety+2);
}
}
}
void mouseClick() {
//So long as the mouse is held down, the balls will be launched when landing
if (click0 == false && click == true && y0 >= 315) {
click0 = true;
}
if (click1 == false && click == true && y1 >= 315) {
click1 = true;
}
if (click2 == false && click == true && y2 >= 315) {
click2 = true;
}
}
void drawBalls() {
strokeWeight(1);
stroke(255);
//draw Blue ball
fill(0, 105, 205);
ellipse(x2, y2, 20, 20);
//draw Red ball
fill(255, 0, 0);
ellipse(x0, y0, 20, 20);
//draw Yellow ball
fill(255, 255, 0);
ellipse(x1, y1, 20, 20);
//draw Green ball
fill(0,205,0);
ellipse(x3, y3, 20, 20);
}
void moveRed() {
//When the ball is launched, gravity will act on it
if (y0<315) {
click0 = false;
}
//Ball is launched at random angle
if (click0==true) {
y0 = y0 + yspeed0;
yspeed0 = -8;
xspeed0 = xspeed0 + int(random(-5, 5));
}
if (y0<315 && click0 == false) {
x0 = x0 + xspeed0;
}
if (click0==false) {
y0 = y0 + yspeed0;
yspeed0 = yspeed0 + gravity;
}
//If ball reaches the base, and mouse isn't pushed, move to designated spot
if (x0==aX+20 && y0==315) {
xspeed0 = 0;
}
if (x0>aX+22 && y0==315) {
x0 = x0 + xspeed0;
xspeed0 = -5;
}
if (x0<aX+18 && y0==315) {
x0 = x0 + xspeed0;
xspeed0 = +5;
}
if (y0>315) {
yspeed0 = 0;
y0=315;
}
//If ball hits dome, bounce back.
if (x0 < aX-30) {
xspeed0 = 5;
}
if (x0 < aX-40) {
x0 = aX-40;
}
if (x0 > aX+30) {
xspeed0 = -5;
}
if (x0 > aX+40) {
x0 = aX+40;
}
}
void moveYellow() {
//When the ball is launched, gravity will act on it
if (y1<315) {
click1 = false;
}
//Ball is launched at random angle
if (click1==true) {
y1 = y1 + yspeed1;
yspeed1 = -8;
xspeed1 = xspeed1 + int(random(-5, 5));
}
if (y1<315 && click1 == false) {
x1 = x1 + xspeed1;
}
if (click1==false) {
y1 = y1 + yspeed1;
yspeed1 = yspeed1 + gravity;
}
//If ball reaches the base, and mouse isn't pushed, move to designated spot
if (x1==aX-20 && y1==315) {
xspeed1 = 0;
}
if (x1>aX-18 && y1==315) {
x1 = x1 + xspeed1;
xspeed1 = -5;
}
if (x1<aX-22 && y1==315) {
x1 = x1 + xspeed1;
xspeed1 = +5;
}
if (y1>315) {
yspeed1 = 0;
y1=315;
}
//If ball hits dome, bounce back.
if (x1 < aX-30) {
xspeed1 = 5;
}
if (x1 < aX-40) {
x1 = aX-40;
}
if (x1 > aX+30) {
xspeed1 = -5;
}
if (x1 > aX+40) {
x1 = aX+40;
}
}
void moveBlue() {
//When the ball is launched, gravity will act on it
if (y2<315) {
click2 = false;
}
//Ball is launched at random angle
if (click2==true) {
y2 = y2 + yspeed2;
yspeed2 = -8;
xspeed2 = xspeed2 + int(random(-5, 5));
}
if (y2<315 && click2 == false) {
x2 = x2 + xspeed2;
}
if (click2==false) {
y2 = y2 + yspeed2;
yspeed2 = yspeed2 + gravity;
}
//If ball reaches the base, and mouse isn't pushed, move to designated spot
if (x2==aX && y2==315) {
xspeed2 = 0;
}
if (x2>aX+2 && y2==315) {
x2 = x2 + xspeed2;
xspeed2 = -5;
}
if (x2<aX-2 && y2==315) {
x2 = x2 + xspeed2;
xspeed2 = +5;
}
if (y2>315) {
yspeed2 = 0;
y2=315;
}
//If ball hits dome, bounce back.
if (x2 < aX-30) {
xspeed2 = 5;
}
if (x2 < aX-40) {
x2 = aX-40;
}
if (x2 > aX+30) {
xspeed2 = -5;
}
if (x2 > aX+40) {
x2 = aX+40;
}
}
void moveGreen() {
//When the ball is launched, gravity will act on it
if (y3<315) {
click2 = false;
}
//Ball is launched at random angle
if (click2==true) {
y3 = y3 + yspeed3;
yspeed3 = -8;
xspeed3 = xspeed3 + int(random(-5, 5));
}
if (y3<315 && click2 == false) {
x3 = x3 + xspeed3;
}
if (click2==false) {
y3 = y3 + yspeed3;
yspeed3 = yspeed3 + gravity;
}
//If ball reaches the base, and mouse isn't pushed, move to designated spot
if (x3==aX && y3==315) {
xspeed3 = 0;
}
if (x3>aX+2 && y3==315) {
x3 = x3 + xspeed3;
xspeed3 = -5;
}
if (x3<aX-2 && y3==315) {
x3 = x3 + xspeed3;
xspeed3 = +5;
}
if (y3>315) {
yspeed3 = 0;
y3=315;
}
//If ball hits dome, bounce back.
if (x3 < aX-30) {
xspeed3 = 5;
}
if (x3 < aX-40) {
x3 = aX-40;
}
if (x3 > aX+30) {
xspeed3 = -5;
}
if (x3 > aX+40) {
x3 = aX+40;
}
}