猜数字小游戏, 随机产生的4位数字, A:位置对,数字也正确. B:数字正确,但是位置不对. 例如 [A:2 B:1]表示当前这四个数字中有两个数字是和结果吻合的, 另一个数字包含在结果内,但是所在位置不对.
还是很简单的, 当时是为了用一下Flex的拖拽功能.
code中引用的gif图片没有上传, 随便下载一套, 按照路径放置之后, 编译就可以了.
<?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("--- guess 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("Please click Start button first.");
}
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 track here-");
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+" tries");
playTimer.stop();
}
return resultStr;
}
]]>
</mx:Script>
<mx:Panel height="400" layout="vertical" horizontalAlign="center" verticalAlign="middle" width="590" id="mainPanel" title="RIDDLE GAME by Lori">
<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="- {nowTime} - The GOAL is [A:4 B:0]" title="GAME rules: [A] means count of right location and value, [B] means only right value." 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 below box and click the CHECK button"/>
<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>
- 大小: 24.7 KB
分享到:
相关推荐
文档"优化监控资金的附图(源码)通达信指标公式源码.doc"中包含了一个用于监控资金流动的自定义指标代码,这个指标通过计算和展示不同级别的买入和卖出资金量,以及市场能量饱和度等数据,帮助投资者分析市场的资金...
该指标源码主要由三部分组成:OBV 能量潮源码、STICKLINE 图形绘制和量入为主指标。 OBV 能量潮源码 OBV(On Balance Volume)是指标的核心,它衡量股票的交易量和价格变化关系。OBV 的计算公式为: OBV = 上一期...
通达信指标公式源码涨停公式附图源码.doc
通达信柳暗花明附图源码通达信指标源码.doc
通达信指标公式源码是指在通达信平台上使用的指标公式代码,用于分析和预测股票、基金、期货等金融市场的走势。本文将对通达信指标公式源码进行详细解析,并对其背后的数学原理和实践应用进行介绍。 1. STICKLINE ...
通达信指标公式源码一个大中牛附图指标.doc
通达信指标公式源码红绿接力主图附图源码无未来.doc是指标公式源码,主要用于股票市场分析,提供了多个技术指标和图表,以帮助投资者和分析师更好地了解股票市场的趋势和走势。 该指标公式源码包括以下几个部分: ...
通达信指标公式源码 龙虎霸 附图 源码.doc 本资源是关于通达信指标公式的源码,名称为“龙虎霸”,包含了多个技术指标的计算公式和可视化代码。下面是对这些技术指标的解释: 1. 龙指标(Dragon):计算公式为SMA...
本教程主要讲解如何编写一个名为“狂牛附图公式”的通达信指标公式源码,帮助用户在股市中进行更精确的技术分析。这个公式是无未来函数的,意味着它基于历史数据进行计算,不会对未来市场走势产生依赖。 公式的核心...
文档标题提到的"通达信指标公式源码 小小黑马附图源码和选股预警.doc"是一份教程,其中包含了一段用于创建自定义技术指标和选股策略的源代码。下面将详细解释这段源码的工作原理和应用。 首先,我们来看小小黑马...
通达信指标公式源码启明星主图和附图.doc
4. 源码中还定义了"风险"和"小心"两条线,分别设在80和87.5,提醒用户注意风险。当价格接近这些线时,应谨慎对待市场,可能意味着回调的风险。 5. "股神"(DD)和"股海"两个自定义指标是基于DD的移动平均和股海的...
这个压缩包文件“cmpp短信网关sp和ISMG端”包含的是关于CMPP3.0协议的具体实现,包括源码和可执行程序,由胡海亮和陈挺两位作者提供。 CMPP3.0是CMPP协议的第三个版本,相比于之前的2.0和1.0版本,它在功能和性能上...
源码可能涵盖了从图像读取、处理到特征提取和匹配的完整流程。学习和理解这些代码可以帮助我们更好地理解指纹识别系统的内部运作,并为自己的项目提供参考。 总的来说,指纹识别系统的MATLAB实现涉及到图像处理、...
通达信指标公式源码解析 通达信指标公式源码是一种常用的技术分析指标,用于分析股票、期货、外汇等金融市场的走势。...通过对通达信指标公式源码的详细解析,可以更好地理解该指标的计算公式和应用场景。
通达信源码指标公式黑马通道主附图公式.doc
通达信指标公式源码黄金阶梯附图指标是一个功能强大且复杂的技术指标,通过对其公式源码的详细解析,可以更好地理解该指标的计算逻辑和应用场景。该指标的应用可以帮助投资者更好地进行股票市场分析和风险管理。
筹码均线 通达信 源码 主图 附图通达信指标公式源码.doc
通达信蛟龙出海源码附图抓黑马.doc ...通达信蛟龙出海源码附图抓黑马.doc文件提供了一种完整的金融数据分析和交易策略解决方案,旨在帮助投资者更好地了解股票价格走势,识别黑马信号,并采取相应的交易操作。