Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
int playerSpeed = 4;
int playerY = 10;
int playerX = 10;
int playerXmove = 0;
int playerYmove = 0;

boolean menu = true;
boolean rules = false;
boolean game = false;
boolean isFinished = false;

//setup
void setup() {
  size(400, 400);
  noStroke();
  frameRate(60);
  rectMode(CORNERS);
  ellipseMode(CENTER);
  textAlign(CENTER, CENTER);

}

void finish() {
  game = false;
  isFinished = true;
}

//Main Draw
void draw() {

  if (game) {
    background (0);
    fill(16, 27, 6);
    ellipse(playerX, playerY, 150, 150);
    drawMap();
    drawPlayer();
    updatePlayer();
  }

  if (menu) {
    background(200);
    drawMenu();
  }
  if (rules) {
    background(50);
    drawRules();
  }

  if (isFinished) {
    background(25);
    drawFinish();
  }

}

//Finish screen
void drawFinish(){
  fill(66);
  ellipse(200, 200, 300, 300);
  fill(255, 0, 0);
  textSize(70);
  text("YOU WON!", 200, 100);
  fill(255);
  textSize(30);
  text("Good waste of time", 200, 180);
  text("Isn't it?", 200, 220);
  text("Press X to suffer again", 200, 340);

}

//Rules screen
void drawRules() {
  background(25);
  fill(66, 66, 66);
  ellipse(200, 200, 300, 300);
  textSize(60);
  fill(255);
  text("Rules", 200, 60);
  textSize(30);
  text("-Avoid walls-", 200, 160);
  text("-Find a portal-", 200, 200);
  text("-Don't rage-", 200, 240);
  text("Press X for Menu", 200, 350);
  text("-WASD to Move-", 200, 280);

}

//Menu screen
void drawMenu() {
  background(25);
  fill(66);
  ellipse(200, 250, 270, 270);
  fill(255);
  textSize(100);
  fill(255, 255, 95);
  text("L", 100, 60);
  text("ST", 260, 60);
  fill(155, 155, 30);
  ellipse(160, 70, 80, 80);
  fill(255, 255, 95);
  ellipse(160, 70, 10, 10);
  fill(255);
  textSize(50);
  text("R for Rules", 200, 230);
  text("G to Start", 200, 280);
  text("X for Menu", 200, 330);
  textSize(60);
  text("Press", 200, 160);

  fill(255, 0, 0);
  rotate(-PI/6);
  textSize(15);
  text("Don't rage please", 200, 220);
  rotate(PI/6);

}


//Player
void drawPlayer() {

  fill(255, 170, 0, 90);
  ellipse(playerX, playerY, 150, 150);
  fill(250, 250, 30);
  ellipse(playerX, playerY, 8, 8);
}

void drawMap() {

  //Map
  fill(0);
  rect(20, 20, 380, 40);
  rect(20, 20, 40, 280);
  rect(20, 300, 40, 380);
  rect(20, 360, 380, 380);
  rect(360, 20, 380, 280);
  rect(360, 300, 380, 380);
  rect(60, 60, 80, 340);
  rect(60, 60, 160, 80);
  rect(60, 320, 160, 340);
  rect(180, 20, 200, 120);
  rect(100, 100, 180, 120);
  rect(100, 140, 120, 220);
  rect(220, 180, 360, 200);
  rect(220, 180, 240, 300);
  rect(100, 280, 200, 300);
  rect(180, 280, 200, 340);
  rect(180, 320, 340, 340);
  rect(60, 240, 200, 260);
  rect(100, 200, 220, 220);
  rect(320, 220, 340, 340);
  rect(260, 220, 340, 240);
  rect(260, 260, 280, 320);
  rect(300, 260, 320, 280);
  rect(140, 140, 240, 160);
  rect(140, 140, 160, 180);
  rect(220, 60, 240, 160);
  rect(260, 20, 280, 160);
  rect(260, 140, 340, 160);
  rect(320, 60, 340, 120);
  rect(280, 80, 320, 100);
  rect(20, 20, 40, 360);

  //Finish portal
  fill(255, 255, 255, 50 - 255*( sqrt( pow(300 - playerX, 2) + pow(120 - playerY, 2) )/400 ) );
  ellipse(300, 120, 20, 20);
}


//Movement and Navigation
void keyPressed() {
  if (menu) {
    if (key == 'g') {
      game = true;
      menu = false;
    }
    if (key == 'r') {
      rules = true;
      menu = false;
    }
  }

  if (rules) {
    if (key == 'x') {
      rules = false;
      menu = true;
    }
    if (key == 's') {
      game = true;
      rules = false;
    }
  }

  if (game) {
    if (key == 'w') {
      playerYmove = -1;
    }
    if (key == 'a') {
      playerXmove = -1;
    }
    if (key == 's') {
      playerYmove = 1;
    }
    if (key == 'd') {
      playerXmove = 1;
    }
    if (key == 'x') {
      game = false;
      menu = true;
      //playerX = 10;
      //playerY = 10;
    }
  }

  if (isFinished) {
    if (key == 'x') {
      menu = true;
      isFinished = false;
      playerX = 10;
      playerY = 10;
    }
  }
}

void keyReleased() {
  if (key == 'w') {
    playerYmove = 0;
  } else if (key == 'a') {
    playerXmove = 0;
  } else if (key == 's') {
    playerYmove = 0;
  } else if (key == 'd') {
    playerXmove = 0;
  }
}

//Updating
void updatePlayer() {
  playerX +=playerSpeed * playerXmove;
  playerY +=playerSpeed * playerYmove;

  if( get(playerX+4, playerY+4) == color(90, 60, 0) || get(playerX+4, playerY-4) == color(90, 60, 0) || get(playerX-4, playerY+4) == color(90, 60, 0) || get(playerX-4, playerY-4) == color(90, 60, 0) )
  {
    playerX = 10;
    playerY = 10;
  }

  if( get(playerX+4, playerY+4) == 0 || get(playerX+4, playerY-4) == 0 || get(playerX-4, playerY+4) == 0 || get(playerX-4, playerY-4) == 0 )
  {
    playerX = 10;
    playerY = 10;
  }

  if (playerX < 310 && playerX > 290 && playerY < 130 && playerY > 110) {
    finish();
  }

}