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();
}
}