Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//Help the skeleton get big and strong by drinking milk!
//----MADE BY: JEREMY LEUNG----//
//(Sometimes the milk container will go offscreen. Sometimes it comes back but try restarting and that might fix it)

//used for the milk drop
float gravity=.05; 
float MilkDropYSpeed;
float milkdropX, milkdropY;
float milkdropSY;

//For the movement of the milk container
float x;
float y;
boolean right = false;
boolean left = false;

//For the movement of the skull
float skullX;

//Colors Used
color white;
color black;

//This is call to make the milk container go back and forth randomly
void flipMilkDirection() {
}


void setup() {
  size(400, 400);
  frameRate(60);
  milkdropX = 110;
  milkdropY = 100;
  milkdropSY = 5;
  white = color(255, 255, 255);
  black = color(0, 0, 0);
}

void draw() {
  background(black);
  stroke(white);
  skull();
  line(0, 0, 0, 400); 
  line(400, 0, 400, 400);

  //-UPDATE-//

  // Updates the milk drops Y position
  // Credit: Professor Nicolas Hesler (Rover Lander Example)
  updateMilkDropPosition();
  milkdropY = milkdropY+milkdropSY;
  if (milkdropY>height) {
    milkdropX = x;
    milkdropY = 100;
  }

  updateskullX();
  {
  }

  //Hit Box for the skull so the mlk drops resets to its spawn point

  if (milkdropX > skullX-5 && milkdropX < skullX+85 && milkdropY > 300 && milkdropY < 400) {
    milkdropX = x;
    milkdropY = 100;
  }
}

//-SKULL-//

void skull () {

  if (left) { 
    x=x-2;
  } else {
    x=x+2;
  }
}

// Credit: Professor Nicolas Hesler (Gone Fishing Example)
// Pressing the left or right arrow keys will make the skull move in those directions 
void  updateskullX () {
  if (keyPressed) {
    if (keyCode == LEFT) {
      skullX--;
    } else if (keyCode == RIGHT) {
      skullX++;
    }
  }


  //upper jaw
  fill(white);
  quad(40+skullX, 303, 60+skullX, 297, 65+skullX, 325, 25+skullX, 320);
  constrain(100, 5, 5);

  //bottom jaw
  quad(90+skullX, 350, 70+skullX, 360, 85+skullX, 305, 95+skullX, 310);

  //head
  ellipse(40+skullX, 350, 75, 75);

  //eye hole
  fill(black);

  ellipse(30+skullX, 325, 20, 15);



  //-MILK BOTTLE-//

  //This make the milk container go left or right randomly
  {

    flipMilkDirection();
    float r = random(400);
    if (r > 325) {
      if (left == true) {
        left = false;
      } else {
        left = true;
      }
    }
  }  

  //Milk Body
  fill(white);
  quad(x+100, 70, x+20, 70, x+20, 120, x+100, 120);

  //Milk Neck
  fill(white);
  quad(x+20, 70, x, 85, x, 105, x+20, 120);

  //Milk Head
  fill(white);
  quad(x, 85, x-10, 90, x-10, 100, x, 105);

  //Milk Drop
  fill(white);
  ellipse(milkdropX, milkdropY, 15, 15);

  //-"MILK"-//

  //"M"
  stroke(black, 200);
  fill(black);
  line(x+30, 113, x+50, 113);
  line(x+30, 113, x+40, 108);
  line(x+40, 108, x+30, 103);
  line(x+30, 103, x+50, 103);

  //"I"
  line(x+30, 98, x+50, 98);

  //"L"
  line(x+30, 93, x+50, 93);
  line(x+50, 93, x+50, 88);

  //"K"
  line(x+30, 83, x+50, 83);
  line(x+40, 83, x+30, 76);
  line(x+40, 83, x+50, 76);
  //println(mouseX, mouseY);
}

void updateMilkDropPosition() {

  milkdropY= milkdropY + milkdropSY;
  milkdropY = milkdropY + milkdropSY;
}

//Coding is actually very hard and a lot of help was given by other students 
//Major credit goes to ZACHARY MACLEOD for explaining a majority of the code used in this assignment 

//1. Every time draw() is executed, so every frame, the program generates a random number from 0 to whatever number you want.
//2. This random number (which is stored in a variable) is checked to see if it is above/below the halfway mark between 0 and the number you picked as the maximum.
//3. If it is above, reverse the direction of the milk carton. This also works for below, you choose whichever.
//4. There is a chance that the milk carton will hit the sides of the screen, so you'll have to check the carton's position and reverse regardless of the number generated that frame if this occurs.
//random(min, max);

//Basically you want 2 states 
//One the adds x, and one that subtracts x
//that can labeled
//int direction = 0
//0 being left
//1 being right
//And you need something that switches the states randomly
//But it depends on how often you want it to switch
//Cus using just random(min,max) is going to make just freak out and spazz out
//Than you just constrain x to 0 and 400 and your good