Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
 Creator: Andy Dang
 Intro to Media Computation
 Sept 30, 2017
 Instructor: Nicolas Hesler
 Assignment #2
 
 This is a program I made for the interactive toy. I made a two player game were players mash a 
 certain key ("o" and "w"). While the player mashes balloons at the bottom of the keys grow bigger
 and bigger till it pops.
*/

//Variables for all the player mechanics
float playerOne;
float playerTwo;
float playerOneScore;
float playerTwoScore;
float time;

//Variable for the Start Button
float startX = 150, startY = 190, startW = 100, startH = 50;

//Booleans for the various states the game checks when it goes through each transition
boolean playerState1 = false;
boolean playerState2 = false;
boolean winState1 = false;
boolean winState2 = false;
boolean startButton = false;
boolean showMainMenu = false;
boolean doCountDown = false;
boolean begin = false;

void setup() {
  size(400, 400);
  frameRate(60);
  smooth(2);
}

void draw() {
  
  //Opens to the main menu if false
  if (showMainMenu == false) {
    mainMenu();
  }
  
  //Opens to the countdown once the user clicks the start button
  if (doCountDown == true) {
    countdown();
  }
  
  //Loads the core game once every check is true
  if (startButton == true && doCountDown == true && begin == true) {
    background(200, 200, 200);
    drawPlayerOne();
    drawPlayerTwo();
    scoreCounter();
    balloonOne();
    balloonTwo();
  }
}

//Draws out the entire main Menu
void mainMenu() {

  //Rectangle to help with the repition of the text being drawn over and over again
  rectMode(CORNERS);
  stroke(0);
  fill(200, 200, 200);
  rect(0, 400, 400, 0);
  //Instructions
  textSize(30);
  fill(0);
  text("MASH", 160, 80);
  textSize(15);
  text("The Two Player Game", 120, 100);
  textSize(10);
  text("Player One will be the key w.", 130, 120);
  text("Player Two will be the key o.", 130, 140);
  text("The first person to pop their balloon wins!", 100, 160);
  textSize(30);

  //Start Button
  rectMode(CORNER);
  fill(200, 200, 200);
  rect(startX, startY, startW, startH);
  fill(0);
  text("START", 154, 225);
}

//The countdown after the start button is pressed
void countdown() {

  if (doCountDown == true) {
    time++ ;
    //Time is incremented so that when it reaches a certain value it will "countdown" by show
    //different numbers.
    if (time >= 1) {
      rectMode(CORNERS);
      fill(200, 200, 200);
      rect(0, 400, 400, 0);
      fill(0);
      textSize(100);
      text("3", 160, 300);
    }

    if (time >= 60) {
      rectMode(CORNERS);
      fill(200, 200, 200);
      rect(0, 400, 400, 0);
      fill(0);
      textSize(100);
      text("2", 160, 300);
    }

    if (time >=  120) {
      rectMode(CORNERS);
      fill(200, 200, 200);
      rect(0, 400, 400, 0);
      fill(0);
      textSize(100);
      text("1", 160, 300);
    }

    if (time == 180) {
      begin = true;
      startButton = true;
      showMainMenu = true;
    }
  }
}

//The parameters of the start button. If the Mouse is within the box of the start you can click it
void mouseClicked() {
  if (mouseX>startX && mouseX <startX+startW && mouseY>startY && mouseY <startY+startH && showMainMenu == false && doCountDown == false) {
    doCountDown = true;
    fill(200, 200, 200);
    rect(0, 400, 400, 0);
  }
}





//Drawings for the Player 1
void drawPlayerOne() {
  noStroke();

  rectMode(CORNERS);
  fill(0, 0, 0, 60);
  rect(100, 230, 180, 140);

  fill(255);
  rect(90, 220, 170, 130);


  stroke(0);
  strokeWeight(3);
  fill(255);
  rect(100, 200, 160, 140);
  line(100, 200, 90, 220);
  line(160, 200, 170, 220);
  line(160, 140, 170, 130);
  line(100, 140, 90, 130);
  strokeWeight(4);
  line(90, 130, 170, 130);
  line(170, 130, 170, 220);
  line(170, 220, 90, 220);
  line(90, 220, 90, 130);

  textSize(50);
  fill(0);
  text("W", 110, 190);
}

