Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//Michael Mirabile
//Object Oriented Toy
//2016
//You are a bee trying to pollinate flowers. 
//Land on the flowers and return pollen to your honey comb
//Avoid Toxic green pesticide gases and jump into white waterclouds to heal yourself
//As you pollinate flowers, your score will increase symbolized by sun flying in the sky


//Calling objects from their respectful classes
Sun sun = new Sun();
WClouds wcloud = new WClouds();
PClouds pcloud = new PClouds();
Moon moon = new Moon();
//Initializing the global variables
boolean pollenPickup;
//Clouds work with lifebar to create a health system. Green = toxic, White = healthy
PVector CloudXpos = new PVector (0,800);
float PCloudYpos = random(200,600);
float PCloudXpos = 800;
//Lifebar alters location of LifeBar rect
int lifebar = 100;
//Influences sun and moon position
int Score = 1;
//Creating array for flower position
float[] FlowerrandX = new float [3];
float[] FlowerrandY = new float [3];
void setup () {
  //Randomly generate flower position
  for (int i = 0; i < 2; i++) {
  FlowerrandX[i] = random(500,800);
  }
  for (int i = 0; i < 2; i++) {
  FlowerrandY[i] = random(300,500);
  }
  FlowerrandX[2] = random(300,400);
  FlowerrandY[2] = random(300,400);
//Create random white cloud position
   CloudXpos.x = random(200,600);
   //PollenPickup is used for score
  pollenPickup = false;
  //size
  size(800,600);
//Grey Background
fill (100,100,100);
rect(0,0,1000,1000);
}
void draw() {
  //Set basic components
frameRate(30);
drawBackground();
//Call Objects and their methods
sun.drawSun();
moon.drawMoon();
drawGrass();
drawFlower();
drawBee();
drawNest();
wcloud.drawWClouds();
pcloud.drawPClouds();
drawLifebar();
//Check if player has reached the flowers
if ((dist(mouseX,mouseY,FlowerrandX[0],FlowerrandY[0]) < 100)  || (dist(mouseX,mouseY,FlowerrandX[1],FlowerrandY[1]) < 100) || (dist(mouseX,mouseY,FlowerrandX[2],FlowerrandY[2]) < 100)) {
  pollenPickup = true;
}
FlowerResponse();
//Check if player has returned to basket from flowers
if (dist(mouseX,mouseY,100,400) < 100) {
  if (pollenPickup == true) {
  pollenPickup = false;
  Score = Score + 1;}
}
//Lifebar system based on Clouds
if (lifebar > 100) {
lifebar = 100;
}
if (lifebar < 0) {
  fill(0,0,0);
rect (0,0,1000,1000);
}
//Score raises the sun in the sky
if (Score == 10) {
  fill(250,250,250);
rect(0,0,1000,1000);
}
  if(dist(PCloudXpos,PCloudYpos,CloudXpos.y,CloudXpos.x) < 100) {
  CloudXpos.y = CloudXpos.y + 150;
  }
}


void drawBee () {
  //Bee follows mouse
  fill(220,250,100);
  ellipse(mouseX,mouseY,60,30);
    rect(mouseX-5,mouseY-15,7,30);
  triangle(mouseX+30,mouseY,mouseX + 10,mouseY,mouseX + 30, mouseY - 20);
   triangle(mouseX+30,mouseY,mouseX + 10,mouseY,mouseX + 30, mouseY + 20);
   fill(250,250,250,150);
   ellipse(mouseX,mouseY-10,10,sin(frameCount/7)*30);
    ellipse(mouseX,mouseY,10,sin(frameCount/7)*30);
      fill(50,50,50);
  ellipse(mouseX+20,mouseY,30,30);
  fill(150,150,150);
  ellipse(mouseX+15,mouseY-5,5,5);
   ellipse(mouseX+25,mouseY-5,5,5);
   arc(mouseX+20, mouseY, 20, 20, 0, PI);
   fill(50,50,50);
   ellipse(mouseX,mouseY,3,30);
   ellipse(mouseX-10,mouseY,3,30);
   ellipse(mouseX-20,mouseY,3,30);
}
void drawBackground() {
//Blue sky layer
noStroke();
fill(100,100,250);
rect(0,300,1000,100);
fill(120,120,250);
rect(0,200,1000,100);
fill(150,150,250);
rect(0,100,1000,100);
fill(200,200,250);
rect(0,0,1000,100);
}

void drawGrass() {
//Green grass layer
stroke(0);
fill(100,250,100);
rect(-10,350,1000,400);
fill(100,225,100);
rect(200,350,1000,400);
fill(100,200,100);
rect(400,350,1000,400);
fill(100,150,100);
rect(600,350,1000,400);
fill(100,250,100);
noStroke();
for (int i = 1; i < 1000; i += 20) {
triangle(-50 + i,350,0 + i,350,0 + i,300);
}
}

