/*///////////////////////////////////////////////
** 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);
}