Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//Colleen Shaver
//Honey bee flies around his hive with honey river below
//use the mouse to direct the bee around the hive
//lots of reference from lander example from class

float gravity=.10;

int honeyPositionX = 0;

float beeSpeedX;
float beeSpeedY;

float hiveX;
float hiveY;

float BeeX;
float BeeY;

void setup() {
  frameRate(60);
  size(600, 600);
  smooth();
  // Set initial Honey Bee position
  BeeX=width/2;
  BeeY=height/2;

  // Set initial Honey Bee's speed
  beeSpeedX=0;
  beeSpeedY=0;
}

void draw() {
  //please behave bee and update based off gravity and mouse input without exploding
  updateBeePosition();
  //It would also be good if you stayed on the screen Mister Bee
  //DRAW THE BASICS
  //light blue background of hive
  background(135, 250, 215);

  drawHive();
  drawHoney(honeyPositionX);
  drawBee();
  honeyPositionX++;
}

void updateBeePosition() {

  // Adjust Honey Bee horizontal speed based on mouse X

  if (mousePressed) {
    beeSpeedY+=-.20;
    if (mouseX>BeeX) {
      beeSpeedX+=.20;
    } else if (mouseX<BeeX) {
      beeSpeedX+=-.20;
    }
  }

  // Adjust Honey Bee vertical speed based on gravity

  beeSpeedY+=gravity;

  //  Update Honey Bee position 

  BeeX+=beeSpeedX;
  BeeY+=beeSpeedY;
}


void drawHive() {

  // create behive using loop of hexagon pattern

  fill(150, 255, 0);
  noStroke();
  hiveX =-120;
  while (hiveX < width) {
    hiveX= hiveX+100;

    //Y axis for loop of Bee hive
    hiveY=-120;
    while (hiveY < height) {
      hiveY= hiveY+100;
      //shadow of honeycombs
      fill (25, 195, 155);

      quad(hiveX+5, hiveY+30, hiveX+25, hiveY+5, hiveX+55, hiveY+ 5, hiveX+75, hiveY+ 30);
      quad(hiveX+5, hiveY+30, hiveX+25, hiveY+55, hiveX+55, hiveY+55, hiveX+75, hiveY+30);
      fill(10, 135, 125);
      quad(hiveX+55, hiveY+80, hiveX+75, hiveY+55, hiveX+105, hiveY+ 55, hiveX+125, hiveY+ 80);
      quad(hiveX+55, hiveY+80, hiveX+75, hiveY+105, hiveX+105, hiveY+105, hiveX+125, hiveY+80);

      //honeycombs
      fill(20, 105, 115, mouseX);

      quad(hiveX+10, hiveY+30, hiveX+30, hiveY+10, hiveX+50, hiveY+ 10, hiveX+70, hiveY+ 30);
      quad(hiveX+10, hiveY+30, hiveX+30, hiveY+50, hiveX+50, hiveY+50, hiveX+70, hiveY+30);

      fill (5, 45, 60, mouseY);

      quad(hiveX+60, hiveY+80, hiveX+80, hiveY+60, hiveX+100, hiveY+ 60, hiveX+120, hiveY+ 80);
      quad(hiveX+60, hiveY+80, hiveX+80, hiveY+100, hiveX+100, hiveY+100, hiveX+120, hiveY+80);
    }
  }
}
void drawBee() {

  //wings
  ellipseMode(CENTER);
  fill(200, 255, 255, 200);
  ellipse(BeeX+random(110, 115), BeeY+random(60, 65), 50, 60);
  ellipse(BeeX+random(100, 105), BeeY+random(50, 55), 30, 100);
  ellipse(BeeX+random(120, 125), BeeY+random(70, 75), 70, 30);
  //antennaes
  stroke(0);
  strokeWeight(3);
  
  line(BeeX+50, BeeY+50, BeeX+60, BeeY+60);
  line(BeeX+60, BeeY+40, BeeX+70, BeeY+60);
  line(BeeX+50, BeeY+50, BeeX+45, BeeY+55);
  line(BeeX+60, BeeY+40, BeeX+55, BeeY+45);
  //legs
  line(BeeX+70, BeeY+120, BeeX+65, BeeY+140);
  line(BeeX+80, BeeY+120, BeeX+75, BeeY+140);
  //body of bee
  noStroke();
  fill(255, 255, 0);

  triangle(BeeX+100, BeeY+70, BeeX+180, BeeY+80, BeeX+100, BeeY+130);
  fill(255, 255, 0);
  ellipse(BeeX+100, BeeY+100, 80, 60);
  ellipse(BeeX+70, BeeY+80, 45, 45);
  //bee's eye
  fill(0);

  ellipse(BeeX+60, BeeY+70, 10, 15);
  //bee's stripes
  stroke(0);
  strokeWeight(10);

  line(BeeX+85, BeeY+70, BeeX+70, BeeY+120);
  line(BeeX+100, BeeY+70, BeeX+100, BeeY+130);
  line(BeeX+120, BeeY+75, BeeX+130, BeeY+120);
  triangle(BeeX+145, BeeY+80, BeeX+150, BeeY+95, BeeX+170, BeeY+80);

  //constraint set up
  if (BeeX < 0) {
    BeeX = 0;
  }
  if (BeeY < 0) {
    BeeY = 0;
  }
  if (BeeX > width-200) {
    BeeX = width-200;
  }
  if (BeeY > height-150) {
    BeeY = height-150;
  }
}
void drawHoney(int x) {
  noStroke();
  rectMode(CORNER);
  for (int j = 0; j <= height; j= j+5) {
    fill(40, 110, 154, -10+j);
    rect(0, 150+j, width, 5);
  }
  stroke(225, 255, 0, 10);
  float a = 0.0;
  float inc = TWO_PI/25.0;
  for (int i = 0; i <= width; i++) {
    line(i, height, i, (height - 150+15 * (sin((a-x/2)/10))));
    a = a + inc;
  }
  stroke(230, 230, 0, 25);
  for (int i = 0; i <= width; i++) {
    line(i, height, i, (height - 120+15 * (sin((a-x/3)/10))));
    a = a + inc;

    stroke(255, 230, 0, 50);
    for ( i=0; i <= width; i++) {
      line(i, height, i, (height - 100+15 * (sin((a-x/4)/10))));
      a = a + inc;
      // made with influence of http://www-acad.sheridanc.on.ca/PROG14998/2015/interactive-toy/interactive_toy_07/index.html#
    }
  }
}