package { import flash.display.MovieClip import flash.text.TextField import flash.events.Event import flash.events.MouseEvent public class DocumentMain extends MovieClip { public const GRAVITY:Number = 2; public const BOUNCE_FACTOR:Number = 0.8; public const HIT_FORCE:Number = 20; public var _bounces:TextField; public var _highscore:TextField; public var _ball:Ball; private var _vx:Number; private var _vy:Number; public function DocumentMain():void { _vx = 10; _vy = 0; _ball.buttonMode = true; addEventListener(Event.ENTER_FRAME, enterFrameHandler); addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); } private function enterFrameHandler(e:Event):void { // gravitate the ball _vy += GRAVITY; // move the ball _ball.x += _vx; _ball.y += _vy; // check stage boundaries for collision checkBoundaryCollision(); } private function mouseDownHandler(e:MouseEvent):void { // hit the ball if it has been clicked if (e.target == _ball) { hit(e.target.mouseX, e.target.mouseY); } } private function checkBoundaryCollision():void { var left:Number; var right:Number; var bottom:Number; var top:Number; left = _ball.x - (_ball.width / 2); right = _ball.x + (_ball.width / 2); bottom = _ball.y + (_ball.height / 2); top = _ball.y - (_ball.height / 2); if (left < 0 && _vx < 0) { _ball.x = _ball.width / 2; _vx *= -1; } else if (right > stage.stageWidth && _vx > 0) { _ball.x = stage.stageWidth - (_ball.width / 2); _vx *= -1; } if (top < 0 && _vy < 0) { _ball.y = _ball.height / 2; _vy *= -1; } else if (bottom > stage.stageHeight && _vy > 0) { _ball.y = stage.stageHeight - (_ball.height / 2); _vy *= -BOUNCE_FACTOR; _vx *= BOUNCE_FACTOR; if (Number(_bounces.text) > Number(_highscore.text)) { _highscore.text = _bounces.text; } _bounces.text = "0"; } } private function hit(hitX:Number, hitY:Number):void { // increment bounces _bounces.text = String(Number(_bounces.text) + 1); // adjust the vertical velocity of the ball if (_vy > 0) { _vy *= -BOUNCE_FACTOR / 2; } _vy -= HIT_FORCE; // adjust the horizontal velocity of the ball if (_vx * hitX > 0) { _vx *= -BOUNCE_FACTOR; } _vx -= (hitX / _ball.width) * HIT_FORCE; } } }