//VARIABLES
//initialize variables for Player physics
float playerX = 150;
float playerY = 100;
float speed = 0;
float fall = 0;
float momentum = 0.1;
float gravity = 0.1;
int ground = 200;
//Arrays for confetti to fall; x and y coordinates and color
float[] confettiX = new float[50];
float[] confettiY = new float[50];
float[] confettiColor = new float[50];
//initialize variables for confetti fall and sway.
float y = 0;
float x = 0;
int xSpeed = 0;
//initialize variables for button and confetti activation
int button;
int buttonColor;
boolean party;
//SETUP
//Set up program and set all confetti arrays to random values.
void setup() {
size(300, 300);
smooth();
println("Jump the wall and smash the button as hard as you can!");
for (int i = 0; i < confettiX.length; i++) {
confettiX[i] = random(1, 300);
confettiY[i] = random(-300, -30);
confettiColor[i]= random(0, 255);
}
}
//DRAW
//Draw function used only to call to functions and draw ground.
void draw() {
background(255);
fill(0);
character(); //character function
target(50, ground-10+button); //button function
wall(100, ground-90); //wall collision function
fill(0);
rect(0, ground, width, height); //ground
//If the button is fully pressed, initiate "party" function; confetti falls.
if (party == true) {
callFall();
callParty();
println("Yay!");
}
}
//FUNCTIONS
//CHARACTER FUNCTION
void character() {
fill(fall*20,-speed*20,speed*20);
ellipse(playerX, playerY, 20, 20);
//CONTROLS
if (keyPressed) {
if (keyCode == RIGHT) {
playerX = playerX + speed;
speed = speed + momentum;
}
if (keyCode == LEFT) {
playerX = playerX + speed;
speed = speed - momentum;
}
if (keyCode == UP) { //First checks if player is moving left or right while jumping, otherwise jump in place.
playerY = playerY-5;
if (speed >= 0.6) {
playerX = playerX + speed;
} else if (speed <= -0.1) {
playerX = playerX + speed;
} else if (speed == 0.5 || momentum == 0.1) {
playerX = playerX;
speed = 0;
}
}
} else {
speed = 0.5;
}
if (playerY != ground) { //Move freely while off ground.
playerX = playerX;
}
if (playerY+10 >= ground) { //Collide with ground.
playerY = ground-10;
fall = 0.1;
gravity = 0.1;
} else if (playerY <= ground) {
playerY = playerY + fall;
fall = fall + gravity;
}
}
//BUTTON FUNCTION
void target(int locX, int locY) {
fill(buttonColor, 0, 0);
rect(locX, locY, 30, 10);
//If player jumps on button with enough force; button lowers and changes color.
if (playerX <= locX+35 && playerX >= locX-5 && playerY >=ground-10 && fall >= 5 ) {
button = button +2;
buttonColor = buttonColor+50;
if (locY ==198) { //If the button is pully pushed; initiate party confetti.
party = true;
}
}
}
//PARTY FUNCTION
void callParty() { //Use confetti arrays to generate random confetti.
for (int i = 0; i < confettiX.length; i++) {
fill(confettiColor[i], confettiColor[i]*2, confettiColor[i]/2);
rect(confettiX[i]+x, confettiY[i]+y/2, 10, 5);
}
}
//FALL FUNCTION for confetti
void callFall() {
y++; //Confetti falls
xSpeed++; //Confetti sways
if (xSpeed == 10 || xSpeed == 20 || xSpeed == 30) {
x+=3; //Confetti moves 3 units every 10 increments of xSpeed
} else if (xSpeed == -10 || xSpeed == -20 || xSpeed == -30) {
x-=3;
}
if (xSpeed == 50) { //xSpeed reverses periodically to create sway
xSpeed = xSpeed*-1;
} else if (xSpeed == -50) {
xSpeed = xSpeed*-1;
}
}
//WALL FUNCTION
void wall(int locX, int locY) {
rect(locX, locY, 10, 90);
if (playerX <= locX+20 && playerY >= locY && playerX >= locX) {
playerX = locX+20; //If player hits wall, stop player X position
}
}