Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
color hatBrown = color(125, 80, 35);
color gun = color(140);
color ponchoOne = color(random(0, 255), random(0, 255), random(0, 255));
color ponchoTwo = color(random(0, 255), random(0, 255), random(0, 255));
color shirt = color(210, 210, 255);
color shirtDark = color(200, 200, 245);
color skin = color(250, 220, 190);
color pantsBrown = color(210, 130, 62);
color sky = color(130,205,240);

boolean movePlayerOne = false;
int playerOneXPos = 140;
boolean playerOneWin = false;
int playerOneWinSpot = 60;

boolean movePlayerTwo = false;
int playerTwoXPos = 260;
boolean playerTwoWin = false;
int playerTwoWinSpot = 340;

int time;
int wait = 1000;
int timeDisplay = 4;
boolean countDownStarted = false;
boolean gameOver = false;

int cloudPosX = 80;

void setup() {
  size(400, 400);
  time = millis();
}

void draw() {
  background(230);
  drawSky();
  drawClouds();
  drawMountains();
  drawGround();
  drawHalfLine();
  countDown();
  updatePlayerOne();
  updatePlayerTwo();
  drawPlayerOne();
  drawPlayerTwo();
}

void drawSky() {
  fill(sky);
  rect(0, 0, 400, 200);
}

void drawClouds() {
  for (int i = 0; i < 400; i = i+ 180) {
    fill(255);
    quad(i + cloudPosX - 110, 40, i + cloudPosX - 90, 20, i + cloudPosX - 90, 80, i + cloudPosX - 110, 60);
    rect(i + cloudPosX - 90, 20, i + cloudPosX - 70, 80);
    quad(i + cloudPosX - 70, 20, i + cloudPosX - 50, 40, i + cloudPosX - 50, 60, i + cloudPosX - 70, 80);
    rect(i + cloudPosX - 80, 30, i + cloudPosX, 50);
    quad(i + cloudPosX - 80, 50, i + cloudPosX, 50, i + cloudPosX - 20, 70, i + cloudPosX - 80, 70);
    quad(i + cloudPosX - 70, 30, i + cloudPosX - 50, 10, i + cloudPosX - 20, 10, i + cloudPosX, 30);
  }
}

void keyPressed() {
  //and the player presses V
  if (key == 'v') {
    //start the game
    countDownStarted = true;
  }
  //If the game hasnt ended
  if (gameOver == false) {
    //and the countdown is finished
    if (timeDisplay == 0) {
      //If X is pressed, player one moves
      if (key == 'x' || key =='X') {
        movePlayerOne = true;
      }
      //If N is pressed, player two moves
      if (key == 'n' || key == 'N') {
        movePlayerTwo = true;
      }
    }
  } else if (gameOver == true) {
    if (key == 'v' || key == 'V') {
      playerOneXPos = 140;
      playerTwoXPos = 260;
      playerOneWin = false;
      playerTwoWin = false;
      countDownStarted = true;
      gameOver=false;
    }
  }
}

//Draw the Mountains
void drawMountains() {
  fill(225, 160, 225);
  quad(220, 20, 260, 20, 280, 200, 180, 200);
  quad(260, 60, 280, 60, 320, 200, 220, 200);
  triangle(280, 100, 380, 200, 260, 200);
  quad(380, 0, 400, 0, 400, 200, 360, 200);
  triangle(380, 80, 380, 200, 300, 200);
  triangle(260, 80, 260, 200, 80, 200);
  triangle(120, 80, 220, 200, 120, 200);
  quad(105, 65, 130, 65, 140, 200, 65, 200);
  quad(60, 90, 80, 90, 100, 200, 20, 200);
  quad(20, 10, 40, 10, 60, 200, 0, 200);
  quad(0, 50, 10, 50, 40, 200, 0, 200);
}

//Draw the ground
void drawGround() {
  fill(250, 240, 180);
  rect(0, 200, 400, 400);
}

//Draw the Halfway Line
void drawHalfLine() {
  fill(0);
  rectMode(CORNERS);
  rect(198, 240, 202, 360);
}

