/* Pong 190m - Roy McElmurry */ package { import flash.display.Sprite; import flash.text.*; import flash.display.Shape; import flash.display.LoaderInfo; import flash.display.Bitmap; import flash.utils.Timer; import flash.events.*; import flash.geom.Point; import flash.ui.Keyboard; [SWF(backgroundColor="#ffffff", frameRate="24", width="550", height="400")] public class Pong extends Sprite { private const BALL_SIZE:Number = 30; private const SPEED:Number = 5; private var p1:TextField; private var p2:TextField; private var p1bar:Shape; private var p2bar:Shape; private var score1:TextField = new TextField(); private var score2:TextField = new TextField(); private var s1:Number = 0; private var s2:Number = 0; [Embed(source="ball.jpg")] private var ballImage:Class; private var ball:Bitmap; private var dir:Point; public function Pong():void { //Create Components p1 = new TextField(); p2 = new TextField(); p1bar = new Shape(); p2bar = new Shape(); ball = new ballImage() as Bitmap; dir = new Point(Math.random() * 2 - 1, Math.random() * 2 - 1); dir.normalize(1); //Setup initialize(); handleFlashVars(); var gameTimer:Timer = new Timer(50); gameTimer.addEventListener(TimerEvent.TIMER, runGameEngine); gameTimer.start(); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyListener); addChild(p1); addChild(p2); addChild(p1bar); addChild(p2bar); addChild(ball); addChild(score1); addChild(score2); } public function keyListener(e:KeyboardEvent):void { if (e.keyCode == Keyboard.UP) { p2bar.y -= SPEED; } else if (e.keyCode == Keyboard.DOWN) { p2bar.y += SPEED; } else if (e.keyCode == 87) { p1bar.y -= SPEED; } else if (e.keyCode == 83) { p1bar.y += SPEED; } } public function runGameEngine(e:TimerEvent):void { ball.x += dir.x * SPEED; ball.y += dir.y * SPEED; if (ball.x < 0) { dir.x *= -1; s2 += 1; } else if (ball.x > stage.stageWidth){ dir.x *= -1; s1 += 1; } else if (ball.y < 0) { dir.y *= -1; } else if (ball.y > stage.stageHeight) { dir.y *= -1; } if (ball.hitTestObject(p1bar)) { dir.x *= -1; } else if (ball.hitTestObject(p2bar)) { dir.x *= -1; } score1.text = "" + s1; score2.text = "" + s2; } public function handleFlashVars():void { var params:Object = LoaderInfo(this.root.loaderInfo).parameters; for (var key:String in params) { if (key == "p1name") { p1.text = params[key]; } else if (key == "p2name"){ p2.text = params[key]; } } } //Draw and format the components public function initialize():void { //Format Name fields p1.text = "Player1"; p2.text = "Player2"; p1.autoSize = TextFieldAutoSize.LEFT; p1.setTextFormat(new TextFormat(null,24)); p1.x = 0 p2.autoSize = TextFieldAutoSize.LEFT; p2.setTextFormat(new TextFormat(null,24)); p2.x = stage.stageWidth / 2; //Draw bars p1bar.graphics.beginFill(0x000000); p1bar.graphics.drawRect(0, 0, 15, 100); p1bar.x = 20; p1bar.y = stage.stageHeight / 2 - p1bar.height / 2; p2bar.graphics.beginFill(0x000000); p2bar.graphics.drawRect(0, 0, 15, 100); p2bar.x = stage.stageWidth - p2bar.width - 20; p2bar.y = stage.stageHeight / 2 - p2bar.height / 2; ball.width = BALL_SIZE; ball.height = BALL_SIZE; ball.x = stage.stageWidth / 2; ball.y = stage.stageHeight / 2; score1.x = stage.stageWidth / 4; score2.x = stage.stageWidth * 3 / 4; } } }