/******************************************************************** ** Cheyenne Amil 991340231 ** Interactive toy - Big Fat Croc ** ** The croc moves up and down with the arrow keys and eats food ** He gets fatter the more food he eats, slows down the fatter he gets ** and the score increases the more food hes eaten as well as well ** ** Up and Down keys to move ** Click to bite *******************************************************************/ //vertical position of croc int crocY=300; int armRotate=30; //how fast the croc will move int crocSpeed=5; //foods x and y position float foodY=0; float foodX=0; //food speed changed randomly too float foodSpeed=2; //how much food the croc has eaten so far int score=0; //if the food has been bit boolean chomp=false; //how fat the croc is int bellySize=0; void setup () { // Set the Canvas size size(1000, 750); // set Prefered modes for shapes rectMode(CORNER); ellipseMode(CORNER); } ///////////////////////////////////////////// //**MAIN DRAW FUNCTION** //////////////////////////////////////////// void draw() { // move croc up and down but set parameters in which it cannot pass a certain point if (keyPressed) { if (keyCode==UP) { crocY=crocY-crocSpeed; armRotate=0; if (crocY<=0) { crocY=0; } } else if (keyCode==DOWN) { crocY=crocY+crocSpeed; armRotate=35; if (crocY>=550) { crocY=550; } } } //set background to a sky blue background(121, 173, 245); //Water fill(12, 121, 234); rect(0, 100, 1000, 700); //Sand fill(219, 133, 53); rect(0, 700, 1000, 50); //call the move food function and draw the food at that position moveFood(); drawFood(); // If the mouse is pressed close the Crocs Mouth if (mousePressed) { //if the food is in the crocs jaws when he bites if (foodX>=210 && foodX<=260 && foodY>=crocY+70 && foodY<=crocY+140) { // move the score up one, grow the belly and slow croc movement depending on score score++; bellySize++; slowCroc(); // fix belly size to go no bigger than 15 if (bellySize>=25) { bellySize=25; } chomp=true; } drawMouthClosed(crocY); } else drawMouthOpen(crocY); // Draw Croc body drawCroc(crocY); //display the score at the top right of the screen textSize(20); fill(240+score, 153, 12); text("Score: ", 10, 50); textSize(20+score); fill(240+score, 153-(2*score), 12); text(score, 85, 50); } ////////////////////////////////////////// //**DRAW THE BODY OF THE CROC** //////////////////////////////////////////// void drawCroc(int crocY) { //Draw a blue-green tail fill(27, 139, 142); noStroke(); triangle(20, 130+crocY, 100, 100+crocY, 100, 130+crocY); //Draw Belly that grows with score (caps when score is at 25) fill(223, 232, 162); ellipse(100, 100+crocY, 100, 35+bellySize); fill(115); rect(125, 99+crocY, 2, 35+bellySize); rect(150, 100+crocY, 2, 35+bellySize); rect(175, 99+crocY, 2, 35+bellySize); //Draw Body of Croc fill(27, 139, 142); rect(100, 100+crocY, 105, 30, 0, 0, 5, 0); //Draw spikes on crocs back using a loop fill(34, 106, 104); for (int i=0; i<=4; i=i+1) { triangle(100+(i*20), 100+crocY, 110+(i*20), 92+crocY, 120+(i*20), 100+crocY); } //Draw spikes on crocs tail triangle(80, 107+crocY, 100, 100+crocY, 87, 97+crocY); triangle(60, 115+crocY, 80, 107+crocY, 67, 104+crocY); triangle(40, 123+crocY, 60, 115+crocY, 47, 112+crocY); triangle(20, 130+crocY, 40, 123+crocY, 27, 119+crocY); //draw back leg of croc fill(34, 106, 104); ellipse(100, 110+crocY, 20, 30); //draw the lower part of limb by rotating an ellipse and fingers from an origin pushMatrix(); translate(100, 130+crocY); rotate(radians(armRotate)); ellipse(0, -5, 15, 30); fill(225); triangle(5, 25, 9, 25, 7, 28); triangle(3, 25, -1, 25, 3, 21); triangle(11, 25, 15, 25, 11, 21); popMatrix(); //draw front leg of croc fill(34, 106, 104); ellipse(180, 110+crocY, 20, 30); pushMatrix(); translate(183, 130+crocY); rotate(radians(-armRotate)); ellipse(0, 0, 15, 30); fill(225); triangle(5, 30, 9, 30, 7, 33); triangle(3, 30, -1, 30, 3, 26); triangle(11, 30, 15, 30, 11, 26); popMatrix(); } ///////////////////////////////////////// //**DRAW THE MOUTH CLOSED** ///////////////////////////////////////// void drawMouthClosed(int crocY) { // draw lower jaw with rounded bottom right corner fill(36, 106, 108); rect(200, 115+crocY, 60, 15, 0, 0, 5, 0); //draw upper jaw with rounded top right corner fill(27, 139, 142); rect(200, 100+crocY, 60, 15, 0, 15, 0, 0); //draw nostril rect(251, 102+crocY, 7, -6, 25, 25, 0, 0); //draw the eye bump rect(200, 80+crocY, 20, 22, 10, 10, 0, 0); fill(255); ellipse(208, 82+crocY, 10, 16); fill(0); ellipse(212, 83+crocY, 6, 14); //draw tiny teeth for (int i=0; i<=2; i++) { fill(255); triangle(205+(i*20), 115+crocY, 210+(i*20), 115+crocY, 208+(i*20), 110+crocY); triangle(215+(i*20), 115+crocY, 220+(i*20), 115+crocY, 218+(i*20), 120+crocY); } //draw angry Eyebrows fill(0); triangle(205, 83+crocY, 225, 90+crocY, 210, 78+crocY); } ///////////////////////////////////////// //**DRAW THE MOUTH OPENED** //////////////////////////////////////// void drawMouthOpen(int crocY) { // draw lower jaw with rounded bottom right corner // rotate the jaw and teeth by setting an origin and rotating the shapes from there pushMatrix(); translate(200, 115+crocY); rotate(radians(30)); //draw rect at new origin and round a corner fill(36, 106, 108); rect(0, 0, 60, 15, 0, 0, 5, 0); // for loop to draw the teeth for (int i=0; i<=5; i++) { fill(255); triangle(10+(i*9), 0, 15+(i*9), 0, 13+(i*9), -5); } popMatrix(); // end of the bottom jaw rotation //draw upper jaw with rounded top right corner pushMatrix(); translate(200, 100+crocY); rotate(radians(-30)); //upper jaw fill(27, 139, 142); rect(-5, 0, 65, 15, 0, 15, 0, 0); //nostril drawing rect(51, 2, 7, -6, 25, 25, 0, 0); // for loop to draw teeth on the upper jaw for (int i=0; i<=5; i++) { fill(255); triangle(10+(i*8), 15, 15+(i*8), 15, 13+(i*8), 20); } popMatrix(); //draw the eye fill(27, 139, 142); rect(200, 80+crocY, 20, 22, 10, 10, 0, 0); fill(255); ellipse(208, 82+crocY, 10, 16); fill(0); ellipse(212, 83+crocY, 6, 14); //draw Eyebrow fill(0); triangle(205, 83+crocY, 205, 90+crocY, 210, 78+crocY); } /////////////////////////////////////////////////////// //**DRAW THE FOOD AFTER UPDATING ITS POSITION** ////////////////////////////////////////////////////// void drawFood() { //Drawing a Taco,in order is the tomato, lettuce, beef and the shell fill(237, 66, 36); ellipse(foodX+2, foodY-2, 21, 5); fill(29, 193, 47); ellipse(foodX-3, foodY-1, 30, 16); fill(152, 104, 68); ellipse(foodX-5, foodY+5, 34, 10); fill(227, 210, 18); rect(foodX, foodY, 25, 15, 50, 50, 2, 2); } ////////////////////////////////////////////////// //**MOVE FOOD ALONG SCREEN** //Nicolas Heslers code for moving and refreshing //an objects position was used as reference for moving //the food in this program. I take no credit for this //code and have only modified his original code ////////////////////////////////////////////////// void moveFood() { // move the food left at a rate of 2-6 pixels a frame foodX=foodX-foodSpeed; //if the food goes off the screen or gets eaten, move it back to the start if (foodX<=-20 || chomp==true) { foodX=1050; foodY=random(130, 550); chomp= false; foodSpeed=random(2, 6); } else chomp=false; } //////////////////////////////////////// //**SLOW THE CROC AS SCORE INCREASES** ///////////////////////////////////// void slowCroc() { //crock originally starts moving at 5pixels a frame crocSpeed=5; //increments the speed down as his score raises if (score>=5 && score<=9) { crocSpeed=4; } if (score>=10 && score<=14) { crocSpeed=3; } if (score>=15 && score<=19) { crocSpeed=2; } //floor speed at 1 if (score>=20) { crocSpeed=1; } }