package { import flash.display.*; import flash.events.*; import flash.utils.getTimer; import flash.geom.Rectangle; import flash.text.TextField; public class PaddleBall extends MovieClip { private const ballRadius:Number = 9; private const wallTop:Number = 18; private const wallLeft:Number = 18; private const wallRight:Number = 532; private const paddleY:Number = 380; private const paddleWidth:Number = 90; private const ballSpeed:Number = .2; private const paddleCurve:Number = .005; private const paddleHeight:Number = 18; private var paddle:Paddle; private var ball:Ball; private var bricks:Array; private var ballDX:Number; private var ballDY:Number; private var lastTime:uint; private var balls:Number; public function startPaddleBall() { paddle = new Paddle(); paddle.y = paddleY; addChild(paddle); makeBricks(); balls = 3; gameMessage.text = "Click To Start"; lastTime = 0; addEventListener(Event.ENTER_FRAME,moveObjects); stage.addEventListener(MouseEvent.CLICK,newBall); } public function makeBricks() { bricks = new Array(); for(var y:uint=0;y<5;y++) { for(var x:uint=0;x<8;x++) { var newBrick:Brick = new Brick(); newBrick.x = 60*x+65; newBrick.y = 20*y+50; addChild(newBrick); bricks.push(newBrick); } } } public function newBall(event:Event) { if (ball !=null) return; gameMessage.text = ""; ball = new Ball(); ball.x = (wallRight-wallLeft)/2+wallLeft; ball.y = 200;//(paddleY-wallTop)/2+wallTop; addChild(ball); ballDX = 0; ballDY = ballSpeed; balls--; ballsLeft.text = "Balls: "+balls; lastTime = 0; } public function moveObjects(event:Event) { movePaddle(); moveBall(); } public function movePaddle() { var newX:Number = Math.min(wallRight-paddleWidth/2, Math.max(wallLeft+paddleWidth/2, mouseX)); paddle.x = newX; } public function moveBall() { if (ball == null) return; if (lastTime == 0) lastTime = getTimer(); var timePassed:int = getTimer()-lastTime; lastTime += timePassed; var newBallX = ball.x + ballDX*timePassed; var newBallY = ball.y + ballDY*timePassed; var oldBallRect = new Rectangle(ball.x-ballRadius, ball.y-ballRadius, ballRadius*2, ballRadius*2); var newBallRect = new Rectangle(newBallX-ballRadius, newBallY-ballRadius, ballRadius*2, ballRadius*2); var paddleRect = new Rectangle(paddle.x-paddleWidth/2, paddle.y-paddleHeight/2, paddleWidth, paddleHeight); if (newBallRect.bottom >= paddleRect.top) { if (oldBallRect.bottom < paddleRect.top) { if (newBallRect.right > paddleRect.left) { if (newBallRect.left < paddleRect.right) { newBallY -= 2*(newBallRect.bottom - paddleRect.top); ballDY *= -1; ballDX = (newBallX-paddle.x)*paddleCurve; } } } else if (newBallRect.top > 400) { removeChild(ball); ball = null; if (balls > 0) { gameMessage.text = "Click For Next Ball"; } else { endGame(); } return; } } if (newBallRect.top < wallTop) { newBallY += 2*(wallTop - newBallRect.top); ballDY *= -1; } if (newBallRect.left < wallLeft) { newBallX += 2*(wallLeft - newBallRect.left); ballDX *= -1; } if (newBallRect.right > wallRight) { newBallX += 2*(wallRight - newBallRect.right); ballDX *= -1; } for(var i:int=bricks.length-1;i>=0;i--) { var brickRect:Rectangle = bricks[i].getRect(this); if (brickRect.intersects(newBallRect)) { if (oldBallRect.right < brickRect.left) { newBallX += 2*(brickRect.left - oldBallRect.right); ballDX *= -1; } else if (oldBallRect.left > brickRect.right) { newBallX += 2*(brickRect.right - oldBallRect.left); ballDX *= -1; } if (oldBallRect.top > brickRect.bottom) { ballDY *= -1; newBallY += 2*(brickRect.bottom-newBallRect.top); } else if (oldBallRect.bottom < brickRect.top) { ballDY *= -1; newBallY += 2*(brickRect.top - newBallRect.bottom); } removeChild(bricks[i]); bricks.splice(i,1); if (bricks.length < 1) { endGame(); return; } } } ball.x = newBallX; ball.y = newBallY; } function endGame() { removeChild(paddle); for(var i:int=bricks.length-1;i>=0;i--) { removeChild(bricks[i]); } paddle = null; bricks = null; if (ball != null) { removeChild(ball); ball = null; } removeEventListener(Event.ENTER_FRAME,moveObjects); stage.removeEventListener(MouseEvent.CLICK,newBall); gotoAndStop("gameover"); } } }