void drawFlower() { 
  //Creates the flower shape
       fill(50,200,50);
   rect(FlowerrandX[0],FlowerrandY[0],10,100);
   rect(FlowerrandX[1],FlowerrandY[1],10,100);
   rect(FlowerrandX[2],FlowerrandY[2],10,100);
   fill(200,50,200);
   ellipse(FlowerrandX[0]+15,FlowerrandY[0] + 15,50,50);
      ellipse(FlowerrandX[0]-15,FlowerrandY[0] - 15,50,50);
         ellipse(FlowerrandX[0]+15,FlowerrandY[0] - 15,50,50);
            ellipse(FlowerrandX[0]-15,FlowerrandY[0] + 15,50,50);
   ellipse(FlowerrandX[1] + 5,FlowerrandY[1],50,50);
    ellipse(FlowerrandX[1]-15,FlowerrandY[1] - 15,50,50);
         ellipse(FlowerrandX[1]+15,FlowerrandY[1] - 15,50,50);
            ellipse(FlowerrandX[1]-15,FlowerrandY[1] + 15,50,50);
   ellipse(FlowerrandX[2] + 15,FlowerrandY[2]+15,50,50);
    ellipse(FlowerrandX[2]-15,FlowerrandY[2] - 15,50,50);
         ellipse(FlowerrandX[2]+15,FlowerrandY[2] - 15,50,50);
            ellipse(FlowerrandX[2]-15,FlowerrandY[2] + 15,50,50);
   fill(200,200,150);
   ellipse(FlowerrandX[0],FlowerrandY[0],30,30);
   ellipse(FlowerrandX[1] + 5,FlowerrandY[1],30,30);
   ellipse(FlowerrandX[2] + 10,FlowerrandY[2],30,30);
}
//Creates a pollen like haze around player
void FlowerResponse () {
   if (pollenPickup == true) {
     fill(200,50,200);
     for (int j = 0; j < 5; j++) {
   ellipse(mouseX + random(-20,20),mouseY + random(-20,20),5,5);
     }
   }
   }

void drawNest() { 
  //Creates the basket shape
      fill(200,175,50);
    ellipse(125,475,50,50);
       fill(250,200,0);
    rect(100,400,50,75);
    fill(50,50,50);
    ellipse(125,400,50,50);
}

void drawLifebar() {
  //Bar that changes with health
  fill(50,50,50);
  rect(600 + ((100-lifebar)*2),20,250,30);
}

class PClouds{
 //Poison toxic clouds
void drawPClouds() {
  fill(0,250,0,0);//noFillBoundingBox
  rect(PCloudXpos,PCloudYpos,50,50);
   //VisibleObject
  fill(0,250,0,150);
   ellipse(PCloudXpos + 10,PCloudYpos,75,75);
    ellipse(PCloudXpos - 10,PCloudYpos,75,75);
     ellipse(PCloudXpos-20,PCloudYpos,75,75);
      ellipse(PCloudXpos+20,PCloudYpos,75,75);
       ellipse(PCloudXpos-10,PCloudYpos+10,75,75);
        ellipse(PCloudXpos-20,PCloudYpos+20,75,75);
  PCloudXpos = PCloudXpos - random(0,10);
  if (PCloudXpos < 0) {
    PCloudYpos = random(200,600);
    PCloudXpos = 800;
  }
  if (dist(mouseX,mouseY,PCloudXpos,PCloudYpos) < 50) {
  lifebar = lifebar - 5;
}
}
}
class Moon {
  //Draws Moon that decreases height with score
  void drawMoon() {
    fill(50,50,50,255/((Score*10) + 5));
 rect(0,0,1000,1000);
    fill(200,200,200);
    ellipse(475, 50 * (Score),125,125);
    fill(100,100,100);
    ellipse(490, (50 * (Score)) + 30,30,30);
    ellipse(470, (50 * (Score))-15,40,40);
    ellipse(440, (50 * (Score)) + 30,25,25);
}
}
class Sun {
  //Draws sun that increases height with score
  void drawSun() {
     fill(Score*15,Score*15,Score*10,100);
 rect(0,0,1000,1000);
    fill(250,250,0,100);
    ellipse(175, 800 / (Score),125,125);
 fill(250,250,0);
 ellipse(175, 800 / (Score),100,100);
 rect(75,800 / (Score),200,10);
 rotate(90);
 rect(75,800 / (Score),200,10);
 rotate(-90);
}
}
class WClouds {
  //Good clouds that raise health
void drawWClouds() {
  fill(250,250,250,0);//noFill Bounding Box
  ellipse(CloudXpos.y,CloudXpos.x,100,100);
  //VisibleObject
  fill(250,250,250,75);
   ellipse(CloudXpos.y + 10,CloudXpos.x,75,75);
    ellipse(CloudXpos.y - 10,CloudXpos.x,75,75);
     ellipse(CloudXpos.y-20,CloudXpos.x,75,75);
      ellipse(CloudXpos.y+20,CloudXpos.x,75,75);
       ellipse(CloudXpos.y-10,CloudXpos.x+10,75,75);
        ellipse(CloudXpos.y-20,CloudXpos.x+20,75,75);
  CloudXpos.y = (CloudXpos.y - random(0,10) * 2);
  if (CloudXpos.y < 0) {
    CloudXpos.x = random(200,600);
    CloudXpos.y = 800;
  }
  if (dist(mouseX,mouseY,CloudXpos.y,CloudXpos.x) < 50) {
  lifebar = lifebar + 5;
}
}
}