//Count Down
void countDown() {
  if (countDownStarted == false) {
    textSize(32);
    fill(0);
    text("Press Start", 120, 100);
  }

  if (countDownStarted == true) {
    if (timeDisplay != 0) {
      fill(0);
      text(timeDisplay, 190, 150);
    } else if (timeDisplay == 0) {
      if (gameOver == false) {
        textSize(32);
        fill(0);
        text("GO!", 175, 150);
      }
    }

    if (timeDisplay != 0) {
      if (millis() - time >= wait) {
        println("time until start: " + timeDisplay);
        timeDisplay = timeDisplay-1;
        time = millis();
      }
    }
  }
}

//Update the First PLayer
void updatePlayerOne() {
  // println("player one x position: " + playerOneXPos);
  //If the key is pressed move left
  if (movePlayerOne == true && playerOneXPos > playerOneWinSpot) {
    playerOneXPos = playerOneXPos - 6;
    movePlayerOne = false;
  }
  //If player one reache the win spot
  if (playerOneXPos <= playerOneWinSpot) {
    textSize(32);
    fill(0);
    text("Press Start", 120, 100);
    textSize(16);
    text("Player One Wins", 135, 180);
    playerOneWin = true;
    gameOver = true;
  }
}

//Update the Second Player
void updatePlayerTwo() {
  // println("player two x position: " + playerTwoXPos);
  //If the key is pressed move right
  if (movePlayerTwo == true && playerTwoXPos < playerTwoWinSpot) {
    playerTwoXPos = playerTwoXPos + 6;
    movePlayerTwo = false;
  }
  //if player two wins
  if (playerTwoXPos >= playerTwoWinSpot) {
    playerTwoWin = true;
    textSize(32);
    fill(0);
    text("Press Start", 120, 100);
    textSize(16);
    text("Player Two Wins", 135, 180);
    playerTwoWin = true;
    gameOver = true;
  }
}

