// Lawn Mower Toy // Jesmin Hondell Student ID: 991 358 697 // 24/September/2015 // // In this program you can cuz the man's lawn. By pressing the mouse on the left side of // the screen, the lawn mower moves forward. If you presse the mouse on the right side // the screen the lawn mower moves back. As soon as the lawn mower is far enough away, // it will start to rain and the grass will grow back. Cut it again! // Declaring lawn mower x position variables float xPos = 190; // X position of the lawn mower's red rectangle float xPos2 = 220; // X position of the lawn mower's black rectangle float xPos3 = 225; // X postion of the lawn mower's yellow ellipse // Declaring man's x position variables float armXPos = 230; // X position of the man's arm float headXPos = 240; // X position of the man's head float eyeXPos = 237; // X possition of the man's eye float bodyXPos = 235; // X position of the man's body // Declaring the variables for y coordinates of the the grass patches float patchA1 = 230; float patchA2 = 250; float patchB1 = 230; float patchB2 = 250; float patchC1 = 230; float patchC2 = 250; float patchD1 = 230; float patchD2 = 250; // Declaring variables for the rain drop's x and y coordinates and speed float rainXPos = 200; float rainYPos = 0; float rainSpeed = 2; void setup() { // Set the size of the background size (400, 350); } void draw() { // Removes the outline from drawings noStroke() ; // Sets the background color to light blue background (176, 196, 222); noStroke(); // Constraining the Lawn Mower's and man's X values so that they don't go off screen xPos = constrain(xPos, 0, 345); xPos2 = constrain(xPos2, 30, 375); xPos3 = constrain(xPos3, 35, 380); armXPos = constrain(armXPos, 40, 385); headXPos = constrain (headXPos, 50, 395) ; eyeXPos = constrain (eyeXPos, 47, 392); bodyXPos = constrain (bodyXPos, 45, 390); // Constraining the grass patch y values so that it doesnt go too high or low. patchA1 = constrain (patchA1, 230, 260); patchA2 = constrain (patchA2, 250, 280); patchB1 = constrain (patchB1, 230, 260); patchB2 = constrain (patchB2, 250, 280); patchC1 = constrain (patchC1, 230, 260); patchC2 = constrain (patchC2, 250, 280); patchD1 = constrain (patchD1, 230, 260); patchD2 = constrain (patchD2, 250, 280); // Draw House fill (200, 100, 60); rect (250, 150, 130, 100); // House Roof fill (100, 50, 10); triangle (315, 80, 240, 150, 390, 150); // House Door fill (100, 50, 10); rect (300, 210, 30, 40); stroke (255); line (300, 210, 300, 250); line (300, 210, 330, 210); line (330, 210, 330, 250); fill (255); ellipse (323, 235, 5, 5) ; // House Window 1 fill (150, 200, 255); rect (260, 160, 20, 40) ; line (270, 160, 270, 200) ; line (260, 180, 280, 180); // House Window 2 rect (290, 160, 50, 40); line (300, 160, 300, 200); line (330, 160, 330, 200); line (315, 160, 315, 200); line (290, 180, 340, 180); // House Window 3 rect (350, 160, 20, 40); line (360, 160, 360, 200); line (350, 180, 370, 180); // House Window 4 rect (260, 210, 20, 30); line (270, 210, 270, 240); line (260, 225, 280, 225); //House Window 5 rect (350, 210, 20, 30); line (360, 210, 360, 240); line (350, 225, 370, 225); // Draw Tall Grass Patches noStroke (); fill (190, 200, 0) ; triangle (170, patchA1, 165, patchA2, 175, patchA2); triangle (160, patchA1, 155, patchA2, 165, patchA2); triangle (150, patchA1, 145, patchA2, 155, patchA2); triangle (140, patchA1, 135, patchA2, 145, patchA2); triangle (130, patchB1, 125, patchB2, 135, patchB2); triangle (120, patchB1, 115, patchB2, 125, patchB2); triangle (110, patchB1, 105, patchB2, 115, patchB2); triangle (100, patchB1, 95, patchB2, 105, patchB2); triangle (90, patchC1, 85, patchC2, 95, patchC2); triangle (80, patchC1, 75, patchC2, 85, patchC2); triangle (70, patchC1, 65, patchC2, 75, patchC2); triangle (60, patchC1, 55, patchC2, 65, patchC2); triangle (50, patchC1, 45, patchC2, 55, patchC2); triangle (40, patchD1, 35, patchD2, 45, patchD2); triangle (30, patchD1, 25, patchD2, 35, patchD2); triangle (20, patchD1, 15, patchD2, 25, patchD2); triangle (10, patchD1, 5, patchD2, 15, patchD2); // Draw Lawn Mower noStroke(); fill (200, 0, 0); rect (xPos, 230, 30, 20); fill (0); rect (xPos2, 220, 10, 30); fill (150, random (100, 255), 0); ellipse (xPos3, 225, 5, 5); // Draw Man fill (0, 50, 150); //Body Color rect (bodyXPos, 220, 10, 25); //Body fill (200, 200, 170); //Arms & Head Color rect (armXPos, 225, 10, 5); //Arms ellipse (headXPos, 210, 10, 20); //Head fill (0); // Shoes & Eyes Color rect (bodyXPos, 245, 10, 5); //Shoe ellipse (eyeXPos, 210, 3, 3); //Eye // Calls the rainDrop function to be executed at the same time the grass grows back. // Which is when the lawn mower's location is greater than 175 on the x axis. if (xPos > 175) { // Loop gives the rain a line effect, and speed up the rain function. for (int i = 0; i < 20; i++) { rainDrop(); } } // Draw Clouds fill (200); ellipse (150, 23, 150, 50); fill (190); ellipse (230, 20, 180, 40); fill (210); ellipse (320, 20, 200, 40); fill (180); ellipse (50, 20, 150, 40); fill (170); ellipse (90, 50, 150, 40); fill (175); ellipse (270, 50, 200, 40); // Draw Grass fill (100, 200, 0); rect (0, 250, 400, 150); // Calls the grassGrowth & lawnMowing function grassGrowth(); lawnMowing(); } // This function is what causes the lawn mower to move and "cut" the grass void lawnMowing() { // If the mouse is being pressed on the left side, move the lawn mower and man forward // by a speed of 1. if (mousePressed && mouseX <= 200) { xPos = xPos - 1; xPos2 = xPos2 - 1; xPos3 = xPos3 - 1; armXPos = armXPos - 1; headXPos = headXPos - 1; eyeXPos = eyeXPos - 1; bodyXPos = bodyXPos - 1; } // If the mouse is being pressed on the right side, move the lawn mower and man back // by a speed of 1. else if (mousePressed == true && mouseX > 200) { xPos = xPos + 1; xPos2 = xPos2 + 1; xPos3 = xPos3 + 1; armXPos = armXPos + 1; headXPos = headXPos + 1; eyeXPos = eyeXPos + 1; bodyXPos = bodyXPos + 1; } } // This Function is what causes the grass to skrink when the lawn mower is cutting it // and grow back once the lawn mower leaves. void grassGrowth () { // If the lawn moser passes a certain x coordinate each patch of grass will shrink // into the ground. if (xPos < 175 ) { patchA1 = patchA1 + 0.1; patchA2 = patchA2 + 0.1; if (xPos <135) { patchB1 = patchB1 + 0.1; patchB2 = patchB2 + 0.1; } if (xPos < 95) { patchC1 = patchC1 + 0.1; patchC2 = patchC2 + 0.1; } if (xPos < 45) { patchD1 = patchD1 + 0.1; patchD2 = patchD2 + 0.1; } } // Otherwise if the lawn mower leaves the tall grass area, it will grow back. else { patchA1 = patchA1 - 0.1; patchA2 = patchA2 - 0.1; patchB1 = patchB1 - 0.1; patchB2 = patchB2 - 0.1; patchC1 = patchC1 - 0.1; patchC2 = patchC2 - 0.1; patchD1 = patchD1 - 0.1; patchD2 = patchD2 - 0.1; } } // Lines 249-256 was used from Tim Stapert's "Falling Ball" Code: // (http://www.openprocessing.org/sketch/196619) // This function is responsable for the raindrops falling void rainDrop() { // Brings the rain drop back to the top once it goes off the screen at the bottom if (rainYPos > height + 5) { rainYPos = 0; rainXPos = random(175); // Provides a new x position for the rain drop } // Makes the rain drops fall by increasing the value of the rainYPos rainYPos = rainYPos + rainSpeed; // Draws the rain drop fill (0, 210, 255, 150); ellipse (rainXPos, rainYPos, 5, 5); }