Flex 小游戏 - 托拽

为我女朋友做的一个小游戏, 猜数字。 应用到Flex的托拽。有问题请 email :sunjunbin@gmail.com

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" verticalAlign="middle" backgroundColor="#FFFFFF" backgroundGradientColors="[#ffffff, #e1e1e1]" initialize="init()">

	 <mx:Script>

        <![CDATA[

        	import mx.skins.halo.DateChooserIndicator;

        	import mx.charts.DateTimeAxis;

        	import mx.formatters.DateBase;

        	import mx.accessibility.DateChooserAccImpl;

        	import flash.utils.getTimer;

        	import mx.charts.AreaChart;

        	import mx.events.CollectionEvent;

        	import mx.rpc.events.AbstractEvent;

        	import mx.events.DragEvent;

        	import mx.events.ListEvent;

        	import mx.collections.ArrayCollection;

        	import mx.controls.Alert;

            import mx.events.ItemClickEvent;

            import mx.controls.TabBar;

			import mx.collections.ICollectionView;	

			import mx.managers.DragManager;

			import mx.core.IUIComponent;

			

			

            [Bindable][Embed("img/0.gif")]

            public var num0:Class;

            [Bindable][Embed("img/1.gif")]

            public var num1:Class;

            [Bindable][Embed("img/2.gif")]

            public var num2:Class;

            [Bindable][Embed("img/3.gif")]

            public var num3:Class;

            [Bindable][Embed("img/4.gif")]

            public var num4:Class;

            [Bindable][Embed("img/5.gif")]

            public var num5:Class;

            [Bindable][Embed("img/6.gif")]

            public var num6:Class;

            [Bindable][Embed("img/7.gif")]

            public var num7:Class;

            [Bindable][Embed("img/8.gif")]

            public var num8:Class;

            [Bindable][Embed("img/9.gif")]

            public var num9:Class;

             

            [Bindable]

            public var numSelection_dragable:Boolean = false;

            [Bindable]

            public var numSelection_dropable:Boolean = false;

            [Bindable]

            public var resultArea_dragable:Boolean = false;

            [Bindable]

            public var resultArea_dropable:Boolean = false;

                        

			[Bindable]

            public var nowTime : String ="init....";

			[Bindable]

            public var passedTime : Number = 0;

			[Bindable]

            public var resultAreaArr:ArrayCollection = new ArrayCollection();

            [Bindable]

            private var guessTrackArr : ArrayCollection =new ArrayCollection();

			private var currentStr : String ="";

			private var finalResStr : String ="";

			private var globalTimer : Timer =new Timer(1000,0);

			private var playTimer : Timer =new Timer(1000,0);

			private var checkCount: int = 0;

        

        private function init():void{

			resultAreaArr.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeEvnHander);

			globalTimer.addEventListener(TimerEvent.TIMER,doTimer);globalTimer.start();

			playTimer.addEventListener(TimerEvent.TIMER,doPlayTimer);

			guessTrackArr.addItem("view the guessing track");

		}

    	

    	private function resetProvderAreaArr():void{

			numSelection.dataProvider = [

        	  				   {label : "zero" , icon : num0},

							   {label : "one"  , icon : num1},

							   {label : "two"  , icon : num2},

							   {label : "three", icon : num3},

							   {label : "four" , icon : num4},

							   {label : "five" , icon : num5},

							   {label : "six"  , icon : num6},

							   {label : "seven", icon : num7},

							   {label : "eight", icon : num8},

							   {label : "nine" , icon : num9}

			];

			resultAreaArr.removeAll();

		}

    	

    	private function clickEvt(event:ItemClickEvent):void {

    		var targetComp:TabBar = TabBar(event.currentTarget);

    	}



		private function canDragOrNot() : void{

			if (resultArea_dropable==false){

				Alert.show("Pls click Start button to play ^_^");

			}

			if (this.numSelection.dataProvider.length>=7){

				this.numSelection_dragable =true;

			}else{

				this.numSelection_dragable =false;

			}

		}



		private function convertEngToNum(input : String) : String{

			var	resultStr : String; 

			

			if (input == "one"){

				resultStr = "1";

			}else if (input == "two"){

				resultStr = "2";

			}else if (input == "three"){

				resultStr = "3";

			}else if (input == "four"){

				resultStr = "4";				

			}else if (input == "five"){

				resultStr = "5";

			}else if (input == "six"){

				resultStr = "6";

			}else if (input == "seven"){

				resultStr = "7";

			}else if (input == "eight"){

				resultStr = "8";

			}else if (input == "nine"){

				resultStr = "9";

			}else if (input == "zero"){

				resultStr = "0";

			}

			return resultStr;

		}

		

		private function btnCheckOnclick() : void{

			if (currentStr!="" && currentStr.length==4){

				if (finalResStr.length==4 && currentStr.length==4){

					checkCount++;

					guessTrackArr.addItemAt(checkCount+": "+currentStr+" :->["+ compareStr(finalResStr,currentStr)+"]",0);

					cb_guessTrack.focusEnabled=true;

					cb_guessTrack.selectedIndex=0;

				}

			}

		}

		

		private function generateFinalResultStr(): String{

			var resultStr: String="";

			var tmpArr:ArrayCollection = new ArrayCollection();

			var tmpNum : Number;

			while (tmpArr.length<4){

				tmpNum = randRange(0,9);

				if (!tmpArr.contains(tmpNum)){

					tmpArr.addItem(tmpNum);

				}

			}

			for(var i: int = 0; i<tmpArr.length;i++){

				resultStr += tmpArr[i].toString();

			}

			return resultStr;

		}

		

		private function randRange(min:Number, max:Number):Number {

    		var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;

    		return randomNum;

		}

		

		public function collectionChangeEvnHander(event : CollectionEvent) : void{

			var tmpStr:String = "";

			for (var i:int =0; i< this.resultAreaArr.length;i++){

					tmpStr += convertEngToNum(resultAreaArr[i].label); 

			}

			currentStr = tmpStr;

		}

		

		public function startGame():void{

			resetProvderAreaArr();

			finalResStr = generateFinalResultStr();

			passedTime = 0;

			checkCount =0;

			playTimer.start();

			guessTrackArr.removeAll();

			guessTrackArr.addItem("view the guessing track");

			numSelection_dragable = true;

            numSelection_dropable = true;

            resultArea_dragable = true;

            resultArea_dropable = true;

		}

		

		private function doTimer(event:TimerEvent):void{

			nowTime = new Date().toLocaleTimeString();

		}

		

		private function doPlayTimer(event:TimerEvent):void{

			passedTime += 1;

		}

				

		public function compareStr(finalStr:String,guessStr:String):String{

			var tmpArr : ArrayCollection = new ArrayCollection();

			var resultStr : String = "";

			var countA : int = 0;

			var countB : int = 0;

			

			if (finalStr.length==4 && guessStr.length==4){

				

				for(var i:int=0; i<finalStr.length; i++){

					tmpArr.addItem(finalStr.charAt(i));

					if (finalStr.charAt(i) == guessStr.charAt(i)){

						countA += 1;

					}

				}

			for (var j:int=0;j<guessStr.length;j++){

				if (tmpArr.contains(guessStr.charAt(j))){

					countB += 1;

				}

			}

			var tmpNum : int = countB - countA;

			resultStr = "A:"+countA.toString()+" B:"+tmpNum.toString();

			}

			if (resultStr=="A:4 B:0"){

				Alert.show("Gratulation ! The right answer is :["+guessStr+"] you totally used "+passedTime.toString()+" s and "+checkCount+" trys");

				playTimer.stop();

			}

			return resultStr;

		}

       ]]>

    </mx:Script>

    

	<mx:Panel height="400" layout="vertical" horizontalAlign="center" verticalAlign="middle" width="590" id="mainPanel" title="RIDDLE GAME for T">

		<mx:TabBar itemClick="clickEvt(event);" width="566">

			<mx:dataProvider>mainArea</mx:dataProvider>

        </mx:TabBar>

       

		<mx:ViewStack id="mainArea" width="100%" height="100%">

			<mx:Panel label="playing here {nowTime}" title="Guess numbers[4 bit] via feedback. A:-> correct position and value, B:-> correct value only." layout="vertical" height="333">

			  <mx:VBox height="100%" width="549" horizontalAlign="center" verticalAlign="top">

			    <mx:TileList id="numSelection" 	mouseMove="canDragOrNot()" dropEnabled="{numSelection_dropable}" dragMoveEnabled="true"	dragEnabled="{numSelection_dragable}"	height="79" maxRows="1"	maxColumns="10" width="549" allowMultipleSelection="false">

					<mx:dataProvider>

						<mx:ArrayCollection id="arr">

							<mx:Object label="zero"  icon="{num0}"/>

							<mx:Object label="one"   icon="{num1}"/>

							<mx:Object label="two"   icon="{num2}"/>

							<mx:Object label="three" icon="{num3}"/>

							<mx:Object label="four"  icon="{num4}"/>

							<mx:Object label="five"  icon="{num5}"/>

							<mx:Object label="six"   icon="{num6}"/>

							<mx:Object label="seven" icon="{num7}"/>

							<mx:Object label="eight" icon="{num8}"/>

							<mx:Object label="nine"  icon="{num9}"/>

						</mx:ArrayCollection>

					</mx:dataProvider>			    	

			    </mx:TileList>

			    <mx:Label text="Please drag & drop the number to the result area"/>

			    <mx:HBox width="100%" verticalAlign="middle" horizontalAlign="center">

			      <mx:TileList id="resultArea" maxColumns="4"	dragEnabled="{resultArea_dragable}"	dragMoveEnabled="true"	maxRows="1"	dropEnabled="{resultArea_dropable}" 

			      	height="81" 	width="216" allowMultipleSelection="false"

			      dataProvider="{resultAreaArr}"/>

			      <mx:VBox height="100%">

			        <mx:Panel width="160" height="78" layout="vertical" title="Time has passed away" horizontalAlign="center" verticalAlign="middle">

			          <mx:Label id="l_gameTimer" text="{passedTime} s"/>

			        </mx:Panel>

			      </mx:VBox>

			    </mx:HBox>

			    <mx:HBox width="100%" verticalAlign="middle" horizontalAlign="center">

			      <mx:ComboBox id="cb_guessTrack"

			      	dataProvider="{guessTrackArr}"

			      	selectedIndex="0"/>

			      <mx:Button label="CHECK " enabled="true" id="btn_check" width="111"

			      	click="btnCheckOnclick()"/>

			    </mx:HBox>

			    <mx:HBox width="100%" verticalAlign="middle" horizontalAlign="center">

			      <mx:Button label="Start" click="startGame()"/>

			      <mx:Button label="reset" click="resetProvderAreaArr()"/>

			    </mx:HBox>

			  </mx:VBox>

			</mx:Panel>

			<mx:Panel label="statistics" width="100%" height="323">

				<mx:HBox width="100%" height="100%">

				<mx:VBox height="285" width="100%" horizontalAlign="center" verticalAlign="middle">

					<mx:Label text="statistics of your last playing"/>					

				</mx:VBox>

				</mx:HBox>

			</mx:Panel>

		</mx:ViewStack>

	</mx:Panel>

</mx:Application>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值