/*/////////////////////////////////////////////// ** Gourmet Race By Ali Charif ** An Interactive Toy ** Nic Hesler, Introduction to Media Computation ** Tuesday 9am-12pm /*/////////////////////////////////////////////// //CONTROLS: Hold left mouse button or press any key to eat. void setup() { size(400, 400); frameRate(60); } //Kirby related variables float kirbyXPos = 60; float kirbyYPos = 205; int kirbyFace = 1; boolean kirbyEat = false; //food boolean shape1 = true; float shape1X = 420; boolean shape2 = true; float shape2X = 481; boolean shape3 = true; float shape3X = 542; //For drawing Conveyor gears with For loop float gearXPos = 20; //Score Variable int score=0; int lastScore; int highScore=75; // 1st Ali:75 - 2nd Nathan:74 - 3rd Ema:65 //Conveyor initial Speed float convSpd = -1; //Conveyor Line Points //float conv float convLinePoint1 = 0; float convLinePoint2 = 20; float convLinePoint3 = 40; float convLinePoint4 = 60; float convLinePoint5 = 80; float convLinePoint6 = 100; float convLinePoint7 = 120; float convLinePoint8 = 140; float convLinePoint9 = 160; float convLinePoint10 = 180; float convLinePoint11 = 200; float convLinePoint12 = 220; float convLinePoint13 = 240; float convLinePoint14 = 260; float convLinePoint15 = 280; float convLinePoint16 = 300; float convLinePoint17 = 320; float convLinePoint18 = 340; float convLinePoint19 = 360; float convLinePoint20 = 380; float convLinePoint21 = 400; float convLinePoint22 = 420; //----------------------------------------------------------- void mousePressed() { //Kirby EATS! kirbyEat = true; kirbyFace = 2; } //----------------------------------------------------------- void mouseReleased() { //Kirby Ignores... kirbyEat = false; kirbyFace = 1; } //----------------------------------------------------------- void keyPressed() { //Kirby EATS! kirbyEat = true; kirbyFace = 2; } //----------------------------------------------------------- void keyReleased() { //Kirby Ignores... kirbyEat = false; kirbyFace = 1; } //----------------------------------------------------------- //----------------------------------------------------------- void draw() { stroke(0); strokeWeight(2); //Drawing Background, Conveyor, Scoreboard and Kirby drawBackground(); drawConv(); drawFacelessKirby(); drawScores(); drawInstr(); //Kirby Face Change Conditions if (kirbyFace == 2) { eatFace(); } else if (kirbyFace == 3) { deadFace(); } else { ignoreFace(); } //Adding Speed to Conveyor lines convLinePoint1 = convLinePoint1 + convSpd - score*0.2; convLinePoint2 = convLinePoint2 + convSpd - score*0.2; convLinePoint3 = convLinePoint3 + convSpd - score*0.2; convLinePoint4 = convLinePoint4 + convSpd - score*0.2; convLinePoint5 = convLinePoint5 + convSpd - score*0.2; convLinePoint6 = convLinePoint6 + convSpd - score*0.2; convLinePoint7 = convLinePoint7 + convSpd - score*0.2; convLinePoint8 = convLinePoint8 + convSpd - score*0.2; convLinePoint9 = convLinePoint9 + convSpd - score*0.2; convLinePoint10 = convLinePoint10 + convSpd - score*0.2; convLinePoint11 = convLinePoint11 + convSpd - score*0.2; convLinePoint12 = convLinePoint12 + convSpd - score*0.2; convLinePoint13 = convLinePoint13 + convSpd - score*0.2; convLinePoint14 = convLinePoint14 + convSpd - score*0.2; convLinePoint15 = convLinePoint15 + convSpd - score*0.2; convLinePoint16 = convLinePoint16 + convSpd - score*0.2; convLinePoint17 = convLinePoint17 + convSpd - score*0.2; convLinePoint18 = convLinePoint18 + convSpd - score*0.2; convLinePoint19 = convLinePoint19 + convSpd - score*0.2; convLinePoint20 = convLinePoint20 + convSpd - score*0.2; convLinePoint21 = convLinePoint21 + convSpd - score*0.2; convLinePoint22 = convLinePoint22 + convSpd - score*0.2; //Conveyor Line reset conditions if (convLinePoint2 <= 0) { convLinePoint1 = 420; convLinePoint2 = 440; } if (convLinePoint4 <= 0) { convLinePoint3 = 420; convLinePoint4 = 440; } if (convLinePoint6 <= 0) { convLinePoint5 = 420; convLinePoint6 = 440; } if (convLinePoint8 <= 0) { convLinePoint7 = 420; convLinePoint8 = 440; } if (convLinePoint10 <= 0) { convLinePoint9 = 420; convLinePoint10 = 440; } if (convLinePoint12 <= 0) { convLinePoint11 = 420; convLinePoint12 = 440; } if (convLinePoint14 <= 0) { convLinePoint13 = 420; convLinePoint14 = 440; } if (convLinePoint16 <= 0) { convLinePoint15 = 420; convLinePoint16 = 440; } if (convLinePoint18 <= 0) { convLinePoint17 = 420; convLinePoint18 = 440; } if (convLinePoint20 <= 0) { convLinePoint19 = 420; convLinePoint20 = 440; } if (convLinePoint22 <= 0) { convLinePoint21 = 420; convLinePoint22 = 440; } drawShape1(); drawShape2(); drawShape3(); shape1X = shape1X+convSpd - score*0.2; shape2X = shape2X+convSpd - score*0.2; shape3X = shape3X+convSpd - score*0.2; //Off Screen Resets //Bad foods if (shape1X <= -30) { shape1X = random(400, 600); if (score > 0) { score--; } } //Good foods -1 score if (shape2X <= -30) { shape2X = random(400, 600); if (score > 0) { score--; } } if (shape3X <= -30) { shape3X = random(400, 600); } //Kirby Resets //Good foods +1 score if (shape1X >= kirbyXPos-20 && shape1X <=kirbyXPos+20 && shape1 && kirbyEat == true) { shape1X = random(400, 600); score++; kirbyFace = 2; } if (shape2X >= kirbyXPos-20 && shape2X <=kirbyXPos+20 && shape2 && kirbyEat == true) { shape2X = random(400, 600); score++; kirbyFace = 2; } //Bad foods resets score and Conveyor Speed if (shape3X >= kirbyXPos-20 && shape3X <=kirbyXPos+20 && shape3 && kirbyEat == true) { shape3X = random(400, 600); kirbyFace = 3; if(score>highScore){ highScore = score; } else {lastScore = score;} if (lastScore == 0) { lastScore = score; } score = 0; convSpd = -1; } //Conditions to keep shapes from overlapping if (shape1X >= shape2X-60 && shape1X <= shape2X+60 || shape1X >= shape3X-60 && shape1X <= shape3X+60 ) { shape1X = random(400,600); } if (shape2X >= shape1X-60 && shape2X <= shape1X+60 || shape2X >= shape3X-60 && shape2X <= shape3X+60 ) { shape2X = random(400,600); } if (shape3X >= shape2X-60 && shape3X <= shape2X+60 || shape3X >= shape1X-60 && shape3X <= shape1X+60 ) { shape3X = random(400,600); } } //----------------------------------------------------------- void drawBackground() { //sky background(1, 207, 254); //clouds noStroke(); fill(255); ellipse(80, 40, 40, 40); ellipse(120, 40, 40, 40); ellipse(60, 60, 40, 40); ellipse(100, 60, 40, 40); ellipse(140, 60, 40, 40); ellipse(80, 80, 40, 40); ellipse(120, 80, 40, 40); ellipse(160, 80, 40, 40); ellipse(260, 40, 40, 40); ellipse(300, 40, 40, 40); ellipse(240, 60, 40, 40); ellipse(280, 60, 40, 40); ellipse(320, 60, 40, 40); ellipse(260, 80, 40, 40); ellipse(300, 80, 40, 40); ellipse(340, 80, 40, 40); //grass fill(0, 200, 0); rectMode(CORNER); rect(0, 290, 400, 110); } //----------------------------------------------------------- void drawInstr() { textSize(15); text("GREEN: Yum!",20, 340); text("BLUE: Yum!",20, 355); text("RED: Yuck!",20, 370); textSize(12); text("Hold left mouse button or press any key to eat.",60, 310); } //----------------------------------------------------------- void drawScores() { fill(0); textSize(30); text("SCORE: " + score, 180, 160); textSize(15); text("HIGH SCORE: " + highScore, 250, 340); text("LAST SCORE: " + lastScore, 250, 360); } //----------------------------------------------------------- //drawing shapes void drawShape1() { if (shape1 == true) { fill(0, 0, 255); ellipse(shape1X, 220, 40, 40); } } void drawShape2() { if (shape2 ==true) { fill(0, 255, 0); ellipse(shape2X, 220, 40, 40); } } void drawShape3() { if (shape3 ==true) { fill(255, 0, 0); ellipse(shape3X, 220, 40, 40); } } //----------------------------------------------------------- //Drawing Conveyor void drawConv() { stroke(1); fill(98, 102, 105); rectMode(CORNER); rect(-1, 250, 401, 10); fill(159, 151, 149); rect(-1, 260, 401, 30); for (int i=18; i<=420; i=i+40) { drawGear(i, 275); } //Drawing Conveyor Belt line(convLinePoint1, 250, convLinePoint2, 260); line(convLinePoint3, 250, convLinePoint4, 260); line(convLinePoint5, 250, convLinePoint6, 260); line(convLinePoint7, 250, convLinePoint8, 260); line(convLinePoint9, 250, convLinePoint10, 260); line(convLinePoint11, 250, convLinePoint12, 260); line(convLinePoint13, 250, convLinePoint14, 260); line(convLinePoint15, 250, convLinePoint16, 260); line(convLinePoint17, 250, convLinePoint18, 260); line(convLinePoint19, 250, convLinePoint20, 260); line(convLinePoint21, 250, convLinePoint22, 260); } //----------------------------------------------------------- //Drawing looped Gears void drawGear(int x, int y) { //Gear fill(98, 102, 105); rectMode(CENTER); rect(x, y, 4, 20); rect(x, y, 20, 4); quad(x-8, y-6, x-6, y-8, x+8, y+6, x+6, y+8); quad(x-6, y+8, x-8, y+6, x+6, y-8, x+8, y-6); ellipse(x, y, 14, 14); } //----------------------------------------------------------- void drawFacelessKirby() { //Kirby's body,arms,feet and cheeks stroke(0); //Right arm fill(255, 132, 170); ellipse(kirbyXPos+38, kirbyYPos+14, 15, 30); //Right foot fill(218, 0, 59); rectMode(CENTER); rect(kirbyXPos+14, kirbyYPos+40, 25, 14, 10); //Left foot fill(218, 0, 59); rectMode(CENTER); rect(kirbyXPos-10, kirbyYPos+40, 25, 14, 10); //body fill(255, 132, 170); ellipse(kirbyXPos, kirbyYPos, 80, 80); //Left arm fill(255, 132, 170); ellipse(kirbyXPos-38, kirbyYPos+14, 15, 30); //cheeks noStroke(); fill(#ff6bbe); ellipse(kirbyXPos+26, kirbyYPos-2, 18, 8); ellipse(kirbyXPos-26, kirbyYPos -2, 18, 8); } //----------------------------------------------------------- //KIRBY EATS void eatFace() { stroke(0); fill(97, 25, 40); ellipse(kirbyXPos, kirbyYPos+14, 38, 40); noFill(); strokeWeight(2); arc(kirbyXPos-15, kirbyYPos-5, 30, 30, PI + QUARTER_PI, PI + HALF_PI + QUARTER_PI); arc(kirbyXPos+18, kirbyYPos-5, 30, 30, PI + QUARTER_PI, PI + HALF_PI + QUARTER_PI); strokeWeight(1); } //----------------------------------------------------------- //KIRBY IGNORES void ignoreFace() { noFill(); stroke(0); strokeWeight(2); arc(kirbyXPos, kirbyYPos-5, 50, 40, QUARTER_PI, HALF_PI + QUARTER_PI); arc(kirbyXPos-15, kirbyYPos-25, 30, 30, QUARTER_PI, HALF_PI + QUARTER_PI); arc(kirbyXPos+18, kirbyYPos-25, 30, 30, QUARTER_PI, HALF_PI + QUARTER_PI); strokeWeight(1); } //----------------------------------------------------------- //KIRBY DIES void deadFace() { stroke(0); line(kirbyXPos-20, kirbyYPos-27, kirbyXPos-5, kirbyYPos-12); line(kirbyXPos-5, kirbyYPos-27, kirbyXPos-20, kirbyYPos-12); line(kirbyXPos+8, kirbyYPos-27, kirbyXPos+23, kirbyYPos-12); line(kirbyXPos+23, kirbyYPos-27, kirbyXPos+8, kirbyYPos-12); fill(97, 25, 40); ellipse(kirbyXPos, kirbyYPos+14, 38, 40); }