//Draw the First Player
void drawPlayerOne() {
  if (playerOneWin == true) {
    fill(pantsBrown);
    quad(playerOneXPos - 30, 270, playerOneXPos - 40, 270, playerOneXPos - 39, 288, playerOneXPos - 31, 288);
    //Boot
    fill(hatBrown);
    rectMode(CORNERS);
    rect(playerOneXPos - 30, 286, playerOneXPos - 40, 290);
    quad(playerOneXPos - 31, 288, playerOneXPos - 39, 288, playerOneXPos - 39, 300, playerOneXPos - 34, 300);
    quad(playerOneXPos - 20, 297, playerOneXPos - 30, 297, playerOneXPos - 28, 300, playerOneXPos - 20, 300);
    quad(playerOneXPos - 20, 297, playerOneXPos - 36, 290, playerOneXPos - 36, 296, playerOneXPos - 28, 300); 
    //Shirt
    fill(shirtDark);
    rect(playerOneXPos - 29, 260, playerOneXPos - 41, 275);  
    //Poncho
    fill(ponchoOne);
    quad(playerOneXPos - 25, 255, playerOneXPos - 30, 250, playerOneXPos - 40, 250, playerOneXPos - 45, 255);
    triangle(playerOneXPos - 25, 255, playerOneXPos - 45, 255, playerOneXPos - 25, 275);
    triangle(playerOneXPos - 25, 255, playerOneXPos - 45, 255, playerOneXPos - 45, 275);
    //Gun
    fill(gun);
    rect(playerOneXPos - 15, 262, playerOneXPos - 21, 266);
    fill(gun-50);
    triangle(playerOneXPos - 21, 262, playerOneXPos - 24, 267, playerOneXPos - 21, 267);
    rect(playerOneXPos - 10, 263, playerOneXPos - 16, 265);
    //Hand
    fill(skin);
    rect(playerOneXPos - 22, 266, playerOneXPos - 28, 271);
    rect(playerOneXPos - 18, 266, playerOneXPos - 23, 268);
    //Arm
    fill(shirt);
    ellipseMode(CENTER);
    ellipse(playerOneXPos - 35, 258, 8, 8);
    rect(playerOneXPos - 31, 258, playerOneXPos - 39, 267);
    rect(playerOneXPos - 27, 265, playerOneXPos - 39, 272);
    //Head
    noStroke();
    fill(skin);
    rectMode(CORNERS);
    rect(playerOneXPos - 29, 240, playerOneXPos - 41, 250);
    triangle(playerOneXPos - 29, 250, playerOneXPos - 41, 250, playerOneXPos - 29, 252);
    triangle(playerOneXPos - 29, 240, playerOneXPos - 29, 247, playerOneXPos - 25, 247);
    quad(playerOneXPos - 41, 240, playerOneXPos - 44, 240, playerOneXPos - 44, 244, playerOneXPos - 41, 246);
    //Hat 
    noStroke();
    fill(hatBrown);
    triangle(playerOneXPos - 29, 230, playerOneXPos - 35, 225, playerOneXPos - 41, 230);
    rectMode(CORNERS);
    rect(playerOneXPos - 29, 230, playerOneXPos - 41, 235);
    quad(playerOneXPos - 20, 240, playerOneXPos - 25, 234, playerOneXPos - 45, 234, playerOneXPos - 50, 240); 
    //Eye
    fill(0);
    rect(playerOneXPos - 30, 242, playerOneXPos - 34, 243);
  } else {
    //Leg
    fill(pantsBrown);
    quad(playerOneXPos + 30, 270, playerOneXPos + 40, 270, playerOneXPos + 39, 288, playerOneXPos + 31, 288);
    //Boot
    fill(hatBrown);
    rectMode(CORNERS);
    rect(playerOneXPos + 30, 286, playerOneXPos + 40, 290);
    quad(playerOneXPos + 31, 288, playerOneXPos + 39, 288, playerOneXPos + 39, 300, playerOneXPos + 34, 300);
    quad(playerOneXPos + 20, 297, playerOneXPos + 30, 297, playerOneXPos + 28, 300, playerOneXPos + 20, 300);
    quad(playerOneXPos + 20, 297, playerOneXPos + 36, 290, playerOneXPos + 36, 296, playerOneXPos + 28, 300); 
    //Shirt
    fill(shirtDark);
    rect(playerOneXPos + 29, 260, playerOneXPos + 41, 275);  
    //Poncho
    fill(ponchoOne);
    quad(playerOneXPos + 25, 255, playerOneXPos + 30, 250, playerOneXPos + 40, 250, playerOneXPos + 45, 255);
    triangle(playerOneXPos + 25, 255, playerOneXPos + 45, 255, playerOneXPos + 25, 275);
    triangle(playerOneXPos + 25, 255, playerOneXPos + 45, 255, playerOneXPos + 45, 275);
    //Gun
    fill(gun);
    rect(playerOneXPos + 15, 262, playerOneXPos + 21, 266);
    fill(gun-50);
    triangle(playerOneXPos + 21, 262, playerOneXPos + 24, 267, playerOneXPos + 21, 267);
    rect(playerOneXPos + 10, 263, playerOneXPos + 16, 265);
    //Hand
    fill(skin);
    rect(playerOneXPos + 22, 266, playerOneXPos + 28, 271);
    rect(playerOneXPos + 18, 266, playerOneXPos + 23, 268);
    //Arm
    fill(shirt);
    ellipseMode(CENTER);
    ellipse(playerOneXPos + 35, 258, 8, 8);
    rect(playerOneXPos + 31, 258, playerOneXPos + 39, 267);
    rect(playerOneXPos + 27, 265, playerOneXPos + 39, 272);
    //Head
    noStroke();
    fill(skin);
    rectMode(CORNERS);
    rect(playerOneXPos + 29, 240, playerOneXPos + 41, 250);
    triangle(playerOneXPos + 29, 250, playerOneXPos + 41, 250, playerOneXPos + 29, 252);
    triangle(playerOneXPos + 29, 240, playerOneXPos + 29, 247, playerOneXPos + 25, 247);
    quad(playerOneXPos + 41, 240, playerOneXPos + 44, 240, playerOneXPos + 44, 244, playerOneXPos + 41, 246);
    //Hat 
    noStroke();
    fill(hatBrown);
    triangle(playerOneXPos + 29, 230, playerOneXPos + 35, 225, playerOneXPos + 41, 230);
    rectMode(CORNERS);
    rect(playerOneXPos + 29, 230, playerOneXPos + 41, 235);
    quad(playerOneXPos + 20, 240, playerOneXPos + 25, 234, playerOneXPos + 45, 234, playerOneXPos + 50, 240); 
    //Eye
    fill(0);
    rect(playerOneXPos + 30, 242, playerOneXPos + 34, 243);
  }
}

