//¡¡IMPORT!!\\ import fl.transitions.Tween; import fl.transitions.easing.* ; //¡¡VARIABLES!!\\ //Calculating movement Direction var speed:Number=stage.stageHeight * 0.0025; var xDist:Number; var yDist:Number; var xRatio:Number; var yRatio:Number; var wordAngle:Number; //Gameplay variables var shipColor:ColorTransform = new ColorTransform; var wordCount:int=0;//how many words are currently on screen var wordsWaiting:int = 0;//how many new words are queued up to be created var available:Boolean=true;//check if random letter is already used var letterCode:int;//char code of random letter var chooseWord:int;//word number chosen from XML var chosenWord:String;//word text chosen from XML var keyPressed:String;//user pressed key var score:int = 0;//current score var points:int = 0;//points for current word var frameCount:int = 50;//how many frames until next word creation var ttlFrames:int = 0;//total frames passed since game start var perFrames:Number = 50;//how many frames between word creations //XML variables var xmlsLoaded:int = 0;//how many XMLs have loaded so far var fromXML:XML;//which XML to pull a word from var xmlArray:Array = new Array;//XMLs stored in here //load XLMs var words3_XML:XML; var words4_XML:XML; var words5_XML:XML; var words6_XML:XML; var words7_XML:XML; var xmlLoader3:URLLoader = new URLLoader(); xmlLoader3.load(new URLRequest("../media/wordlist3.xml")); xmlLoader3.addEventListener(Event.COMPLETE, xmlLoaded); xmlLoader3.addEventListener(IOErrorEvent.IO_ERROR, xmlLoadError); var xmlLoader4:URLLoader = new URLLoader(); xmlLoader4.load(new URLRequest("../media/wordlist4.xml")); xmlLoader4.addEventListener(Event.COMPLETE, xmlLoaded); xmlLoader4.addEventListener(IOErrorEvent.IO_ERROR, xmlLoadError); var xmlLoader5:URLLoader = new URLLoader(); xmlLoader5.load(new URLRequest("../media/wordlist5.xml")); xmlLoader5.addEventListener(Event.COMPLETE, xmlLoaded); xmlLoader5.addEventListener(IOErrorEvent.IO_ERROR, xmlLoadError); var xmlLoader6:URLLoader = new URLLoader(); xmlLoader6.load(new URLRequest("../media/wordlist6.xml")); xmlLoader6.addEventListener(Event.COMPLETE, xmlLoaded); xmlLoader6.addEventListener(IOErrorEvent.IO_ERROR, xmlLoadError); var xmlLoader7:URLLoader = new URLLoader(); xmlLoader7.load(new URLRequest("../media/wordlist7.xml")); xmlLoader7.addEventListener(Event.COMPLETE, xmlLoaded); xmlLoader7.addEventListener(IOErrorEvent.IO_ERROR, xmlLoadError); //Text variables var words_array:Array = new Array;//words on screen var focusWord_txt:TextField;//word being typed var aWord_txt:TextField;//each word var wordGlow:GlowFilter = new GlowFilter; wordGlow.strength = 2; wordGlow.blurX = 15; wordGlow.blurY = 15; wordGlow.quality = 2; var wordsFormat:TextFormat = new TextFormat; wordsFormat.size = 20; wordsFormat.font = "Arial"; wordsFormat.align = TextFormatAlign.CENTER; var focusFormat:TextFormat = new TextFormat; focusFormat.color = 0xFFFFFF; var scoreFormat:TextFormat = new TextFormat; scoreFormat.size = 200; scoreFormat.font = "Arial"; scoreFormat.align = TextFormatAlign.CENTER; scoreFormat.color = 0xFFFFFF; var score_txt:TextField = new TextField; addChild(score_txt); score_txt.selectable = false; score_txt.width = stage.stageWidth; score_txt.height = 200; score_txt.y = stage.stageHeight/2 - 100; score_txt.defaultTextFormat = scoreFormat; score_txt.alpha = 0; score_txt.text = String(score); //¡¡FUNCTIONS!!\\ stage.addEventListener (MouseEvent.MOUSE_MOVE, moveShip) function moveShip (e:MouseEvent):void{ ship.x = stage.mouseX; } //As each XML loads, give visible feedback. function xmlLoaded(e:Event):void{ xmlsLoaded ++; info_txt.text = "\n\n\n\nLoaded " + String(xmlsLoaded*20) + "%" //If all have loaded, allow game start if (xmlsLoaded == 5){ info_txt.text = "Text Will appear before you.\n\nType it to DESTROY it.\n\nLet 26 words appear and the game will end.\n\nClick to start.\n\nGood Luck..."; words3_XML = new XML(xmlLoader3.data); words4_XML = new XML(xmlLoader4.data); words5_XML = new XML(xmlLoader5.data); words6_XML = new XML(xmlLoader6.data); words6_XML = new XML(xmlLoader7.data); xmlArray.push(words3_XML); xmlArray.push(words4_XML); xmlArray.push(words5_XML); xmlArray.push(words6_XML); xmlArray.push(words7_XML); stage.addEventListener (MouseEvent.CLICK, initGame) } } //If a load error occurs, throw error function xmlLoadError(e:Event):void{ info_txt.text = "\n\nXML Load Error: " + Event + ".\n\nPlease refresh your browser."; } //On game starting click, fade overlays and start event Listeners function initGame (e:MouseEvent):void{ stage.removeEventListener (MouseEvent.CLICK, initGame) stage.addEventListener (Event.ENTER_FRAME, countFrames); stage.addEventListener (KeyboardEvent.KEY_DOWN, checkKey); stage.addEventListener (Event.ENTER_FRAME, startMove); var fadeOutInfo:Tween= new Tween(info_txt, "alpha", None.easeIn, 1,0,0.5,true); var fadeInScore:Tween= new Tween(score_txt, "alpha", None.easeIn, 0,0.2,2,true); } //Every frame... function countFrames (e:Event):void{ //Display number of words currently displayed wordcount_txt.text = String(wordCount); //calculate current total frames played ttlFrames ++; //count down until new word is queued frameCount --; //if countdown reaches 0 if (frameCount < 1){ //set countdown lowered for next time perFrames *= 0.98; //set new countdown frameCount = perFrames; //so long as there isn't 26 or more words on screen... if (words_array.length<26){ //queue a new word to be created wordsWaiting++; } //if there ARE more than 26 or more words on screen, stop game and display final score else{ wordsWaiting = 0; stage.removeEventListener (Event.ENTER_FRAME, countFrames); stage.removeEventListener (KeyboardEvent.KEY_DOWN, checkKey); stage.removeEventListener(KeyboardEvent.KEY_DOWN, deleteText); score_txt.text = "Final Score: " + String(score); wordcount_txt.text = "Game Over" } } //if 6 frames have passed since the last word appeared if (ttlFrames%12 == 0){ //and at least one word is due to be created if (wordsWaiting > 0){ //start new word creation and remove one word from the creation queue newWord(); wordsWaiting -= 1; } } } //initiate word movement function startMove(e:Event):void{ if (words_array.length!=0) words_array.forEach(moveWords); } //move words... function moveWords(movingWord,indx,arry):void{ //find the word's distance from the ship xDist = ship.x - movingWord.width/2 - movingWord.x; yDist = ship.y - movingWord.y; //find the angle from the ship wordAngle = Math.atan2(yDist,xDist) //find the ratio of x and y distance from the ship xRatio = Math.cos(wordAngle) yRatio = Math.sin(wordAngle) //move the word relative to ratio and speed movingWord.x+= xRatio*speed; movingWord.y += yRatio*speed; if (movingWord.y >= ship.y){ movingWord.x = Math.random()*(stage.stageWidth-100); movingWord.y = -10; wordsWaiting ++; } } //initiate word creation function newWord():void{ //randomly choose a colour wordsFormat.color = wordGlow.color = Math.random() * 0x999999 + 0x444444; //created and format a text field to put the text in aWord_txt = new TextField; addChild(aWord_txt); aWord_txt.selectable = false; aWord_txt.defaultTextFormat = wordsFormat; aWord_txt.filters = [wordGlow]; aWord_txt.y = -10; aWord_txt.x = Math.random()*(stage.stageWidth-100); aWord_txt.width = 140; //Choose what length the word will be fromXML = xmlArray[int(Math.random()*xmlArray.length)]; //start choosing a word testWord(); } //choose word from XMLs function testWord():void{ //Choose a word at random from chosen XML chooseWord = Math.random()*fromXML.word.length(); //if there are any words in the array... if (words_array.length>0){ //find text of chosen word chosenWord = fromXML.word[chooseWord]; //check against every current word in the array for(var j:int = 0; j