//Toy Screen Control // 0 = Initial Screen // 1 = Game Screen // 2 = Game-over Screen int screen = 0; int score = 0; //ShuttleCock Variables int featherAmount = 0; int featherEnd = 4; int featherYSpacing = -10; int toeSpace = 0; float scX; float scY; float scSizeX = 20; float scSizeY = 10; float yOffset = 300; int scColor = color(50, 50, 50); float gravity = 0.5; float scSpeedVerticle = 0; float scSpeedHorizontal = 10; float fallResistance = 0.08; float friction = 0.1; //Leg Variables color footColor = color(225, 223, 196); float footLimitY = -400; float footWidth = 85; float footHeight = 30; //Interaction Variables int legBounce = 10; void setup() { size(500, 500); scX=width/2; scY= 80; } //Draw the toy screen relevant to the current play void draw() { // Display the contents of the current screen if (screen == 0) { initScreen(); } else if (screen == 1) { toyScreen(); } else if (screen == 2) { loseScreen(); } } /***** All Screens *****/ void initScreen() { background(255); textAlign(CENTER); fill(0); text("To Play ShuttleCock \n Click to Start", height/2, width/2); } void toyScreen() { background(255); //Leg Functions drawLeg(); interactObjects(); //Shuttle cock Functions screenFrame(); drawShuttleCock(); setSCGravity(); setHorizontalSpeed(); //Game world Functions floorContact(); printScore(); } void loseScreen() { background(255); fill(50); textAlign(CENTER); textSize(30); text("Game Over", height/2, width/2); textSize(15); text("Click to Try Again", height/2, width/2 + 20); } /***** Main Input from Player *****/ public void mousePressed() { //Starts game on mouse click if (screen==0) { toyInitiate(); } if (screen==2) { playAgain(); } } //Screen Setters void toyInitiate() { screen=1; } void loseToy() { screen=2; } void playAgain() { screen = 1; score = 0; scX=width/2; scY=height/3; } /***** Game Functions *****/ void floorContact() { if ( scY > 500) { loseToy(); } } void score() { score++; } void printScore() { textAlign(CENTER); fill(0); textSize(50); text(score, height/2, 50); } /***** Shuttle Cock Functions *****/ void drawShuttleCock() { fill(scColor); ellipse(scX, scY, scSizeX, scSizeY); //Drawing feathers of the shuttlecock for (int i = 0; i < 4; i = i + 1) { //Loop 3 times, each iteration increasing the Y value of each feather by -10 //triangle(-5+scX, scY, scX, featherYSpacing+scY, 5+scX, scY); triangle(-5+scX, scY, scX, -10+scY, 5+scX, scY); triangle(-5+scX, -10+scY, scX, -20+scY, 5+scX, -10+scY); triangle(-5+scX, -20+scY, scX, -30+scY, 5+scX, -20+scY); //featherYSpacing -= 10; } //Left Feather triangle(-10+scX, scY, -13+scX, -10+scY, +scX, scY); triangle(-15+scX, -10+scY, -18+scX, -20+scY, -5+scX, -10+scY); triangle(-20+scX, -20+scY, -23+scX, -30+scY, -10+scX, -20+scY); //RightFeathers triangle(10+scX, scY, 13+scX, -10+scY, scX, scY); triangle(15+scX, -10+scY, 18+scX, -20+scY, 5+scX, -10+scY); triangle(20+scX, -20+scY, 23+scX, -30+scY, 10+scX, -20+scY); } void setSCGravity() { scSpeedVerticle += gravity; //Sets the Y of the ShuttleCock to be able to go upwards if it by the foot, not just by gravity scY += scSpeedVerticle; //Sets air resistance to the shuttle cock scSpeedVerticle -= (scSpeedVerticle * fallResistance); } void setHorizontalSpeed() { //Sets Horizontal speed to decrease the X of the shuttlecock to prevent the shuttlecock //from sitting still on the foot scX += scSpeedHorizontal; scSpeedHorizontal -= (scSpeedHorizontal * fallResistance); } //Keeps the ShuttleCock from leaving the screen void screenFrame() { // Calls between making the ShuttleCock bounce between the top and side parameters // Alternates to the top if (scY-(scSizeY/2) < 0) { shuttleCockTopBounce(0); } if (scX-(scSizeX/2) < 0) { footBounceLeft(0); } if (scX+(scSizeX/2) > width) { footBounceRight(width); } } /*****Player Foot Code*****/ void drawLeg() { noStroke(); fill(footColor); rectMode(CENTER); //Sets a Limit for the Y of the foot by calculating if the Y and offset is greater than the limit if (mouseY - yOffset >= footLimitY) { rect(mouseX, mouseY, footWidth, footHeight); ellipse(-50 + mouseX, -10 + mouseY, 20, 10); //Draws Toes //int i = 0; //while(i < 5){ //toeSpace -= 10; //} { ellipse(-45 + mouseX, mouseY, 10, 5); ellipse(-45 + mouseX, 5+mouseY, 10, 5); ellipse(-45 + mouseX, 10 + mouseY, 10, 5); ellipse(-45+ mouseX, 15 + mouseY, 10, 5); } } } //Physics// //Makes the Shuttle cock collide with the foot void interactObjects() { //Hitbox extender for the foot depending on movement float allowance = mouseY - pmouseY; //Compares X coordinates of the foot to the Shuttle cock's to X coordiantes if ((scX+(scSizeX/2) > mouseX-(footWidth/2)) && (scX-(scSizeX/2) < mouseX+(footWidth/2))) { //Checking the distance (radius of the shuttle cock) to the foot to determine if they have collided if (dist(scX, scY, scX, mouseY)<=(scSizeX/2)+abs(allowance)) { shuttleCockFootBounce(mouseY); // Shutttle cock passes throught foot if distance between mouse positions is too high if (allowance<0) { scY+=allowance; //Increases the velocity of the Shuttle cock if moved up by the foot scSpeedVerticle+=allowance; } } } //Angle of the next launch determined by side area of the foot if ((scX+(scSizeX/2) > mouseX-(footWidth/2)) && (scX-(scSizeX/2) < mouseX+(footWidth/2))) { //Checks if the distance between the coordinates of object is //less or equal to the size to check for collisons if (dist(scX, scY, scX, mouseY)<=(scSizeX/2)+(allowance)) { scSpeedHorizontal = (scX - mouseX)/3; } } } void shuttleCockFootBounce(float foot) { scY = foot-(scSizeY); scSpeedVerticle *= -0.5; //Bottom air resistance scSpeedVerticle -= (scSpeedVerticle * friction); score(); } //Top Ceiling void shuttleCockTopBounce(float surface) { scY = surface+(scSizeY/2); scSpeedVerticle *= -1; //Top air resistance scSpeedVerticle -= (scSpeedVerticle * friction); } //Causes the lose function to be called the Shuttle cock goes past the bottom of the screen void shuttleCockBottom(float surface) { surface = 500; loseToy(); } void footBounceLeft(float surface) { scX = surface+(scSizeX/2); scSpeedHorizontal *= -0.5; scSpeedHorizontal -= (scSpeedHorizontal * friction); } void footBounceRight(float surface) { scX = surface-(scSizeX/2); scSpeedHorizontal *= -0.5; scSpeedHorizontal -= (scSpeedHorizontal * friction); } //Really sorry for the late Submission //Richard Kim