//////////////////////////////////////////////////// /* ARROW MATCHER. Fun little game thing where you have to match as many arrows as possible while avoiding mistakes. All comments refer to the line below */ //////////////////////////////////////////////////// //Variables //The last arrow the player pressed, i.e their choice int choice; //Current Direction. The current direction of the arrow in the middle. Compared to choice int curDir; //Score and high score int score = 0; int hScore = 0; //Since the while loop is practically useless in Processing, rather than actually wait for player input // I just told the code to skip over choosing the next arrow until the player picks. "chose" holds that info. boolean chose = false; //Similar purpose as chose, but just used once to set up the first arrow so players can start going. boolean firstArrow = true; //Keeps track of player's lives int lives = 3; //"started" prevents most of the program from running while false boolean started = false; //Same as started, really boolean failed = false; //Checks what the time was when the clock is about to be reset float lastTime = 0; //The amount of time that has passed float time; //Used in loop int x = 0; void setup(){ size(400, 400); print("DEBUG CONSOLE: NOTHING HERE IS IMPORTANT GUYS DONT WORRY"); } void draw(){ background(150, 150, 255); noStroke(); //Don't do any of this until they've pressed start if (started){ //Don't do any of this if they're dead if (lives > 0){ //Only choose the next arrow if it's needed if (firstArrow || chose){ nextArrow(); firstArrow = false; chose = false; } //Start the timer. Subtracts time to artificially reset it time = millis() - lastTime; //Player loses when 15 seconds have passed if (time > 15000){ failed = true; score = 0; } } else { failed = true; score = 0; } //If they haven't pressed start, check if they have } else if (!started){ if (mousePressed){ if (150 < mouseX && mouseX < 250 && 150 < mouseY && mouseY < 250){ started = true; lastTime = millis(); } } } //Do this if they died if (failed){ if (mousePressed){ if (150 < mouseX && mouseX < 250 && 150 < mouseY && mouseY < 250){ failed = false; lives = 3; lastTime = millis(); } } } //Draw Elements. Draws all the GUI stuff drawElem(); } //Keeps track of score, and updates it when applicable. Also keeps track of lives. void updateScore(){ if (chose){ if (choice == curDir){ score++; print(score); if (score > hScore){ hScore = score; } } else { lives--; print("WRONG"); } } } void drawElem(){ //Four quadrants fill(140, 184, 255); triangle(0, 0, 200, 200, 400, 0); fill(140, 255, 170); triangle(400, 0, 400, 400, 200, 200); fill(247, 255, 140); triangle(400, 400, 0, 400, 200, 200); fill(255, 140, 228); triangle(0, 0, 200, 200, 0, 400); //Loop to generate the flowing circles for (int y = 0; y <= 400; y += 40){ if (x <= 400){ fill(255, 188, 188, 100); ellipse(x, y, 40, 40); x += 40; } else { x = 0; } } //All the arrows around the circle fill(130, 130, 130); rect(195, 20, 10, 100, 50); triangle(200, 10, 230, 40, 170, 40); rect(280, 195, 100, 10, 50); triangle(390, 200, 360, 230, 360, 170); rect(195, 280, 10, 100, 50); triangle(200, 390, 170, 360, 230, 360); rect(20, 195, 100, 10, 50); triangle(10, 200, 40, 170, 40, 230); //The circle(s) in the middle fill(130, 130, 130); ellipse(200, 200, 110, 110); fill(219, 219, 219); ellipse(200, 200, 100, 100); //Makes sure the game's started before drawing the middle arrow if (started){ //Middle Arrow if (curDir == 1){ //UP fill(130, 130, 130); rect(195, 175, 10, 50, 50); triangle(200, 165, 220, 185, 180, 185); } else if (curDir == 2){ //RIGHT fill(130, 130, 130); rect(175, 195, 50, 10, 50); triangle(235, 200, 215, 220, 215, 180); } else if (curDir == 3){ //DOWN fill(130, 130, 130); rect(195, 175, 10, 50, 50); triangle(200, 235, 180, 215, 220, 215); } else if (curDir == 4){ //LEFT fill(130, 130, 130); rect(175, 195, 50, 10, 50); triangle(165, 200, 185, 180, 185, 220); } //Timer bar at the bottom fill(255, 0, 0); rect(0, 380, (400 - (time / 38)), 20); //If they HAVEN'T started, draw the start "button" } else if (!started){ fill(76, 76, 76); textSize(16); text("START", 175, 205); } //If they've failed, draw the failed "button" if (failed){ fill(219, 219, 219); ellipse(200, 200, 100, 100); fill(76, 76, 76); textSize(16); text("TRY AGAIN", 160, 205); } //Draw score fill(76, 76, 76); textSize(16); text("Score: " + score, 10, 35); text("High Score: " + hScore, 10, 15); text("Lives: " + lives, 330, 15); } //Randomly pick the next arrow. Don't really need a method for this but whatever void nextArrow(){ curDir = (int)random(1, 5); print(curDir); } //Recognizes keystrokes. Key released was used instead of pressed due to repeating inputs when only one is wanted void keyReleased(){ if (keyCode == UP){ choice = 1; chose = true; fill(0, 97, 255); rect(195, 20, 10, 100, 50); triangle(200, 10, 230, 40, 170, 40); //Checks to make sure the game is still going, then updates score if (lives > 0 && started && !failed){ updateScore(); } } else if (keyCode == RIGHT){ choice = 2; chose = true; fill(0, 255, 67); rect(280, 195, 100, 10, 50); triangle(390, 200, 360, 230, 360, 170); if (lives > 0 && started && !failed){ updateScore(); } } else if (keyCode == DOWN){ choice = 3; chose = true; fill(238, 255, 0); rect(195, 280, 10, 100, 50); triangle(200, 390, 170, 360, 230, 360); if (lives > 0 && started && !failed){ updateScore(); } } else if (keyCode == LEFT){ choice = 4; chose = true; fill(255, 0, 195); rect(20, 195, 100, 10, 50); triangle(10, 200, 40, 170, 40, 230); if (lives > 0 && started && !failed){ updateScore(); } } else { //Just to be sure chose = false; } }