Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
// Fuzzy Adventure - Liliana Nairn
// It is a mini puzzle. You have to flip the switch then get to the baby Fuzzy.
// Reference - Burglar Escape (2014), reference used for getting the Fuzzy's movements to work.

// Variables
// The variables used for WASD
int moveUp = 0;
int moveDown = 0;
int moveLeft = 0;
int moveRight = 0;
float fuzzySpeed = 1.5;
// The Y coordinate of the lever
int leverTipY1 = 225;
int leverTipY2 = 230;
int leverY1 = 225;
int leverY2 = 245;
// Lever true or false
boolean lever1 = false;
// The X coordinate of the Fuzzy
float fuzzyPositionX = 40;
// The Y coordinate of the Fuzzy
float fuzzyPositionY = 367.5;

void setup() {
  size(400, 400);
  rectMode(CENTER);
  ellipseMode(CENTER);
  // Instructions for the player
  print("Help! The Fuzzy's baby has been trapped. Help the Fuzzy save the baby by flipping the switch by pressing the spacebar. Then move the Fuzzy with the WASD keys and get to the baby.");
}

void draw() {
  // Draw the background
  drawBackground();

  // Draw trap
  drawTrap();

  // Draw the Levers
  drawLever();

  // Draw Walls around Lever
  drawWalls();

  // Update the Lever's position
  updateLever();

  // Update the Lever's position
  updateDoor();

  // How fast the 
  moveSpeed();

  // Draw Fuzzy
  drawFuzzy();

  // Draw Baby Fuzzy
  drawBaby();

  // When you get the baby Fuzzy
  babyFuzzySaved();

  //Set Cave boundaries
  caveBoundaries();
}

void keyPressed() {
  moveFuzzy();
}

void moveSpeed() {
  // The full movement of the Fuzzy
  fuzzyPositionX = fuzzyPositionX + (moveRight-moveLeft)*fuzzySpeed;
  fuzzyPositionY = fuzzyPositionY + (moveDown-moveUp)*fuzzySpeed;
}

// Updates the Fuzzy's position
void moveFuzzy() {
  if (keyPressed) {
    if (key == 'w' || key == 'W') {
      moveUp = 1;
    } else if (key == 'a' || key == 'A') {
      moveLeft = 1;
    } else if (key == 's' || key == 'S') {
      moveDown = 1;
    } else if (key == 'd' || key == 'D') {
      moveRight = 1;
    }
  }
}

// Key release
void keyReleased() {

  if (key == 'w' || key == 'W') {
    moveUp = 0;
  } else  if (key == 'a' || key == 'A') {
    moveLeft = 0;
  } else if (key == 's' || key == 'S') {
    moveDown = 0;
  } else if (key == 'd' || key == 'D') {
    moveRight = 0;
  }
}

// Updates the Door's Lever position
void updateLever() {
  if (keyPressed) {
    if (key == ' ') {
      leverY1 = 245;
      leverY2 = 265;
      leverTipY1 = 260;
      leverTipY2 = 265;
      drawLever();
    }
  }
}


// Updates the Door's position
void updateDoor() {
  if (keyPressed) {
    if (key == ' ') {
      lever1 = true;
    }
  }
  if (lever1) {
    fill(68, 70, 79);
    stroke(68, 70, 79);
    rect(325, 50, 15, 60);
    stroke(0);
  } 
}

// When you save the Fuzzy
void babyFuzzySaved() {
  if ((fuzzyPositionX >= 320) && (fuzzyPositionY <= 100) && (lever1 == true)) {
    fill(64,41, 0);
    stroke(64, 41, 0);
    rect(360, 50, 20, 12.5);
    fill(255);
    stroke(0);
    ellipse(355, 47.5, 5, 15);
    ellipse(365, 47.5, 5, 15);
    fill(0);
    stroke(0);
    ellipse(355, 47.5, 2.5, 7.5);
    ellipse(365, 47.5, 2.5, 7.5);
    print("Yeah! You saved the baby Fuzzy!");
  } 
}

// Draws the background
void drawBackground() {
  background(68, 70, 79);
  fill(33, 34, 38);
  // Cave walls
  rect(5, 200, 10, 400);
  rect(395, 200, 10, 400);
  rect(200, 5, 400, 10);
  rect(200, 15, 380, 10);
  rect(235, 395, 330, 10);
}


// Draws the Trap walls
void drawTrap() {
  fill(33, 34, 38);
  stroke(0);
  for (int doorX = 320; doorX < 335; doorX = doorX + 5) {
    line(doorX, 10, doorX, 80);
  }
  rect(355, 85, 70, 10);
  rect(355, 95, 70, 10);
}

// Draws the Fuzzy at its starting position
void drawFuzzy() {
  fill(38, 24, 0);
  stroke(0);
  rect(fuzzyPositionX-7.5, fuzzyPositionY+17.5, 2.5, 5);
  rect(fuzzyPositionX+7.5, fuzzyPositionY+17.5, 2.5, 5);
  fill(64, 41, 0);
  ellipse(fuzzyPositionX, fuzzyPositionY, 40, 35);
  fill(255);
  ellipse(fuzzyPositionX-5, fuzzyPositionY, 7.5, 15);
  ellipse(fuzzyPositionX+5, fuzzyPositionY, 7.5, 15);
  fill(0);
  ellipse(fuzzyPositionX-5, fuzzyPositionY, 3.25, 7.5);
  ellipse(fuzzyPositionX+5, fuzzyPositionY, 3.25, 7.5);
}

// Draws the baby Fuzzy
void drawBaby() {
  fill(64, 41, 0);
  ellipse(360, 47.5, 30, 25);
  fill(0);
  line(352.5, 42.5, 360, 47.5);
  line(352.5, 50, 360, 47.5);
  line(367.5, 42.5, 360, 47.5);
  line(367.5, 50, 360, 47.5);
}

// Draws the Door Lever
void drawLever() {
  //glow
  float randomR =random(255);
  float randomG =random(255);
  float randomB =random(255);
  fill(randomR, randomG, randomB, 50);
  noStroke();
  ellipse (250, 245, 50, 50);
  stroke(0);
  // Base of lever
  fill(191, 122, 0);
  rect(250, 245, 20, 30);
  fill(0);
  rect(250, 245, 10, 20);
  // Handle of lever
  rectMode(CORNERS);
  fill(163, 170, 191);
  rect(247.5, leverY1, 252.5, leverY2);
  fill(255, 162, 0);
  rect(247.5, leverTipY1, 252.5, leverTipY2);
  rectMode(CENTER);
}

// Draw the Walls
void drawWalls() {
  fill(33, 34, 38);
  stroke(0);
  rect(215, 240, 10, 60);
  rect(285, 240, 10, 60);
  rect(250, 275, 80, 10);
  rect(250, 285, 80, 10);
}

// Boundaries for the Fuzzy not go through cave walls, 
void caveBoundaries() {
  if (fuzzyPositionX >= width) {
    fuzzyPositionX = 380;
  } else
    if (fuzzyPositionX <= 0) {
      fuzzyPositionX = 20;
    } else
      if (fuzzyPositionY >= height) {
        fuzzyPositionY = 380;
      } else if (fuzzyPositionY <= 0) {
        fuzzyPositionY = 20;
      }
}