//3 POINTER BY STEVIE RAY HUNTER//
//SETTING VARIABLES
//FLOATS
float xpos, ypos; // Starting position of hoop
float xspeed = 7.0; // Speed of the hoop
float yspeed = 2.2; // Speed of the hoop
float thr = 50.0; // How much force the ball is thrown with
float blposY = 320.0; //ball starting value
float blxpos = mouseX;
float gravity = 12.5; //Gravity for returing the ball to the player
//INTS
int bcount = 10; // Amount of shots
int score = 0; //Score counter
int rad = 90; // Width of the shape
int blreset = 320; //Ball Reset
int xdirection = 1; // Left or Right
int ydirection = 1; // Top to Bottom
//BOOLEANS
boolean gameover = false;
//SETTING WINDOW SIZE & FACTORS
void setup () {
size (400, 400);
noFill();
noStroke();
frameRate(60);
rectMode(RADIUS);
ellipseMode(RADIUS);
//SETTING START POSITION
xpos = width/2;
ypos = height/2;
}
//DRAW SCENE
void draw () {
if (gameover == false) {
xpos = xpos + ( xspeed * xdirection ); //Setting boundaries for Hoop Movement
if (xpos > width-rad || xpos < rad) {
xdirection *= -1;
}
//BACKGROUND WALL & SHADOW
noStroke();
fill (238,182,90);
rect (0,0,width, height);
stroke(231,232,170);
strokeWeight(3);
line (0,100,400,100);
//COURT LINES
stroke(59,38,37);
line (130,30,270,30);
strokeWeight(2);
line (110,50,290,50);
strokeWeight(3);
line (90,70,310,70);
strokeWeight(4);
line (60,100,330,100);
strokeWeight(5);
line (20,140,370,140);
//WALL SHADOW
noStroke();
fill(170,121,76);
rect(0,0,width,20);
fill(92,58,39);
rect(0,10,width,10);
fill(213,146,74,100);
rect(0,20,width,40);
rect(0,20,width,30);
rect(0,20,width,20);
rect(0,20,width,10);
//COURT CENTRE SQUARE
fill (219,102,55);
stroke(59,38,37);
strokeWeight(5);
quad (150,20,80,200,320,200,250,20);
//SHADOW SQUARE
noStroke();
fill(181,55,23,45);
quad (155,23,155,120,245,120,245,23);
//COURT FRONT CURVE
noFill();
stroke(59,38,37);
strokeWeight(5);
arc(200,200, 240, 175, 0, PI);
arc(200,200, 240/2, 175, 0, PI);
//3 POINTER LINE
noFill();
stroke(59,38,37);
strokeWeight(10);
arc (200,350, width,10,0,PI);
//SPOTLIGHTS
noStroke();
fill (random(255),100,50,150);
ellipseMode(CENTER); // reseting ellipse mode
ellipse (40,80,40,20); //left-outer spotlight ring
ellipse (40,80,20,10); //left-middle spotlight ring
ellipse (40,80,10,5); //left-inner spotlight ring
ellipse (360,80,40,20); //right-outer spotlight ring
ellipse (360,80,20,10); //right-middle spotlight ring
ellipse (360,80,10,5); //right-inner spotlight ring
//SPOTLIGHT RADIUS EFFECT
for (int i = 0; i < 400; i = i+5) {
noFill();
strokeWeight(1);
stroke(255,255,255,80);
line(i, 320, 40, 80);
line(i, 320, 360, 80);
}
//REMAINING SHOTS (HUD)
noStroke();
fill(220,110,20);
ellipse (10,5, 10,10);
ellipse (30,5, 10,10);
ellipse (50,5, 10,10);
ellipse (70,5, 10,10);
ellipse (90,5, 10,10);
ellipse (110,5, 10,10);
ellipse (130,5, 10,10);
ellipse (150,5, 10,10);
ellipse (170,5, 10,10);
ellipse (190,5, 10,10);
//DRAW BACBOARD & HOOP
//BACKBOARD
fill(255);
noStroke();
fill(162,162,162,220);
rect (xpos,(ypos -145), 60, 45);
fill(234,216,194);
rect(xpos,(ypos -145),50,35);
noStroke();
fill(111,107,112);
rect(xpos,(ypos-105), 10, 24);
rect((xpos -60),(ypos -125),5,25);
rect((xpos +60),(ypos -125),5,25);
fill(196,199,203);
ellipse((xpos -45),(ypos -180),10,10);
ellipse((xpos +45),(ypos -180),10,10);
//HOOP
noStroke();
fill(202,226,205,185);
quad((xpos -45),(ypos -105),(xpos -35),(ypos -20),(xpos +35),(ypos -20),(xpos +45),(ypos -105));
fill(198,79,79);
ellipse(xpos, (ypos -107), rad,10);
fill(219,102,55);
ellipse(xpos, (ypos -110), rad,10);
//BALL
fill(220,110,20);
ellipse(mouseX,blposY,45,45);
stroke(0);
strokeWeight(1.5);
line ((mouseX -10),(blposY -19),(mouseX -10),(blposY +19));
line ((mouseX+10),(blposY -19),(mouseX +10),(blposY +19));
//HANDS
noStroke();
fill(117,84,58);
rect ((mouseX -27),blreset,5,15);
rect ((mouseX +27),blreset,5,15);
fill(95,71,56);
rect (mouseX+22,blreset-15,10,3);
rect (mouseX-22,blreset-15,10,3);
fill(130,84,58);
rect (mouseX+20,blreset-10,10,3);
rect (mouseX-20,blreset-10,10,3);
//BALL THROW FUCNTION
if (mousePressed == true) { //activate on mouse click
blposY = (blposY - thr); //subtracts positional values to launch the ball
}
//BALL SCORING SYSTEM
if (blposY < blreset) { //compares balls current position to ball reset value
blposY = blposY + gravity; //adds gravity value to balls position until its equal to ball reset value
}
if (blposY > ((ypos -107))-2.5 && blposY < (ypos -107)+2.5 && mouseX > (xpos -45)+3.0 && mouseX >(xpos -45) -3.0) { //adds points if you make the shot
score = score +3;
println ("Your current score is :");
println (score);
}
//BALL COUNTER SYSTEM
if (blposY < blreset -20 && blposY > blreset -30) { //check to see if the ball has been tossed
bcount = bcount-1;
}
if (bcount < 10) {
noStroke();
fill(183,124,74);
ellipse (10,5, 10,10);
}
if (bcount < 9) {
noStroke();
fill(183,124,74);
ellipse (30,5, 10,10);
}
if (bcount < 8) {
noStroke();
fill(183,124,74);
ellipse (50,5, 10,10);
}
if (bcount < 7) {
noStroke();
fill(183,124,74);
ellipse (70,5, 10,10);
}
if (bcount < 6) {
noStroke();
fill(183,124,74);
ellipse (90,5, 10,10);
}
if (bcount < 5) {
noStroke();
fill(183,124,74);
ellipse (110,5, 10,10);
}
if (bcount < 4) {
noStroke();
fill(183,124,74);
ellipse (130,5, 10,10);
}
if (bcount < 3) {
noStroke();
fill(183,124,74);
ellipse (150,5, 10,10);
}
if (bcount < 2) {
noStroke();
fill(183,124,74);
ellipse (170,5, 10,10);
}
if (bcount < 1) {
noStroke();
fill(183,124,74);
ellipse (190,5, 10,10);
gameover = true; // Draws game over screen
println ("GAMEOVER");
println ("FINAL SCORE");
println (score);
}
// LOSE STATE FUNCTION
} else {
noStroke();
fill (210,92,58);
rect (0,0, width, height);
}
}
//GAME OVER