//Drawings for Player 2
void drawPlayerTwo() {
  noStroke();
  rectMode(CORNERS);
  fill(0, 0, 0, 60);
  rect(240, 230, 320, 140);

  fill(255);
  rect(230, 220, 310, 130);

  stroke(0);
  strokeWeight(3);
  fill(255);
  rect(240, 200, 300, 140);
  line(300, 140, 310, 130);
  line(240, 140, 230, 130);
  line(240, 200, 230, 220);
  line(300, 200, 310, 220);
  strokeWeight(4);
  line(310, 130, 230, 130);
  line(310, 130, 310, 220);
  line(230, 130, 230, 220);
  line(230, 220, 310, 220);

  textSize(50);
  fill(0);
  text("O", 250, 190);
}

//Checks to see if the ready state of playing is true also changes the player state to increment

//Player 1 animation and check
void keyPressed() {
  if (keyCode == 'W' && startButton == true && begin == true) {

    noStroke();
    fill(200, 200, 200);
    rect(80, 240, 190, 120);
    fill(255);
    rect(100, 230, 180, 140);
    stroke(0);
    strokeWeight(3);
    fill(255);
    rect(110, 210, 170, 150);
    line(110, 210, 100, 230);
    line(170, 210, 180, 230);
    line(170, 150, 180, 140);
    line(110, 150, 100, 140);
    strokeWeight(4);
    line(100, 140, 180, 140);
    line(180, 140, 180, 230);
    line(180, 230, 100, 230);
    line(100, 230, 100, 140);
    textSize(50);
    fill(0);
    text("W", 120, 200);
    playerState2 = true;
  }

//Player 2 animation and check
  if (keyCode =='O' && startButton == true && begin == true) {
    noStroke();
    fill(200, 200, 200);
    rect(220, 240, 330, 120);
    fill(255);
    rect(240, 230, 320, 140);
    stroke(0);
    strokeWeight(3);
    fill(255);
    rect(250, 210, 310, 150);
    line(310, 150, 320, 140);
    line(250, 150, 240, 140);
    line(250, 210, 240, 230);
    line(310, 210, 320, 230);
    strokeWeight(4);
    line(320, 140, 240, 140);
    line(320, 140, 320, 230);
    line(240, 140, 240, 230);
    line(240, 230, 320, 230);
    textSize(50);
    fill(0);
    text("O", 260, 200);
    playerState1 = true;
  }
}

//This is the check for the key presses and increment. I had to make sure that the button when it was released
//or else the player could hold down the button to gain ballon size
void keyReleased() {
  
  //Once again checking the game state at different points in the "animations" to make sure no key presses
  if (key == 'w' && winState1 == false && startButton == true && begin == true ) {
    playerState1 = false;
    playerOneScore++;
  }

  if (key == 'o' && winState2 == false && startButton == true && begin == true) {
    playerState2 = false;
    playerTwoScore++;
  }
}

