/** This activity uses loops and switches statements to place brick objects. Conditionals are used to program collision code. The player must clear all the bricks to win. */ //*****************Scene - Initialize When Scene Starts Event************************// // set up the scene if ($this.scene.state() == "PLAY") { // keep track of how many bricks there are $this.brickCount = 0; // set up helper variables for the loops var blockSpacingX = 100; var blockSpacingY = 35; // loop through 4 rows and 8 columns and place the bricks for (var row = 0; row < 4; row++) { for(var col = 0; col < 8; col++) { // clone the brick objects var brickClone = brick.clone(); // place the cloned brick using the helper variables brickClone.x(col * blockSpacingX); brickClone.y(row * blockSpacingY); // give the bricks health based on the row brickClone.health = 4 - row; brickClone.updateColor(); //increment the brickCount $this.brickCount++; } } // remove the original brick from the scene brick.remove(); } //*************************paddle - Update Every Frame Event************************// // move the paddle to the cursor $this.x(getMouseX() - 125/2); //************************ball - Update Every Frame Event**************************// // move the ball on every frame moveX($this); moveY($this); // check for collisions on every frame $this.checkPaddleCollision(); $this.checkWallCollision(); //***********************ball - Initialize When Scene Starts Event*****************// // check to see if the ball is colliding with the paddle $this.checkPaddleCollision = function() { if ($this.isTouching(paddle)) { // calculate x speed based on where the ball hit the paddle var ballCenter = $this.x() + 25/2; var paddleCenter = paddle.x() + 125/2; var launchSpeed = 3 * (ballCenter - paddleCenter); // adjust the speedX based on the launch speed $this.speedX(launchSpeed); // keep the speedY at 200 but make sure the ball goes up $this.speedY(-200); } }; // check to see if the ball is colliding with the walls $this.checkWallCollision = function() { // bounce the ball off the left or right side if ($this.x() <= 0 || $this.x() >= 800) { // change the ball's x direction $this.speedX(-$this.speedX()); } // bounce the ball off the top side if ($this.y() <= 0) { // change the ball's y direction $this.speedY(-$this.speedY()); } // reset the ball if it goes off the bottom side if ($this.y() >= 600) { // place the ball in the center of the scne $this.x(400); $this.y(300); // give the ball a random speedX $this.speedX(random(-200, 200)); } }; //************************brick - Update Every Frame Event**************************// // if this brik touches the ball if ($this.isTouching(ball)) { // decrease the brick's health by one and update its color $this.health--; $this.updateColor(); // bounce the ball in the opposite direction ball.speedY(-ball.speedY()); // if the brick's health is 0 if ($this.health <= 0) { // decrement the brick count $this.scene.brickCount--; // remove the brick $this.remove(); // if there are no more bricks, stop the game if ($this.scene.brickCount <= 0) { $this.scene.stopCode(); } } } //*********************brick - Initialize When Scene Starts Event********************// // change the brick color based on its health $this.updateColor = function() { switch ($this.health) { case 1: $this.fill("#8CE0D3"); // light blue break; case 2: $this.fill("#28ADA9"); // dark blue break; case 3: $this.fill("#8A2F62"); // light purple break; case 4: $this.fill("#500F34"); // dark purple break; default: $this.fill("#000000"); //black break; } };