由於協會活動需要~小弟被迫要做一個知識問答遊戲~
思路是這樣的,遊戲分為3個等級,當combo達到3時,通過當前關卡,當life為0或者不可能達到combo為3的情況,則失敗。
資訊列上顯示相關資訊。為整個介面:
選項類:
package {//Option類,綁定Main.fla的中元件<br />import flash.display.MovieClip;<br />import flash.events.MouseEvent;<br />import flash.events.Event;<br />public class Option extends MovieClip {<br />public static var SELECTED:String="selected";//被選擇的事件<br />private var answer:String;//儲存自身所代表的答案,"A","B","C"或者"D"<br />public function Option(option:String):void {<br />y=400;//設定y座標<br />buttonMode=true;//按鈕模式<br />this.option.text=option;//設定標籤內容<br />this.option.selectable=false;//標籤不可以選<br />answer=option;//設定自身的答案<br />this.addEventListener(MouseEvent.CLICK,onClick);//添加按一下滑鼠事件<br />}<br />private function onClick(event:MouseEvent):void {<br />var tempEvent:Event=new Event(SELECTED,true);//派發被選擇的事件<br />this.dispatchEvent(tempEvent);<br />}<br />public function getAnswer():String {<br />return this.answer;//返回自身的答案<br />}<br />}<br />}
提示資訊類:
package<br />{//Cue類,綁定Main.fla的中元件<br />import flash.events.MouseEvent;<br />import flash.display.MovieClip;<br />import flash.events.Event;<br />public class Cue extends MovieClip<br />{<br />public static var ENSURED:String="ensured";//當被按下"確定"時<br />public function Cue (cueMessage:String):void<br />{<br />this.message.text=cueMessage;//設定<br />this.ensure.buttonMode=true;//按鈕模式<br />this.ensure.addEventListener (MouseEvent.CLICK,clickEnsure);//當滑鼠按下時<br />}<br />private function clickEnsure (event:MouseEvent):void<br />{<br />var tempEvent:Event=new Event(ENSURED,true);<br />this.dispatchEvent (tempEvent);//派發按一下滑鼠事件<br />this.parent.removeChild (this);//移除自身<br />}<br />}<br />}
資訊列:
package<br />{//Message類,綁定Main.fla的中元件<br />import flash.display.MovieClip;<br />import flash.events.Event;<br />public class Message extends MovieClip<br />{<br />public static var LEVEL_UP:String="level_up"; //升級事件<br />public static var GAME_OVER:String="game_over"; //遊戲結束事件<br />private var levelNum:int=1; //level數值<br />private var comboNum:int=0; //combo數值<br />private const winComboNum:int=3; //連續多少combo勝利<br />private var lifeNum:int=2; //life數值<br />private const totalNum:int=5; //一共得題目數<br />private var correctNum:int=0; //回答正確的數目<br />private var myFalseNum:int=0; //回答錯誤的數目<br />private var doneNum:int=0; //已經做了的數目<br />public function Message ()<br />{<br />update ();//更新<br />}<br />public function option_correct ():void<br />{<br />comboNum++;//得一個combo<br />//如果達到勝利條件<br />if (comboNum==winComboNum) {</p><p>var temp:int=levelNum+1;//暫時儲存下一個等級數<br />initial ();<br />levelNum=temp;//放入剛才儲存的等級數<br />var tempEvent:Event=new Event(LEVEL_UP,true);<br />this.dispatchEvent (tempEvent);//派發升級事件<br />}<br />else {<br />correctNum++;//正確數目加1<br />doneNum++;//完成數目加1<br />}<br />update ();//更新<br />}<br />public function option_false ():void<br />{<br />lifeNum--;//生命減1<br />doneNum++;//完成數加1<br />//當生命為0或者剩餘題目就算全對也不可能達到combo為3的情況<br />if (lifeNum==0||winComboNum>totalNum-doneNum) {</p><p>initial ();//資訊初始化<br />var tempEvent:Event=new Event(GAME_OVER,true);<br />this.dispatchEvent (tempEvent);//派發遊戲結束事件<br />}<br />else {<br />myFalseNum++;//錯誤數加1<br />comboNum=0;//連擊數為0<br />}<br />update ();//更新<br />}<br />//介面,供外部來重新設定資訊<br />public function again (event:Event):void<br />{<br />initial ();//初始化<br />update ();//更新<br />}<br />public function initial ():void<br />{<br />levelNum=1;//初始化<br />comboNum=0;<br />lifeNum=2;<br />correctNum=0;<br />myFalseNum=0;<br />doneNum=0;<br />}<br />public function update ():void<br />{<br />this.level.text=(String)(levelNum);//更新顯示<br />this.combo.text=(String)(comboNum);<br />this.life.text=(String)(lifeNum);<br />this.total.text=(String)(totalNum);<br />this.correct.text=(String)(correctNum);<br />this.myFalse.text=(String)(myFalseNum);<br />this.done.text=(String)(doneNum);<br />}<br />}<br />}
密碼視窗類別:
package {//Password類,綁定Main.fla的中元件<br />import flash.display.MovieClip;<br />import flash.events.MouseEvent;<br />import flash.events.Event;<br />public class Password extends MovieClip {<br />private const myPassword:String="";//設定密碼<br />public static var IS_PASSED:String="is_passed";//事件,是否通過密碼<br />public function Password() {<br />this.ensure.buttonMode=true;//設定按鈕模式<br />this.cancel.buttonMode=true;//設定按鈕模式<br />this.cancel.addEventListener(MouseEvent.CLICK,canceled);//當"取消"被按下<br />this.ensure.addEventListener(MouseEvent.CLICK,ensured);//當"確定"被按下<br />}<br />private function canceled(event:MouseEvent):void {<br />this.parent.removeChild(this);//當"取消"按下移除自身<br />}<br />private function ensured(event:MouseEvent):void {<br />if (myPassword==this.password.text) {//如果輸入正確<br />this.parent.addChild(new Cue("輸入成功!"));//快顯視窗<br />this.dispatchEvent(new Event(IS_PASSED,true));//派發通過密碼事件<br />this.parent.removeChild(this);//同時移除自身<br />} else {<br />this.wrong.alpha=1;//如果輸入錯誤,顯示錯誤資訊<br />}<br />}<br />}<br />}
開始按鈕類:
package {//Start類,綁定Main.fla的中元件<br />import flash.display.MovieClip;<br />import flash.events.Event;<br />import flash.events.MouseEvent;<br />public class Start extends MovieClip {<br />public static var START_GAME:String="startGame";//開始遊戲的事件<br />public function Start() {<br />buttonMode=true;//按鈕模式<br />this.addEventListener(MouseEvent.CLICK,startGame);//當滑鼠點擊<br />this.addEventListener(Message.GAME_OVER,gameOver);//偵聽Message類派發的事件GAME_OVER<br />}<br />private function startGame(event:MouseEvent):void {<br />var tempEvent:Event=new Event(START_GAME,true);<br />this.dispatchEvent(tempEvent);//派發開始遊戲的事件<br />}<br />private function gameOver(event:Event):void {<br />this.gotoAndStop(1);//回到第一幀<br />}<br />}<br />}
主類Main:
package<br />{//主類<br />import flash.display.MovieClip;<br />import fl.controls.TextArea;<br />import flash.system.System;<br />import flash.net.URLLoader;<br />import flash.net.URLRequest;<br />import flash.events.Event;<br />import flash.text.TextFormat;<br />public class Main extends MovieClip<br />{<br />private var textArea:TextArea=new TextArea();//顯示題目的文本域<br />private var AArray:Array=new Array();//儲存答案的數組<br />private var QArray:Array=new Array();//儲存問題的數組<br />private var OptionsArray:Array=new Array();//4個選項的數組<br />private var urlRequest:URLRequest;//用於儲存要讀取的URLRequest<br />private var urlLoader:URLLoader;//用於讀取外部資訊<br />private var myStart:Start=new Start();//"開始遊戲"按鈕<br />private var myMessage:Message=new Message();//資訊列<br />private var curAnswer:String;//當前問題的答案<br />private var curLevel:int=1;//當前的等級<br />private var alreadyChosen:Array=new Array();//儲存已經被抽取的題目<br />private var tempRandom:int;//儲存隨記獲得的題目數組QArray中的相應索引<br />public function Main ()<br />{<br />System.useCodePage=true;//載入的外部文字檔不是 Unicode 編碼格式,則應將 useCodePage 設定為 true<br />init ();//初始化位置<br />this.addEventListener (Start.START_GAME,start_game);//添加偵聽Start所派發的開始遊戲事件<br />}<br />private function start_game (event:Event):void<br />{<br />addChild (new Password());//顯示密碼視窗<br />this.addEventListener (Password.IS_PASSED,isPassed);//偵聽成功輸入密碼事件<br />}<br />private function isPassed (event:Event):void<br />{<br />curLevel=1;//設定當前等級為1<br />alreadyChosen.length=0;//清空<br />QArray.length=0;//清空<br />AArray.length=0;//清空<br />readLevel ();//讀取當前等級的問題和答案<br />myMessage.initial ();//資訊列初始化<br />myMessage.update ();//資訊列更新顯示<br />for (var i:int=1; i<=3; i++) {//獎品勾隱形<br />this["prize"+i].alpha=0;<br />}<br />/////<br />if (myStart.currentFrame==1) {//如果當前是還沒"開始遊戲",就跳到"重新遊戲"<br />myStart.gotoAndStop (2);<br />}<br />showQuestion ();//隨機抽取一個問題,並顯示在文本域中<br />addEventListener (Option.SELECTED,testAnswer);//添加選項被選擇的事件偵聽<br />addEventListener (Message.LEVEL_UP,levelUp);//添加資訊列"升級"的事件偵聽<br />addEventListener (Message.GAME_OVER,game_over);//添加資訊列"遊戲結束"的事件偵聽<br />}<br />private function game_over (event:Event):void<br />{<br />showCue ("你已經掛了");//提示你已經掛了<br />myStart.gotoAndStop (1);//myStart回到第一幀"開始遊戲"<br />removeEventListener (Option.SELECTED,testAnswer);//移除選項被選擇的偵聽事件<br />curLevel=1;//當前等級設為1<br />alreadyChosen.length=0;//清空<br />QArray.length=0;//清空<br />AArray.length=0;//清空<br />textArea.text="";//清空文本域<br />}<br />private function levelUp (evnet:Event):void<br />{<br />curLevel++;//等級+1<br />this["prize"+(curLevel-1)].alpha=1;//相應的獎品勾起來<br />if (curLevel==4) {//當等級為4時,全部通關<br />showCue ("恭喜你全部通關!");<br />myStart.gotoAndStop (1);<br />textArea.text="";<br />curLevel=1;<br />alreadyChosen.length=0;<br />QArray.length=0;<br />AArray.length=0;<br />readLevel ();<br />myMessage.initial ();<br />myMessage.update ();<br />for (var i:int=1; i<=3; i++) {<br />this["prize"+i].alpha=0;<br />}<br />return;<br />}<br />showCue ("恭喜你獲得等級"+(curLevel-1)+"的獎品並進入等級"+curLevel+"!");<br />alreadyChosen.length=0;<br />QArray.length=0;<br />AArray.length=0;<br />readLevel ();<br />}<br />private function testAnswer (event:Event):void<br />{//檢測答案是否正確<br />var cueMessage:String;<br />if (curAnswer==event.target.getAnswer()) {<br />myMessage.option_correct ();//資訊列更新<br />cueMessage="回答正確";<br />}<br />else {<br />myMessage.option_false ();//資訊列更新<br />cueMessage="回答錯誤";<br />}<br />showQuestion ();//顯示下一個問題<br />showCue (cueMessage);//彈出提示<br />}<br />public function showCue (cueMessage:String):void<br />{<br />addChild (new Cue(cueMessage));//顯示資訊提示<br />}<br />private function init ():void<br />{<br />y+=30;<br />OptionsArray.push (new Option("A"));//添加4個選項<br />OptionsArray.push (new Option("B"));<br />OptionsArray.push (new Option("C"));<br />OptionsArray.push (new Option("D"));<br />for (var i:int=0; i<4; i++) {<br />addChild (OptionsArray[i]);<br />OptionsArray[i].x=70+i*200;<br />}<br />////////<br />addChild (textArea);//添加文本域<br />textArea.y=70;<br />textArea.x=70;<br />textArea.height=200;<br />textArea.editable=false;<br />textArea.width=OptionsArray[OptionsArray.length-1].x;<br />textArea.setStyle ("textFormat",new TextFormat(null,20));<br />/////<br />addChild (myStart);//添加"開始遊戲"按鈕<br />myStart.x=300;<br />myStart.y=470;<br />/////<br />addChild (myMessage);//添加資訊列<br />myMessage.x=140;<br />myMessage.y=40;<br />}<br />private function readLevel ():void//讀取當前等級的問題和答案<br />{<br />urlRequest=new URLRequest("Questions//Level"+curLevel+".txt");<br />urlLoader=new URLLoader();<br />urlLoader.load (urlRequest);<br />urlLoader.addEventListener (Event.COMPLETE,onComplete);<br />//////<br />urlRequest=new URLRequest("Answers//Answer"+curLevel+".txt");<br />urlLoader=new URLLoader();<br />urlLoader.load (urlRequest);<br />urlLoader.addEventListener (Event.COMPLETE,onComplete2);<br />}<br />private function onComplete (event:Event):void<br />{<br />var str:String=(String)(event.target.data);<br />var reg:RegExp=//n/g;//去掉所有分行符號<br />str=str.replace(reg,"");<br />QArray=str.split("*/r");//以"*"加斷行符號來分隔問題<br />showQuestion ();<br />}<br />private function onComplete2 (event:Event):void<br />{<br />var str:String=(String)(event.target.data);<br />var reg:RegExp=//n/g;//去掉所有分行符號<br />str=str.replace(reg,"");<br />AArray=str.split("*/r");//以"*"加斷行符號來分隔答案<br />curAnswer=AArray[tempRandom];<br />}<br />private function showQuestion ():void<br />{<br />if (QArray.length==0) {//如果QArray.length為0,則結束<br />return;<br />}<br />tempRandom=Math.round(Math.random()*(QArray.length-1));//隨機獲得一個數值,範圍在0-QArray.length-1之間<br />if (alreadyChosen.some(isAlreadyChosen)) {<br />showQuestion ();//如果抽取的已經被做了,則再抽<br />}<br />else {<br />alreadyChosen.push (tempRandom);//把抽取的放入已經被抽取題目的數組中<br />textArea.text=QArray[tempRandom];//更新文本域的資訊<br />curAnswer=AArray[tempRandom];//儲存當前題目的答案<br />}<br />}<br />private function isAlreadyChosen (item:int,index:int,array:Array):Boolean<br />{//回呼函數,檢測抽取的題目是否已經被做過了<br />if (item==tempRandom) {<br />return true;<br />}<br />return false;<br />}<br />}<br />}
這裡給大家整個檔案哈,做得不好的大家體諒,並提出來好嗎?謝謝!
是:http://www.fileupyours.com/files/267523/waibu.rar