void drawPlayerTwo() {
  if (playerTwoWin == true) {
    fill(pantsBrown);
    quad(playerTwoXPos + 30, 270, playerTwoXPos + 40, 270, playerTwoXPos + 39, 288, playerTwoXPos + 31, 288);
    //Boot
    fill(hatBrown);
    rectMode(CORNERS);
    rect(playerTwoXPos + 30, 286, playerTwoXPos + 40, 290);
    quad(playerTwoXPos + 31, 288, playerTwoXPos + 39, 288, playerTwoXPos + 39, 300, playerTwoXPos + 34, 300);
    quad(playerTwoXPos + 20, 297, playerTwoXPos + 30, 297, playerTwoXPos + 28, 300, playerTwoXPos + 20, 300);
    quad(playerTwoXPos + 20, 297, playerTwoXPos + 36, 290, playerTwoXPos + 36, 296, playerTwoXPos + 28, 300); 
    //Shirt
    fill(shirtDark);
    rect(playerTwoXPos + 29, 260, playerTwoXPos + 41, 275);  
    //Poncho
    fill(ponchoOne);
    quad(playerTwoXPos + 25, 255, playerTwoXPos + 30, 250, playerTwoXPos + 40, 250, playerTwoXPos + 45, 255);
    triangle(playerTwoXPos + 25, 255, playerTwoXPos + 45, 255, playerTwoXPos + 25, 275);
    triangle(playerTwoXPos + 25, 255, playerTwoXPos + 45, 255, playerTwoXPos + 45, 275);
    //Gun
    fill(gun);
    rect(playerTwoXPos + 15, 262, playerTwoXPos + 21, 266);
    fill(gun-50);
    triangle(playerTwoXPos + 21, 262, playerTwoXPos + 24, 267, playerTwoXPos + 21, 267);
    rect(playerTwoXPos + 10, 263, playerTwoXPos + 16, 265);
    //Hand
    fill(skin);
    rect(playerTwoXPos + 22, 266, playerTwoXPos + 28, 271);
    rect(playerTwoXPos + 18, 266, playerTwoXPos + 23, 268);
    //Arm
    fill(shirt);
    ellipseMode(CENTER);
    ellipse(playerTwoXPos + 35, 258, 8, 8);
    rect(playerTwoXPos + 31, 258, playerTwoXPos + 39, 267);
    rect(playerTwoXPos + 27, 265, playerTwoXPos + 39, 272);
    //Head
    noStroke();
    fill(skin);
    rectMode(CORNERS);
    rect(playerTwoXPos + 29, 240, playerTwoXPos + 41, 250);
    triangle(playerTwoXPos + 29, 250, playerTwoXPos + 41, 250, playerTwoXPos + 29, 252);
    triangle(playerTwoXPos + 29, 240, playerTwoXPos + 29, 247, playerTwoXPos + 25, 247);
    quad(playerTwoXPos + 41, 240, playerTwoXPos + 44, 240, playerTwoXPos + 44, 244, playerTwoXPos + 41, 246);
    //Hat 
    noStroke();
    fill(hatBrown);
    triangle(playerTwoXPos + 29, 230, playerTwoXPos + 35, 225, playerTwoXPos + 41, 230);
    rectMode(CORNERS);
    rect(playerTwoXPos + 29, 230, playerTwoXPos + 41, 235);
    quad(playerTwoXPos + 20, 240, playerTwoXPos + 25, 234, playerTwoXPos + 45, 234, playerTwoXPos + 50, 240); 
    //Eye
    fill(0);
    rect(playerTwoXPos + 30, 242, playerTwoXPos + 34, 243);
  } else {
    //Leg
    fill(pantsBrown);
    quad(playerTwoXPos - 30, 270, playerTwoXPos - 40, 270, playerTwoXPos - 39, 288, playerTwoXPos - 31, 288);
    //Boot
    fill(hatBrown);
    rectMode(CORNERS);
    rect(playerTwoXPos - 30, 286, playerTwoXPos - 40, 290);
    quad(playerTwoXPos - 31, 288, playerTwoXPos - 39, 288, playerTwoXPos - 39, 300, playerTwoXPos - 34, 300);
    quad(playerTwoXPos - 20, 297, playerTwoXPos - 30, 297, playerTwoXPos - 28, 300, playerTwoXPos - 20, 300);
    quad(playerTwoXPos - 20, 297, playerTwoXPos - 36, 290, playerTwoXPos - 36, 296, playerTwoXPos - 28, 300); 
    //Shirt
    fill(shirtDark);
    rect(playerTwoXPos - 29, 260, playerTwoXPos - 41, 275);  
    //Poncho
    fill(ponchoTwo);
    quad(playerTwoXPos - 25, 255, playerTwoXPos - 30, 250, playerTwoXPos - 40, 250, playerTwoXPos - 45, 255);
    triangle(playerTwoXPos - 25, 255, playerTwoXPos - 45, 255, playerTwoXPos - 25, 275);
    triangle(playerTwoXPos - 25, 255, playerTwoXPos - 45, 255, playerTwoXPos - 45, 275);
    //Gun
    fill(gun);
    rect(playerTwoXPos - 15, 262, playerTwoXPos - 21, 266);
    fill(gun-50);
    triangle(playerTwoXPos - 21, 262, playerTwoXPos - 24, 267, playerTwoXPos - 21, 267);
    rect(playerTwoXPos - 10, 263, playerTwoXPos - 16, 265);
    //Hand
    fill(skin);
    rect(playerTwoXPos - 22, 266, playerTwoXPos - 28, 271);
    rect(playerTwoXPos - 18, 266, playerTwoXPos - 23, 268);
    //Arm
    fill(shirt);
    ellipseMode(CENTER);
    ellipse(playerTwoXPos - 35, 258, 8, 8);
    rect(playerTwoXPos - 31, 258, playerTwoXPos - 39, 267);
    rect(playerTwoXPos - 27, 265, playerTwoXPos - 39, 272);
    //Head
    noStroke();
    fill(skin);
    rectMode(CORNERS);
    rect(playerTwoXPos - 29, 240, playerTwoXPos - 41, 250);
    triangle(playerTwoXPos - 29, 250, playerTwoXPos - 41, 250, playerTwoXPos - 29, 252);
    triangle(playerTwoXPos - 29, 240, playerTwoXPos - 29, 247, playerTwoXPos - 25, 247);
    quad(playerTwoXPos - 41, 240, playerTwoXPos - 44, 240, playerTwoXPos - 44, 244, playerTwoXPos - 41, 246);
    //Hat 
    noStroke();
    fill(hatBrown);
    triangle(playerTwoXPos - 29, 230, playerTwoXPos - 35, 225, playerTwoXPos - 41, 230);
    rectMode(CORNERS);
    rect(playerTwoXPos - 29, 230, playerTwoXPos - 41, 235);
    quad(playerTwoXPos - 20, 240, playerTwoXPos - 25, 234, playerTwoXPos - 45, 234, playerTwoXPos - 50, 240); 
    //Eye
    fill(0);
    rect(playerTwoXPos - 30, 242, playerTwoXPos - 34, 243);
  }
}