Reset the velocity back to its initial value once the ball collides with an edge of the internal wall or the canvas
boundary. Note that the sign of the velocity will depend on the edge the ball hits. For example, after the ball
hits the right wall, the x-velocity will be reset to -3. Implement sensible behavior for the ball. The ball should
not be moving so fast that the graders cannot evaluate the behavior of your code.
<// Setup the value for the ball
float ballX;
float ballY;
float ballSpeedX = random(2, 8);
float ballSpeedY = random(1, 10);
float ballDia = 20.0;
float ballR = ballDia/2;
void setup() {
size(800, 600);
ballX= random(10, 370);
ballY= random(10, 570);
}
void draw() {
background(0);
// Draw the wall
fill(255);
noStroke();
rect(390, 300, 23, 300);
// Color of the ball changes gradually and continuously as it moves
if (ballSpeedX >=6) {
fill(255, 0, 0);
} else if (ballSpeedX>=3) {
fill(0, 255, 0);
} else fill(0, 0, 255);
// Draw the ball
ellipse(ballX, ballY, ballDia, ballDia);
// Update ball location
ballX=ballX+ballSpeedX;
ballY=ballY+ballSpeedY;
// If ball hit the right or left change direction of X
if (ballX> width- ballR ) {
ballX= width -ballR;
ballSpeedX=ballSpeedX*-1;
} else if (ballX<ballR) {
ballX=ballR;
ballSpeedX=ballSpeedX*-1;
}
// If ball hit top or bottom change direction of Y
if (ballY> height-ballR) {
ballY=height-ballR;
ballSpeedY=ballSpeedY*-1;
} else if (ballY<ballR) {
ballY=ballR;
ballSpeedY=ballSpeedY*-1;
}
// Setup variable to true if shapes are over lapping, false if not
boolean collision = hitWall(390, 300, 20, 300, ballX, ballY, ballR);
// Change ball direction when ball hit
//and bump it back
if (collision ==true) {
ballSpeedX=ballSpeedX*-1;
ballX=(ballX+ballSpeedX);
}
}
boolean hitWall(int rx, int ry, int rw, int rh, float cx, float cy, float cr) {
float circleDistanceX= abs(cx-rx-rw/2);
float circleDistanceY= abs(cy-ry-rh/2);
if (circleDistanceX >(rw/2+cr)) {
return false;
}
if (circleDistanceY >(rh/2+cr)) {
return false;
}
if (circleDistanceX<=rw/2) {
return true;
}
if (circleDistanceY<= rh/2) {
return true;
}
float cornerDistance = pow(circleDistanceX-rw/2, 2)+ pow(circleDistanceY-rh/2, 2);
if (cornerDistance <=pow(cr, 2)) {
return true;
} else {
return false;
}
}> homework policy