Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
////////////////////////////////////////////////////
//*Mower Vs. UFO ///////////////////////////////////                                
//*An interactive toy created in Processing 2.2.1///
//*By Saahil Dhar///////////////////////////////////
////////////////////////////////////////////////////

float g=0;
float m=-40;
float w= mouseX;


////////////////
/**************/
/*WINDOW SETUP*/
/**************/
////////////////


void setup() {
  size(800, 500);
  smooth();
  frameRate(30);
  background(#D8EAFF);
  println("Use arrow keys to move the mower.");
  println("Use the mouse to move the UFO."); 
  println("Click and hold the Left mouse button to grow grass under the UFO.");


  ellipseMode(CENTER);
  rectMode(CORNERS);
  drawSun();
  drawClouds();
}




//////////////
/************/
/*PRIME LOOP*/
/************/
//////////////




void draw() {

  //////////////////////
  //DRAW INTITAL GRASS//
  //////////////////////
  while (g<width) {
    drawGrass();
    g=g+10;
  }

  ///////
  //UFO//
  ///////
  drawUFO();
  updateUFO();


  /////////////////
  //CONTROL MOWER//
  /////////////////
  if (keyPressed) {
    mowerMoving();
  }

  //////////////
  //GROW GRASS//
  //////////////
  if (mousePressed) {
    drawGrowth();
  }
}







////////////////////
/******************/
/*STATIC FUNCTIONS*/
/******************/
////////////////////






/////////
//GRASS//
/////////

void drawGrass() { 
  noStroke();
  fill(0, 255, 0);
  triangle(g, 450, g+10, 450, random (g, g+10), random(400, 450));
  rect(0, 450, 800, 500);
}



///////
//SUN//
///////

void drawSun() {
  noStroke();
  fill(#E3F0FF); 
  ellipse(100, 50, 400, 400);
  fill(235, 255, 108, 50);
  ellipse(100, 50, 200, 200);
  fill(235, 255, 108, 150);
  ellipse(100, 50, 100, 100);
  fill(255);
  ellipse(100, 50, 60, 60);
}

////////// 
//CLOUDS//
//////////

void drawClouds() {

  noStroke();
  fill(255);
  //top right
  ellipse(780, 80, 360, 120);
  ellipse(660, 100, 220, 80);

  //mid
  ellipse(430, 170, 100, 40);
  ellipse(470, 190, 100, 30);
  ellipse(385, 195, 110, 35);

  //top mid
  ellipse(345, 45, 50, 20);
  ellipse(365, 50, 40, 10);

  //left
  ellipse(10, 160, 200, 70);
  ellipse(80, 170, 140, 50);
}


/////////
//MOWER//
/////////

//MOWER GOING RIGHT//

void drawMowerRight() {
  noStroke();

  //BODY//
  fill(#B70D18);
  rect(m-100, 410, m, 445);
  rect(m-30, 400, m-20, 410);
  arc(m+20, 445, 40, 40, PI+HALF_PI, TWO_PI);
  fill(0);
  quad(m, 420, m, 410, m-20, 410, m-10, 420);
  rect(m-20, 400, m-10, 410);
  fill(0);
  arc(m-10, 410, 20, 20, PI+HALF_PI, TWO_PI);



  //MOTOR//
  fill(0);
  quad(m-80, 390, m-70, 400, m-40, 370, m-80, 370); 
  rect(m-70, 390, m-30, 410);
  fill(#838383);
  quad(m-40, 370, m-40, 390, m-25, 390, m-25, 380);
  rect(m-60, 370, m-40, 390);

  //BAG//
  fill(#474848);
  quad(m-160, 370, m-160, 430, m-100, 430, m-100, 390 );

  //HANDLE//
  fill(#CDD1D8);
  quad(m-100, 390, m-100, 395, m-185, 310, m-180, 310);
  fill(0);
  quad(m-100, 390, m-110, 400, m-90, 420, m-80, 410);
  quad(m-180, 310, m-185, 305, m-210, 305, m-210, 310);

  //WHEELS//
  fill(#482727);
  ellipse(m+10, 430, 40, 40);
  ellipse(m-100, 430, 40, 40);


  //CORDS//
  fill(0);
  stroke(0);
  line(m-80, 370, m-180, 310);
  line(m-80, 390, m-90, 400);
}  


//MOWER GOING LEFT//


void drawMowerLeft() {
  noStroke();

  //BODY//
  fill(#B70D18);
  rect(m-185, 410, m-85, 445);
  rect(m-165, 400, m-155, 410);
  arc(m-205, 445, 40, 40, PI, PI+HALF_PI);
  fill(0);
  quad(m-185, 420, m-185, 410, m-165, 410, m-175, 420);
  rect(m-165, 400, m-175, 410);
  fill(0);
  arc(m-175, 410, 20, 20, PI, PI+HALF_PI);


  //MOTOR//
  fill(0);
  quad(m-105, 390, m-115, 400, m-145, 370, m-105, 370); 
  rect(m-115, 390, m-155, 410);
  fill(#838383);
  quad(m-145, 370, m-145, 390, m-160, 390, m-160, 380);
  rect(m-125, 370, m-145, 390);

  //BAG//
  fill(#474848);
  quad(m-25, 370, m-25, 430, m-85, 430, m-85, 390 );

  //HANDLE//
  fill(#CDD1D8);
  quad(m-85, 390, m-85, 395, m, 310, m-5, 310);
  fill(0);
  quad(m-85, 390, m-75, 400, m-95, 420, m-105, 410);
  quad(m-5, 310, m, 305, m+25, 305, m+25, 310);

  //WHEELS//
  fill(#482727);
  ellipse(m-195, 430, 40, 40);
  ellipse(m-85, 430, 40, 40);

  //CORDS//
  fill(0);
  stroke(0);
  line(m-105, 370, m-5, 310);
  line(m-105, 390, m-95, 400);
}







////////////////////
/******************/
/*UPDATE FUNCTIONS*/
/******************/
////////////////////





///////////////
//MOWER MOVING//
////////////////

void mowerMoving() {
  if (keyCode==RIGHT) {
    drawMowRight();
    drawMowerRight();
    m=m+5;
  } else 
    if (keyCode==LEFT) {
    drawMowLeft();
    drawMowerLeft();
    m=m-5;
  } else { 
    drawMowRight();
    drawMowerRight();
  }
}


/////////////
//MOWN LAWN//
/////////////

void drawMowRight() {
  noStroke();
  fill(#D8EAFF);
  rect(m-225, 300, m+40, 445);
  fill(#D8EAFF);
  rect(m-210, 445, m+10, 450);
}

void drawMowLeft() {
  noStroke();
  fill(#D8EAFF);
  rect(m+40, 300, m-215, 445);
  fill(#D8EAFF);
  rect(m+25, 445, m-190, 450);
}


/////////////////
//GROWING GRASS//
/////////////////


void drawGrowth() {


  noStroke();
  fill(0, 255, 0);
  triangle(w, 450, w+10, 450, random (w, w+10), random(400, 450));
}



///////
//UFO//
///////

void drawUFO() {
  noStroke();
  fill(#D8EAFF);
  rect(0, 250, 800, 300);



  noStroke();
  fill(#909090);
  ellipse (w, 270, 90, 20);
  fill(0);
  arc(w, 261, 30, 20, PI, TWO_PI);

  fill(255);
  arc(w-5, 258, 10, 7, PI, PI+HALF_PI+QUARTER_PI);

  fill(#92FF3B);
  triangle(w, 290, w+15, 280, w-15, 280);
  fill(#909090);
  triangle(w-20, 275, w-15, 275, w-2.5, 290);
  triangle(w+20, 275, w+15, 275, w+2.5, 290);
  fill(0);
  rect(w-2.5, 287, w+2.5, 290);
}


void updateUFO() {
  w=constrain(mouseX, 0, 800);
}