Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*//////////////////////////////////////////////////////////////////////////////////////////////
 ** Crocodile Dentist by Annie Wang
 ** click to simulate pushing down the bottom teeth of the crocodile, like the real game
 ** if the trigger tooth is pushed, the crocodile chomps down and you lose
 ** if every tooth except for the trigger is pushed, you win
/*//////////////////////////////////////////////////////////////////////////////////////////////

//set initial height of tooth (theight where t=tooth)
int theight=55;

//set tooth height when pressed down (pheight where p=pressed)
int pheight=20;

//set tooth width, this doesnt change
int twidth=25;

//set different tooth heights: l means left, r means right; counting from the center
int t0h=theight;
int tl1h=theight;
int tr1h=theight;
int tl2h=theight;
int tr2h=theight;
int tl3h=theight;
int tr3h=theight;
int tl4h=theight;
int tr4h=theight;
int tl5h=theight;
int tr5h=theight;

//set starting win/lose booleans to false so it doesnt display the win or lose screen until the event happens
boolean lose = false;
boolean win = false;

//setup the canvas and modes
void setup () {
  size (600, 600);
  background (#BCDBFF);
  noStroke ();
  rectMode (CORNERS);

  // instructions
  println ("CROCODILE DENTIST");
  println ("Click the teeth to push them down");
  println ("If you push the trigger tooth, you lose");
  println ("If every tooth except for the trigger is pushed, you win");
  println ("Refresh to start over");
}


void draw () {

  // lose screen: screen turns red and lose message is displayed
  if (lose) {
    fill (#F25656); 
    rect (0, 0, 600, 600);
    fill(#7E1717);
    textSize (26);
    text ("You Lose! Refresh to play again.", 100, 250);
    println ("You Lose!");
    // sad face
    fill (#FFFF6A);
    ellipse (300, 400, 150, 150);
    fill (0);
    ellipse (270, 370, 20, 20);
    ellipse (330, 370, 20, 20);
    noFill();
    arc (300, 450, 80, 80, radians (-150), radians (-30));
  } 

  // win screen: screen turns green and win message is displayed
  else if (win)
  {
    fill (#91FF7C); 
    rect (0, 0, 600, 600);
    fill(#397E17);
    textSize (26);
    text ("You Win! Refresh to play again.", 100, 250);
    println ("You Win!");
    // happy face
    fill (#FFFF6A);
    ellipse (300, 400, 150, 150);
    fill (0);
    ellipse (270, 370, 20, 20);
    ellipse (330, 370, 20, 20);
    noStroke ();
    arc (300, 410, 80, 80, radians (0), radians (180));
  } 


  // GAME
  // since starting the game means lose and win are both false, the game is 
  else 
  { 
    drawCrocodile ();
  }
}

void drawCrocodile () {
  //wallpaper pattern
  for (int i=20; i<600; i+=60) {
    noStroke ();
    fill (#71B9FF, 80);
    rect (i, 0, i+30, 600);
  }
  for (int i=20; i<600; i+=60) {
    noStroke ();
    fill (255, 80);
    rect (0, i, 600, i+30);
  }

  //table
  stroke (0);
  strokeWeight (2);
  fill (#93774D);
  rect (0, 320, 600, 600); 

  //table pattern
  for (int i=320; i<600; i+=50) {
    stroke (#5A3C27);
    line (0, i, 600, i);
  }

  // game name sign
  // string
  stroke (0);
  line (20, 80, 300, 10);
  line (580, 80, 300, 10);
  // nail
  noStroke ();
  fill (150);
  ellipse (300, 17, 17, 17);
  stroke (50);
  strokeWeight (4);
  line (300, 12, 300, 22);
  line (295, 17, 305, 17);
  // board
  stroke (#5A3C27);
  strokeWeight (10);
  fill (255);
  rect (20, 80, 580, 180);
  // text
  fill(random (0,255), random (0,255), random (0,255));
  textSize (50);
  text ("CROCODILE DENTIST", 50, 150);

  // CROCODILE
  // lower jaw
  stroke (0);
  strokeWeight (2);
  fill(#2BBF1F);
  arc (300, 440, 280, 230, radians (0), radians (180));
  quad (180, 310, 160, 441, 440, 441, 420, 310);
  arc (300, 440, 280, 160, radians (0), radians (180));

  // lower gums
  fill (#EA0514);
  quad (185, 300, 165, 441, 435, 441, 415, 300);
  arc (300, 440, 270, 150, radians (0), radians (180));

  // tounge
  fill (#F52F3C);
  quad (240, 300, 220, 426, 380, 426, 370, 300);
  arc (300, 425, 160, 100, radians (0), radians (180));

  // head
  fill(#2BBF1F);
  arc (260, 290, 150, 230, radians (-180), radians (0));
  arc (340, 290, 150, 230, radians (-180), radians (0));
  noStroke ();
  rect (270, 194, 330, 300);

  // eyes
  stroke (0);
  strokeWeight (2);
  fill(255);
  ellipse (258, 230, 58, 70);
  ellipse (342, 230, 58, 70);

  // iris
  // the iris moves with the mouse
  fill(#17A00B);
  ellipse (258+(mouseX-300)/25, 225+(mouseY-300)/30, 25, 25);
  ellipse (342+(mouseX-300)/25, 225+(mouseY-300)/30, 25, 25);
  fill (0);
  ellipse (258+(mouseX-300)/25, 225+(mouseY-300)/30, 12, 12);
  ellipse (342+(mouseX-300)/25, 225+(mouseY-300)/30, 12, 12);
  fill(255);
  noStroke ();
  ellipse (255+(mouseX-300)/25, 222+(mouseY-300)/30, 8, 8);
  ellipse (339+(mouseX-300)/25, 222+(mouseY-300)/30, 8, 8);
  constrain (mouseX, 0, 600);
  constrain (mouseY, 0, 600);
  //constrain mouse so the irises dont go outside of the eyes when the mouse is off the canvas

  // upper gums
  stroke (0);
  strokeWeight (2);
  fill (#EA0514);
  arc (300, 345, 280, 80, radians (0), radians (180));

  // upper teeth (inactive)
  fill (255);
  arc (300, 345, 35, 70, radians (0), radians(180));
  arc (240, 340, 35, 70, radians (0), radians(180));
  arc (360, 340, 35, 70, radians (0), radians(180));
  arc (190, 330, 32, 70, radians (0), radians(180));
  arc (410, 330, 32, 70, radians (0), radians(180));


  // upper mouth
  fill (#11B404);
  arc (300, 340, 300, 200, radians (-180), radians (0));
  fill(#2BBF1F);
  arc (300, 340, 300, 50, radians (0), radians (180));
  arc (240, 340, 180, 200, radians (-180), radians (0));
  arc (360, 340, 180, 200, radians (-180), radians (0));
  noStroke ();
  rect (200, 267, 400, 350);

  // nostrils
  stroke (0);
  strokeWeight (2);
  fill (0);
  ellipse (230, 310, 70, 50);
  ellipse (370, 310, 70, 50);

  // teeth
  fill (255);
  drawTeeth (300, 500, t0h);
  drawTeeth (260, 495, tl1h);
  drawTeeth (340, 495, tr1h);
  drawTeeth (227, 480, tl2h);
  drawTeeth (373, 480, tr2h);
  drawTeeth (200, 460, tl3h);
  drawTeeth (400, 460, tr3h);
  drawTeeth (192, 430, tl4h);
  drawTeeth (408, 430, tr4h);
  drawTeeth (192, 400, tl5h);
  drawTeeth (408, 400, tr5h);
}

// user defined function to draw teeth based on tooth location (X & Y) and tooth number
void drawTeeth (int tX, int tY, int tnumber) {
  arc (tX, tY, twidth, tnumber, radians (-180), radians(0));
}

void mousePressed () {

  //t0
  if (mousePressed && mouseX<300+twidth/2 && mouseX>300-twidth/2 && mouseY>500-theight/2 && mouseY<500) 
  { 
    t0h=pheight;
  }

  //tl1
  if (mousePressed && mouseX<260+twidth/2 && mouseX>260-twidth/2 && mouseY>495-theight/2 && mouseY<495) 
  { 
    tl1h=pheight;
  }

  //tr1
  if (mousePressed && mouseX<340+twidth/2 && mouseX>340-twidth/2 && mouseY>495-theight/2 && mouseY<495) 
  { 
    tr1h=pheight;
  }

  //tl2
  if (mousePressed && mouseX<227+twidth/2 && mouseX>227-twidth/2 && mouseY>480-theight/2 && mouseY<480) 
  { 
    tl2h=pheight;
  }

  //tr2
  if (mousePressed && mouseX<373+twidth/2 && mouseX>373-twidth/2 && mouseY>480-theight/2 && mouseY<480) 
  { 
    tr2h=pheight;
  }

  //tl3*** trigger tooth
  if (mousePressed && mouseX<200+twidth/2 && mouseX>200-twidth/2 && mouseY>460-theight/2 && mouseY<460) 
  { 
    tl3h=pheight;
    lose=true;
  }

  //tr3
  if (mousePressed && mouseX<400+twidth/2 && mouseX>400-twidth/2 && mouseY>460-theight/2 && mouseY<460) 
  { 
    tr3h=pheight;
  }

  //tl4
  if (mousePressed && mouseX<192+twidth/2 && mouseX>192-twidth/2 && mouseY>430-theight/2 && mouseY<430) 
  { 
    tl4h=pheight;
  }

  //tr4
  if (mousePressed && mouseX<408+twidth/2 && mouseX>408-twidth/2 && mouseY>430-theight/2 && mouseY<430) 
  { 
    tr4h=pheight;
  }

  //tl5
  if (mousePressed && mouseX<192+twidth/2 && mouseX>192-twidth/2 && mouseY>400-theight/2 && mouseY<400) 
  { 
    tl5h=pheight;
  }

  //tr5
  if (mousePressed && mouseX<408+twidth/2 && mouseX>408-twidth/2 && mouseY>400-theight/2 && mouseY<400) 
  { 
    tr5h=pheight;
  }

  if (t0h==pheight && tl1h==pheight && tr1h==pheight && tl2h==pheight && tr2h==pheight && tr3h==pheight && tl4h==pheight && tr4h==pheight && tl5h==pheight && tr5h==pheight)
  {
    win=true;
    println ("You Win!") ;
  }
}