Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//////////////////////////////
// Maze Game by Bradley LeDonne
// Interactive Toy - Assignment 2
//This program can be controlled using WASD to move, you must make it to the yellow platform to win!
//The code for rect rect intersect was taken off open processing: http://www.openprocessing.org/sketch/8005  all credit for it goes to the creator
//////////////////////////////
//



//define variable for player position
float playerPositionX;
float playerPositionY;

//first obstacle
float obstacleX1 = 50;
float obstacleY1 = 340;
float obstacleX2 = 400;
float obstacleY2 = 10;

//second obstacle
float obstacleX3 = 10;
float obstacleY3 = 305;
float obstacleX4 = 325;
float obstacleY4 = 10;

//third obstacle
float obstacleX5 = 50;
float obstacleY5 = 270;
float obstacleX6 = 400;
float obstacleY6 = 10;

//fourth obstacle - veritcal
float obstacleX7 = 50;
float obstacleY7 = 100;
float obstacleX8 = 10;
float obstacleY8 = 175;

//fifth obstacle
float obstacleX9 = 50;
float obstacleY9 = 100;
float obstacleX10 = 300;
float obstacleY10 = 10;


//sixth obstacle - vertical
float obstacleX11 = 340;
float obstacleY11 = 0;
float obstacleX12 = 10;
float obstacleY12 = 100;

//seventh obstacle
float obstacleX13 = 0;
float obstacleY13 = 65;
float obstacleX14 = 300;
float obstacleY14 = 10;

//Win Platform
float winX1 = 0;
float winY1 = 10;
float winX2 = 50;
float winY2 = 55;


//define player size
float playerSize=20;

//set default movement state
boolean goLeft=false;
boolean goRight=false;
boolean goUp=false;
boolean goDown=false;


//set canvas size and player position
void setup() {
  size(400, 400);
  playerPositionX=width/1.07;
  playerPositionY=height/1.07;
}


//call custom function to start at program start
void draw() {
  background(0);

  drawWin();

  drawPlayer();

  drawObstacles();

  movePlayerPosition();

  DrawBorder();

  collisionDetect();
}

//draw the player square
void drawPlayer() {
  rectMode(CORNER);
  fill(random(0, 255), random(0, 255), random(0, 255));
  rect(playerPositionX, playerPositionY, playerSize, playerSize);
}

//make movement possible with function
void movePlayerPosition() {

  //moves up and down
  if (goUp && playerPositionY > 20)
  {
    playerPositionY = playerPositionY - 4;
  } else if (goDown && playerPositionY < 400-playerSize)
  {
    playerPositionY = playerPositionY + 4;
  }

  //moves right and left
  if (goLeft && playerPositionX > 20)
  {
    playerPositionX = playerPositionX - 4;
  } else if (goRight && playerPositionX <400-playerSize)
  {
    playerPositionX = playerPositionX + 4;
  }
}

//draw the red border on the edges of screen
void DrawBorder() {
  noStroke();
  rectMode(CENTER);
  fill(255, 0, 0);
  rect(0, 200, 40, 400);
  rect(200, 0, 400, 40);
  rect(0, 400, 800, 15);
  rect(400, 0, 10, 800);
}

//set WASD to activate booleans to true
void keyPressed() {
  if (key == 'w') {
    goUp=true;
  } else if (key == 'a') {
    goLeft=true;
  } else if (key == 's') {
    goDown=true;
  } else if (key == 'd') {
    goRight=true;
  }
}

//when WASD released reset booleans to false
void keyReleased() {
  if (key == 'w') {
    goUp=false;
  } else if (key == 'a') {
    goLeft=false;
  } else if (key == 's') {
    goDown=false;
  } else if (key == 'd') {
    goRight=false;
  }
}

//detect for collision with border and walls
void collisionDetect() {
  //border collision detection
  if (playerPositionX <= 20)
  {
    death();
  } else if (playerPositionY<=20) {
    death();
  } else if (playerPositionX>=380) {
    death();
  } else if (playerPositionY>=380) {
    death();
  }

  //detect for the walls/obstacles around the map using the rectRectIntersect function
  if (rectRectIntersect(playerPositionX, playerPositionY, playerPositionX, playerPositionY, obstacleX1, obstacleY1, obstacleX1+obstacleX2, obstacleY1+obstacleY2) == true) {
    death();
  }
  if (rectRectIntersect(playerPositionX, playerPositionY, playerPositionX, playerPositionY, obstacleX3, obstacleY3, obstacleX3+obstacleX4, obstacleY3+obstacleY4) == true) {
    death();
  }
  if (rectRectIntersect(playerPositionX, playerPositionY, playerPositionX, playerPositionY, obstacleX5, obstacleY5, obstacleX5+obstacleX6, obstacleY5+obstacleY6) == true) {
    death();
  }
  if (rectRectIntersect(playerPositionX, playerPositionY, playerPositionX, playerPositionY, obstacleX7, obstacleY7, obstacleX7+obstacleX8, obstacleY7+obstacleY8) == true) {
    death();
  }
  if (rectRectIntersect(playerPositionX, playerPositionY, playerPositionX, playerPositionY, obstacleX9, obstacleY9, obstacleX9+obstacleX10, obstacleY9+obstacleY10) == true) {
    death();
  }
  if (rectRectIntersect(playerPositionX, playerPositionY, playerPositionX, playerPositionY, obstacleX11, obstacleY11, obstacleX11+obstacleX12, obstacleY11+obstacleY12) == true) {
    death();
  }
  if (rectRectIntersect(playerPositionX, playerPositionY, playerPositionX, playerPositionY, obstacleX13, obstacleY13, obstacleX13+obstacleX14, obstacleY13+obstacleY14) == true) {
    death();
  }
  if (rectRectIntersect(playerPositionX, playerPositionY, playerPositionX, playerPositionY, winX1, winY1, winX1+winX2, winY1+winY2) == true) {
    win();
  }
} 

//function for collision detection
boolean rectRectIntersect(float left, float top, float right, float bottom, 
  float otherLeft, float otherTop, float otherRight, float otherBottom) {
  return !(left > otherRight || right < otherLeft || top > otherBottom || bottom < otherTop);
}  


//reset player position on death
void death() {
  playerPositionX=width/1.07;
  playerPositionY=height/1.07;
}


//on win display rainbow lines on screen
void win() {
  for (int i=0; i<=400; i=i+15) {
    stroke((random(0, 255)), random(0, 255), random(0, 255));
    strokeWeight(5);    
    line(i, 400, i, 0);
  }
}

//draw the obstacles around the map
void drawObstacles() {
  rectMode(CORNER);
  fill(255);
  //first obstacle
  rect(obstacleX1, obstacleY1, obstacleX2, obstacleY2);
  //second obstacle
  rect(obstacleX3, obstacleY3, obstacleX4, obstacleY4);
  //third obstacle
  rect(obstacleX5, obstacleY5, obstacleX6, obstacleY6);
  //fourth obstacle - vertical
  rect(obstacleX7, obstacleY7, obstacleX8, obstacleY8);
  //fifth obstacle 
  rect(obstacleX9, obstacleY9, obstacleX10, obstacleY10);
  //sixth obstacle 
  rect(obstacleX11, obstacleY11, obstacleX12, obstacleY12);
  //seventh obstacle 
  rect(obstacleX13, obstacleY13, obstacleX14, obstacleY14);
}

//draw the win platform at end of map
void drawWin() {
  //Win Platform 
  rectMode(CORNER);
  fill(255, 255, 0);
  rect(winX1, winY1, winX2, winY2);
}