//Small animation of the balloon increasing in size
void balloonOne() {
  if (startButton == true) {

    strokeWeight(2);
    fill(random(200), random(200), random(200), 70);
    ellipse(139, 320, 20, 20);
    
    //Counts the score of the Player One and if they reach a certain score the balloon will change
    if (playerOneScore >=10) {
      fill(200, 200, 200);
      noStroke();
      ellipse(139, 290, 80, 80);
      stroke(0);
      fill(random(200), random(200), random(200), 70);
      strokeWeight(2);
      ellipse(139, 315, 30, 30);
    }
    
    if (playerOneScore >30) {
      fill(200, 200, 200);
      noStroke();
      ellipse(139, 290, 80, 80);
      stroke(0);
      fill(random(200), random(200), random(200), 70);
      strokeWeight(2);
      ellipse(139, 310, 40, 40);
    }
    
    if (playerOneScore >=50) {
      fill(200, 200, 200);
      noStroke();
      ellipse(139, 290, 80, 80);
      stroke(0);
      fill(random(200), random(200), random(200), 70);
      strokeWeight(2);
      ellipse(139, 305, 50, 50);
    }

    if (playerOneScore >=70) {
      fill(200, 200, 200);
      noStroke();
      ellipse(139, 290, 80, 80);
      stroke(0);
      fill(random(200), random(200), random(200), 70);
      strokeWeight(2);
      ellipse(139, 300, 60, 60);
    }
    
    //Once the player wins the win state is set to true and the other player has no way to win
    if (playerOneScore >=100) {
      fill(200, 200, 200);
      noStroke();
      ellipse(139, 290, 80, 80);
      stroke(0);
      strokeWeight(2);
      line(130, 310, 125, 302.5);
      line(140, 310, 140, 300);
      line(150, 310, 155, 302.5);
      winState1 = true;
      winState2 = false;
    }

    strokeWeight(2);
    line(133, 329, 130, 335);
    line(130, 335, 136, 333);
    line(136, 333, 139, 340);
    line(139, 340, 142, 333);
    line(142, 333, 148, 335);
    line(148, 335, 146, 329);
  }
}

//Balloon state of player 2 based on key presses.
void balloonTwo() {
  if (startButton == true) {
    strokeWeight(2);
    fill(random(200), random(200), random(200), 70);
    ellipse(259, 320, 20, 20);

    if (playerTwoScore >=10) {
      fill(200, 200, 200);
      noStroke();
      ellipse(259, 290, 80, 80);
      stroke(0);
      fill(random(200), random(200), random(200), 70);
      strokeWeight(2);
      ellipse(259, 315, 30, 30);
    }
    if (playerTwoScore >30) {
      fill(200, 200, 200);
      noStroke();
      ellipse(259, 290, 80, 80);
      stroke(0);
      fill(random(200), random(200), random(200), 70);
      strokeWeight(2);
      ellipse(259, 310, 40, 40);
    }
    if (playerTwoScore >=50) {
      fill(200, 200, 200);
      noStroke();
      ellipse(259, 290, 80, 80);
      stroke(0);
      fill(random(200), random(200), random(200), 70);
      strokeWeight(2);
      ellipse(259, 305, 50, 50);
    }

    if (playerTwoScore >=70) {
      fill(200, 200, 200);
      noStroke();
      ellipse(259, 290, 80, 80);
      stroke(0);
      fill(random(200), random(200), random(200), 70);
      strokeWeight(2);
      ellipse(259, 300, 60, 60);
    }

    if (playerTwoScore >=100) {
      fill(200, 200, 200);
      noStroke();
      ellipse(259, 290, 80, 80);
      stroke(0);
      strokeWeight(2);
      line(250, 310, 245, 302.5);
      line(260, 310, 260, 300);
      line(270, 310, 275, 302.5);

      winState1 = false;
      winState2 = true;
    }

    stroke(0);
    line(253, 329, 250, 335);
    line(250, 335, 256, 333);
    line(256, 333, 259, 340);
    line(259, 340, 262, 333);
    line(262, 333, 268, 335);
    line(268, 335, 266, 329);
  }
}

//The score counter determines who is the winner. Once either condition is met the counter is then
//counted down so that the loser has no way to overwrite the other winner.
void scoreCounter() {
  textSize(10);
  
  //Once the condition is met screen text appears on the screen and the game is over
  if (playerOneScore >= 100 && winState1 == true && winState2 == false && begin == true) {

    textSize(20);
    fill(random(255), random(255), random(255));
    text("PLAYER 1 WINS", 135, 80);
    playerTwoScore--;
  }

  if (playerTwoScore >= 100 && winState2 == true && winState1 == false && begin == true) {

    textSize(20);
    fill(random(255), random(255), random(255));
    text("PLAYER 2 WINS", 135, 80);
    playerOneScore--;
  }
}