Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//variables for the ball
float posX = 100;
float posY = 50;
float speed= 0;
float speedX = .75;

//variables for the whole system
float grav = 0.04;
float time = 0;
float red = 255;
float blue = 131;
float green = 0;
PFont f;

//variables for the paddle
float paddleX = 200; 
float paddleY = 200;
float paddleWidth = 50;
float paddleHeight = 10;
int score = 0;

void setup() {
  size(400, 400);
  ellipseMode(CENTER);
  rectMode(CENTER);
  frameRate(120);  
  // set the font type
  f = createFont("Arial", 25, true);
  textFont(f);
  textAlign(CENTER);
}

void draw() {
  //remove the mouse Cursor
  noCursor();  
  background(175);
  //Draw background
  drawBalls();

  //draw score box 
  fill(25, 5, 5);
  rect( 0, 0, 210, 50);
  fill(255);
  text( "Score :", 40, 20);
  text( score, 90, 20);

  // draw functions
  drawPaddle();
  movePaddle();
  drawBall();
  ballCollision();
  ballXSpeed();
  paddleShrink();
}
//make the paddle follow the mouse position
void movePaddle() {
  paddleX = mouseX;
  paddleY = mouseY;
}
//Draw the Paddle
void drawPaddle() {
  rectMode(CENTER);
  noStroke();
  fill(255);
  rect(paddleX, paddleY, paddleWidth, paddleHeight);
}
//Draw the ball
void drawBall() {
  fill(255);
  ellipseMode(CENTER);
  ellipse(posX, posY, 15, 15);
}
//Set the ball collision logic
void ballCollision() {
  //Gravity for the ball
  posY = posY + speed;
  speed = speed + grav; 

  //collison for ball one, checks if its right on top or underneath the paddle
  if (posY > paddleY - (paddleHeight/2) && posY < paddleY + (paddleHeight/2) && 
    //check if the ball in is the the middle of the paddle 
    posX > paddleX - (paddleWidth/4)  && posX < paddleX + (paddleWidth/4)) {

    //Reverse speed and add one to score
    speed = speed * -1;
    score += 1;

    //set the verticle speed to a random number between - 0.9 and 0.9
    speedX = random ( -0.9, 0.9) ;

    //set a random colour for the balls in the background
    red = random(100, 255);
    blue = random(100, 255);
    green = random(100, 255);
  } 
  if (posY > paddleY -10 && posY < paddleY + 10 && 
    //checks if the ball in is the confinds of the paddle
    posX > paddleX - (paddleWidth/2)  && posX < paddleX - (paddleWidth/4)) {

    speed = speed * -1;
    score += 1;

    //set the vertical speed to  -0.9.
    speedX = -.9;

    //set a random colour for the balls in the background
    red = random(100, 255);
    blue = random(100, 255);
    green = random(100, 255);
  } 
  if (posY > paddleY -10 && posY < paddleY + 10 && 
    //checks if the ball in is the confinds of the paddle
    posX < paddleX + (paddleWidth/2)  && posX > paddleX + (paddleWidth/4)) {

    speed = speed * -1;
    score += 1;

    speedX = .9;

    //set a random colour for the balls in the background
    red = random(100, 255);
    blue = random(100, 255);
    green = random(100, 255);
  } 

  //collision for top and bottom of screen
  else if (posY > height)
  {
    speed = speed * -0.99 ;
    score = 0;
    time = 0;
  } else if (posY < -1) {
    posY = 1; 
    speed *= -1 ;
  }
}
//Collision for the side of the Screen
void ballXSpeed() {
  posX = posX + speedX;
  //checks if 
  if  (posX >= width-15 || posX < 0 + 15) {
    speedX = -speedX;
  }
}

//Shrink the paddle based on the score
void paddleShrink()
{


  if (score < 5)
  {
    paddleWidth = 50;
  }
  if (score >= 5) {
    paddleWidth = 45;
  }
  if (score >= 10) {
    paddleWidth = 40;
  }
  if (score >= 15) {
    paddleWidth = 35;
  }
  if (score >= 20) {
    paddleWidth = 30;
  }
  if (score >= 30) {
    paddleWidth = 25;
  }
}

//loop for the background
void drawBalls() {
  //Columns
  for (int i = 7; i < 400; i = i+40) {
    //Row
    for (int j = 7; j < 400; j = j+20) {
      //first line of circles
      fill( red, blue, green);
      ellipse(i, j, 15, 15);
      //second line of circles
      fill(score*10, 0, 255);
      ellipse(i + 20, j + 5, 15, 15);
    }
  }
}