//import import fl.transitions.Tween; import fl.transitions.easing.*; //Initiate various variables var died:int = -1;// times died var LpDist:Number;// distance from Left paddle to the ball var RpDist:Number;// distance from Right paddle to the ball var ballColor:ColorTransform = ball.transform.colorTransform; var stageColor: ColorTransform = stage_clr.transform.colorTransform; var scor:Number = 0;//current score var hiScor:int = 0;//the current high score var hitScor:Number = 0;//the previous hit score var hiHit:int = 0;//the highest hit score var pad:Number = 1;//distance into bat the ball must go before being seen as hiting var scoreTime:Number = Math.random()+1;//points earned per frame var accuracyBonus:Number = 20; var speedBonus: Number = 30; var win:String; var playType:int = 1; var lScor:int = 0; var rScor:int = 0; //Computer Variables var players:int = 2; var hDist1:Number = 0; var hDist2:Number = 0; var p1Spd:Number = 0; var p2Spd:Number = 0; var p1Acc:Number = 1; var p2Acc:Number = 1; var p1friction:Number = 0.6; var p2friction:Number = 0.6; var p2MaxSpd:Number = 20; var pMoveStart:Number = 4; var difficulty:int = 2; //Font colours var notSelectedFont:int = 0x00CCCC; var selectedFont:int = 0xACD828; var lFont:int = 0x800000; var rFont:int = 0x006633; var sFont:TextFormat = new TextFormat(); sFont.color = 0x000000; //hit score var hitAccu:int; var hitSpee:int; var hitSize:int; //Start Signal Variables var green:int = 0xacd828;//Starting colour of the Signal var signalColor:ColorTransform = signal_btn.transform.colorTransform; var countSet:Number = 5;//How long the initial countdown takes var countTime:Number = countSet;//Point in countdown var countDec:Number; var infoTime:Number = 1; //Ball Movement Variables var ballXint:Number; var ballYint:Number; var acc:Number = 0.3; var accRnd:Number = 0.6; var ballXsp:Number; var ballYsp:Number; var ballsp:int = 0; var ballXpos:Number; var ballYpos:Number; var maxSpeed:Number = 25; var minSpeed:Number = 2; var ballSize:Number = 100; var addSp:Number = 0.33;//Amount ball moves up due to paddle movement //Left Paddle Variables var LpPos:Number = lPaddle.y; var LpAcc:Number = 0; var LpAccc:Number = 2; var LpMove:Number = 10;//Starting speed var LpSpeed:Number;//Current speed //Right Paddle Variables var RpPos:Number = rPaddle.y; var RpAcc:Number = 0; var RpAccc:Number = 2; var RpMove:Number = 10;//Starting speed var RpSpeed:Number;//Current speed //Setting appearance resetVars(); signal_btn.visible = true; score.visible = false; hiscore.visible = false; diedCount.visible = false; lScore.text = String(lScor) rScore.text = String(rScor) //Listen for controls and signal press signal_btn.addEventListener (MouseEvent.CLICK, countdown); stage.addEventListener (KeyboardEvent.KEY_DOWN, controls); stage.addEventListener (KeyboardEvent.KEY_UP, killControls); stage.addEventListener (Event.ENTER_FRAME, checkBallX2); stage.addEventListener (Event.ENTER_FRAME, checkBallX1); p1info.easy.addEventListener (MouseEvent.CLICK, easyLvl); p1info.med.addEventListener (MouseEvent.CLICK, medLvl); p1info.hard.addEventListener (MouseEvent.CLICK, hardLvl); p1info.ext.addEventListener (MouseEvent.CLICK, extLvl); p1info.oneL.addEventListener (MouseEvent.CLICK, onePL); p1info.oneR.addEventListener (MouseEvent.CLICK, onePR); p1info.oneB.addEventListener (MouseEvent.CLICK, onePB); p1info.two.addEventListener (MouseEvent.CLICK, twoP); p1info.none.addEventListener (MouseEvent.CLICK, noP); //Set Difficulty function easyLvl(e:MouseEvent):void{ minSpeed = 2; maxSpeed = 20; pMoveStart = 2; difficulty = 1; p2MaxSpd = 7; p1info.easy.textColor = selectedFont; p1info.med.textColor = notSelectedFont; p1info.hard.textColor = notSelectedFont; p1info.ext.textColor = notSelectedFont; } function medLvl(e:MouseEvent):void{ minSpeed = 2; maxSpeed = 25; pMoveStart = 3; difficulty = 2; p2MaxSpd = 14; p1info.easy.textColor = notSelectedFont; p1info.med.textColor = selectedFont; p1info.hard.textColor = notSelectedFont; p1info.ext.textColor = notSelectedFont; } function hardLvl(e:MouseEvent):void{ minSpeed = 8; maxSpeed = 30; pMoveStart = 4; difficulty = 3; p2MaxSpd = 25; p1info.easy.textColor = notSelectedFont; p1info.med.textColor = notSelectedFont; p1info.hard.textColor = selectedFont; p1info.ext.textColor = notSelectedFont; } function extLvl(e:MouseEvent):void{ minSpeed = 15; maxSpeed = 35; pMoveStart = 9; difficulty = 4; p2MaxSpd = 100; p1info.easy.textColor = notSelectedFont; p1info.med.textColor = notSelectedFont; p1info.hard.textColor = notSelectedFont; p1info.ext.textColor = selectedFont; } //Set Players function onePL(e:MouseEvent):void{ players = 1; p1info.oneL.textColor = selectedFont; p1info.oneR.textColor = notSelectedFont; p1info.oneB.textColor = notSelectedFont; p1info.two.textColor = notSelectedFont; p1info.none.textColor = notSelectedFont; } function onePR(e:MouseEvent):void{ players = 2; p1info.oneL.textColor = notSelectedFont; p1info.oneR.textColor = selectedFont; p1info.oneB.textColor = notSelectedFont; p1info.two.textColor = notSelectedFont; p1info.none.textColor = notSelectedFont; } function onePB(e:MouseEvent):void{ players = 3; p1info.oneL.textColor = notSelectedFont; p1info.oneR.textColor = notSelectedFont; p1info.oneB.textColor = selectedFont; p1info.two.textColor = notSelectedFont; p1info.none.textColor = notSelectedFont; } function twoP(e:MouseEvent):void{ players = 4; p1info.oneL.textColor = notSelectedFont; p1info.oneR.textColor = notSelectedFont; p1info.oneB.textColor = notSelectedFont; p1info.two.textColor = selectedFont; p1info.none.textColor = notSelectedFont; } function noP(e:MouseEvent):void{ players = 5; p1info.oneL.textColor = notSelectedFont; p1info.oneR.textColor = notSelectedFont; p1info.oneB.textColor = notSelectedFont; p1info.two.textColor = notSelectedFont; p1info.none.textColor = selectedFont; } //Signal and Game Initiating //Start countdown and color change function countdown (e:MouseEvent):void{ signalColor.color = green; signal_btn.transform.colorTransform = signalColor; stage.addEventListener (Event.ENTER_FRAME, changeCountdown); signal_btn.removeEventListener (MouseEvent.CLICK, countdown); } //Set colours and check for game start function changeCountdown (e:Event):void{ countTime = countTime- 1/12; countDec = (countSet-countTime)/countSet; signalColor.redOffset = 244 - 30*countDec; signalColor.greenOffset = 196 - 196*countDec; signalColor.blueOffset = 65 - 47*countDec; signal_btn.transform.colorTransform = signalColor; signal_btn.alpha = 1 - countDec; signal_btn.start_txt.text = "¿Ready?"; if (signal_btn.alpha == 0){ stage.removeEventListener (Event.ENTER_FRAME, changeCountdown); signal_btn.visible = false; signalColor.color = green; signal_btn.transform.colorTransform = signalColor; stage.addEventListener (Event.ENTER_FRAME, ballMover); var helpFade:Tween = new Tween (p1info, "alpha", None.easeOut,1, 0, infoTime, true); score.visible = true; } } //Ball Movement function ballMover (e:Event){ scor += scoreTime * ballsp; score.text = "Score: " + String(Math.ceil(scor)); ballsp = Math.sqrt(ballXsp*ballXsp + ballYsp*ballYsp); speed_txt.text = "Ball Speed: " + String(ballsp); //Initialise ball Vertical Movement if (ballYsp > maxSpeed) ballYsp = maxSpeed; if (ballYsp < -maxSpeed) ballYsp = -maxSpeed; ballYpos = ball.y + ballYsp; //Check for Collissions //Top if (ballYpos < ball.height/2 ){ ball.y = ball.height/2; ballYsp *= -1; setBallColor(); ballYsp += acc + Math.random()*accRnd; if (ballXsp>0) ballXsp += acc + Math.random()*accRnd; else ballXsp -= acc + Math.random()*accRnd; } //Bottom else if (ballYpos > (stage.stageHeight - ball.height/2)){ ball.y = stage.stageHeight - ball.height/2; ballYsp *= -1; setBallColor(); ballYsp -= (acc + Math.random()*accRnd); if (ballXsp>0) ballXsp += acc + Math.random()*accRnd; else ballXsp -= acc + Math.random()*accRnd; } //Move Ball else ball.y = ballYpos; // Set ball Horizontal Movement if (ballXsp > maxSpeed*1.5) ballXsp = maxSpeed; if (ballXsp < -maxSpeed*1.5) ballXsp = -maxSpeed; ballXpos = ball.x + ballXsp; //Find Paddle Speed LpSpeed = lPaddle.y - LpPos; RpSpeed = rPaddle.y - RpPos; //Check Ball's Distance from Paddles LpDist = Math.sqrt((ball.y-lPaddle.y)*(ball.y-lPaddle.y) + (ball.x-lPaddle.x)*(ball.x-lPaddle.x)); RpDist = Math.sqrt((ball.y-rPaddle.y)*(ball.y-rPaddle.y) + (ball.x-rPaddle.x)*(ball.x-rPaddle.x)); //Check for Collissions //Right Paddle if (RpDist < lPaddle.width/2 + ball.width/2 - pad){ if (ball.x < rPaddle.x+10){ ball.x = rPaddle.x - rPaddle.width/2 - ballSize/2; ballXsp *= -1; ballXsp -= acc - Math.random()*accRnd; ballYsp += RpSpeed*addSp;//speed up ball movement if paddle is moving setHitR(); diedCount.visible = true; } else{ ballXpos = ball.x + ballXsp*3; ball.x = ballXpos; } } //Left Paddle else if (LpDist < lPaddle.width/2 + ball.width/2 - pad){ if (ball.x > lPaddle.x-10){ ball.x = lPaddle.x + lPaddle.width/2 + ballSize/2; ballXsp *= -1; ballXsp += acc + Math.random()*accRnd; ballYsp += LpSpeed*addSp;//speed up ball movement if paddle is moving setHitL(); diedCount.visible = true; } else{ ballXpos = ball.x + ballXsp*3; ball.x = ballXpos; } } // Checking Bondaries //Left Boundary else if (ball.x < -ball.width - lPaddle.width){ ball.x = stage.stageWidth/2; rScor += scor; rScore.text = String(rScor) resetVars(); } //Right Bondary else if (ball.x > stage.stageWidth + ball.width + lPaddle.width){ ball.x = stage.stageWidth/2; lScor += scor; lScore.text = String(lScor) resetVars(); } else ball.x = ballXpos; //Save where the paddles are after movement on this frame LpPos = lPaddle.y; RpPos = rPaddle.y; } //Set Ball/Speed font colour function setBallColor():void{ ballColor.redOffset = -100+(((ballsp-3)/50)*(255+145)); ballColor.blueOffset = -210+(((ballsp-3)/50)*(255+210)); ballColor.greenOffset = -210+(((ballsp-3)/50)*(255+210)); ball.ballClr.transform.colorTransform = ballColor; sFont.color = ball.ballClr.color; speed_txt.defaultTextFormat = sFont } //Paddle Movement // Check which key is pressed function controls (e:KeyboardEvent):void{ switch (e.keyCode){ case 38: switch (players){ case 2: case 3: case 4: stage.addEventListener (Event.ENTER_FRAME, rightUP); break; } break; case 40: switch (players){ case 2: case 3: case 4: stage.addEventListener (Event.ENTER_FRAME, rightDOWN); break; } break; case 87: switch (players){ case 1: case 3: case 4: stage.addEventListener (Event.ENTER_FRAME, leftUP); break; } break; case 83: switch (players){ case 1: case 3: case 4: stage.addEventListener (Event.ENTER_FRAME, leftDOWN); break; } break; } } // Check which key is released function killControls (e:KeyboardEvent):void{ switch (e.keyCode){ case 38: stage.removeEventListener (Event.ENTER_FRAME, rightUP); RpAcc = 0; break; case 40: stage.removeEventListener (Event.ENTER_FRAME, rightDOWN); RpAcc = 0; break; case 87: stage.removeEventListener (Event.ENTER_FRAME, leftUP); LpAcc = 0; break; case 83: stage.removeEventListener (Event.ENTER_FRAME, leftDOWN); LpAcc = 0; break; } } //Move Right paddle function rightUP(e:Event):void{ rPaddle.y -= RpMove + RpAcc; if (rPaddle.y < 0) rPaddle.y = 0; RpAcc += RpAccc; } function rightDOWN(e:Event):void{ rPaddle.y += RpMove + RpAcc; if (rPaddle.y > stage.stageHeight) rPaddle.y = stage.stageHeight; RpAcc += RpAccc; } //Move Left paddle function leftUP(e:Event):void{ lPaddle.y -= LpMove + LpAcc; if (lPaddle.y < 0) lPaddle.y = 0; LpAcc += LpAccc; } function leftDOWN(e:Event):void{ lPaddle.y += LpMove + LpAcc; if (lPaddle.y > stage.stageHeight) lPaddle.y = stage.stageHeight; LpAcc += LpAccc; } //Set points on hit //Left Paddle function setHitL():void{ hitscore.textColor = lFont; hitAccu=Math.abs(lPaddle.y-ball.y)*accuracyBonus; hitSpee=Math.abs(LpSpeed)*speedBonus; hitSize=ballSize*10 hitScor = 1500 - hitAccu - hitSpee - hitSize; if (hiHit < hitScor){ hiHit = hitScor; hihitscore.textColor = lFont; } scor += hitScor; hitscore.text = "Last Hit: " + String(hitScor) + " / 1500" + "\n Accuracy pts: " + String(500- hitAccu) + " / 500" + "\n Speed pts: " + String(500- hitSpee) + " / 500" + "\n Size pts: " + String(500- hitSize) + " / 500"; hihitscore.text = "Highest Hit: " + String (hiHit); switch (players){ case 1: case 3: case 4: if (500-hitAccu<0)lScor += (500-hitAccu)*10; if (500-hitSpee<0)lScor += (500-hitSpee)*10; break; } rScore.text = String(rScor)} //Right Paddle function setHitR():void{ hitscore.textColor = rFont; hitAccu=Math.abs(rPaddle.y-ball.y)*accuracyBonus; hitSpee=Math.abs(RpSpeed)*speedBonus; hitSize=ballSize*10 hitScor = 1500 - hitAccu - hitSpee - hitSize; if (hiHit < hitScor){ hiHit = hitScor; hihitscore.textColor = rFont; } scor += hitScor; hitscore.text = "Last Hit: " + String(hitScor) + " / 1500" + "\n Accuracy pts: " + String(500- hitAccu) + " / 500" + "\n Speed pts: " + String(500- hitSpee) + " / 500" + "\n Size pts: " + String(500- hitSize) + " / 500" + "\n Highest Hit: " + String (hiHit); hihitscore.text = "Highest Hit: " + String (hiHit); switch (players){ case 2: case 3: case 4: if (500-hitAccu<0)rScor += (500-hitAccu)*10; if (500-hitSpee<0)rScor += (500-hitSpee)*10; break; } rScore.text = String(rScor) } //For single Player:- // Move Left //Check ball position function checkBallX2(e:Event):void{ //Check number of players switch (players){ case 2: case 5: if (ball.x > stage.stageWidth/pMoveStart){ stage.removeEventListener (Event.ENTER_FRAME, setP2Ball); stage.addEventListener (Event.ENTER_FRAME, setP2Mid); } else{ stage.removeEventListener (Event.ENTER_FRAME, setP2Mid); stage.addEventListener (Event.ENTER_FRAME, setP2Ball); } break; default: stage.removeEventListener (Event.ENTER_FRAME, setP2Ball); stage.removeEventListener (Event.ENTER_FRAME, setP2Mid); break; } } function setP2Ball(e:Event):void{ hDist2 = ball.y - lPaddle.y; moveP2(); } function setP2Mid(e:Event):void{ switch (difficulty){ case 1: case 2: hDist2 = 0; break; case 3: case 4: hDist2 = stage.stageHeight/2 - lPaddle.y; break; } moveP2(); } function moveP2():void{ p2Spd += hDist2 * p2Acc; p2Spd *= p2friction; if (p2Spd>p2MaxSpd) p2Spd=p2MaxSpd; if (p2Spd<-p2MaxSpd) p2Spd=-p2MaxSpd; lPaddle.y = lPaddle.y + p2Spd; if (lPaddle.y < 0){ lPaddle.y = 0; p2Spd = 0; } if (lPaddle.y > stage.stageHeight){ lPaddle.y = stage.stageHeight; p2Spd = 0; } } // Move Right //Check ball position function checkBallX1(e:Event):void{ //Check number of players switch (players){ case 1: case 5: if (ball.x > stage.stageWidth- stage.stageWidth/pMoveStart){ stage.removeEventListener (Event.ENTER_FRAME, setP1Mid); stage.addEventListener (Event.ENTER_FRAME, setP1Ball); } else{ stage.removeEventListener (Event.ENTER_FRAME, setP1Ball); stage.addEventListener (Event.ENTER_FRAME, setP1Mid); } break; default: stage.removeEventListener (Event.ENTER_FRAME, setP1Ball); stage.removeEventListener (Event.ENTER_FRAME, setP1Mid); break; } } function setP1Ball(e:Event):void{ hDist1 = ball.y - rPaddle.y; moveP1(); } function setP1Mid(e:Event):void{ switch (difficulty){ case 1: case 2: hDist1 = 0; break; case 3: case 4: hDist1 = stage.stageHeight/2 - rPaddle.y; break; } moveP1(); } function moveP1():void{ p1Spd += hDist1 * p1Acc; p1Spd *= p1friction; if (p1Spd>p2MaxSpd) p1Spd=p2MaxSpd; if (p1Spd<-p2MaxSpd) p1Spd=-p2MaxSpd; rPaddle.y = rPaddle.y + p1Spd; if (rPaddle.y < 0){ rPaddle.y = 0; p1Spd = 0; } if (rPaddle.y > stage.stageHeight){ rPaddle.y = stage.stageHeight; p1Spd = 0; } } //Set variables at start and on miss function resetVars():void{ ballXint = (Math.random() - 0.5) * (5*difficulty); ballYint = (Math.random() - 0.5) * (5*difficulty); if (scor>hiScor) hiScor = scor; scor = 0; hiscore.text = "HiScore: " + hiScor as String; score.text = "Score: " + scor as String; if (ballXint == 0) ballXint = minSpeed; else if (ballXint > 0) ballXint += minSpeed; else ballXint -= minSpeed; ballXsp = ballXint; if (ballYint == 0) ballYsp = minSpeed; else if (ballYint > 0) ballYint += minSpeed; else ballYint -= minSpeed; ballYsp = ballYint; ballSize = Math.random()*46+4; ball.width = ball.height = ballSize; setBallColor(); died ++; diedCount.visible = true; setBallColor(); if (died == 0) diedCount.text = "Wow, you haven't died yet..."; else if (died == 1){ diedCount.text = "Umm... You died..."; hiscore.visible = true; } else diedCount.text = "You've died " + String(died) + " times!"; }