flash on 2010-7-28

by enecre
...
@author enecre
♥0 | Line 107 | Modified 2010-07-29 21:47:10 | MIT License
play

ActionScript3 source code

/**
 * Copyright enecre ( http://wonderfl.net/user/enecre )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/dGAs
 */

package 
{
    import flash.text.TextFieldAutoSize;
    import flash.text.TextField;
    import flash.display.Sprite;
    import flash.events.Event;
    import com.bit101.components.*;
    import com.bit101.charts.*;
    
    /**
     * ...
     * @author enecre
     */
    public class AnteidanHendou extends Sprite 
    {
        private var _tf:TextField;
        
        private var odds1:Number;
        private var odds2:Number;
        private var odds3:Number;
        private var odds4:Number;
        
        private var numPlay:int = 1000;
        private var numSimulate:int = 5000;
        
        private var heijunData:Array;
        private var anteidanData:Array = [];
        
        private var progress:int = 0;
        private var progressbar:ProgressBar;
        
        private const hendou:Array = [null, 90, 45, 0, -135];
        
        public function AnteidanHendou():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private function init(e:Event = null):void {
            _tf = new TextField();
            _tf.width = stage.stageWidth;
            _tf.height = stage.stageHeight;
            _tf.text = "";
            addChild(_tf);
            
            progressbar = new ProgressBar(this);
            progressbar.x = stage.stageWidth / 2 - progressbar.width / 2;
            progressbar.y = stage.stageHeight / 2 - progressbar.height /2;
            
            odds1 = 0.25;
            odds2 = 0.25;
            odds3 = 0.25;
            odds4 = 0.25;
            var l:int = numSimulate;
            heijunData = new Array(110);
            for (var i:int = 0; i < heijunData.length; i++){
                heijunData[i] = 0;
            }


            tr(heijunData);
            addEventListener(Event.ENTER_FRAME,start);
            addEventListener("end",function():void{
                tr(heijunData);
                addChart(heijunData,0);
            });
            
        }
        
        private function start(e:Event):void 
        {
            var l:int = numPlay;
            var num1st:Number = 0;
            var num2nd:Number = 0;
            var num3rd:Number = 0;
            var num4th:Number = 0;
            
            for (var i:int = 0; i < l; i++ ) {
                switch(juni()){
                    case 0:num1st++;break;
                    case 1:num2nd++;break;
                    case 2:num3rd++;break;
                    case 3:num4th++;break;
                }
            }
            tr(int((num1st + num2nd*2 + num3rd*3 + num4th*4)/numPlay*100)/100);
            var heijun:int = int((num1st + num2nd*2 + num3rd*3 + num4th*4)/numPlay*100)-200;
            try{heijunData[heijun] += 1;}catch(e:Error){tr("error");};
            progress++;
            progressbar.value = progress / numSimulate;
           if(progress == numSimulate){
               removeEventListener(Event.ENTER_FRAME,start);
               dispatchEvent(new Event("end"));
           }
        }
        
        private function juni():int {
            var rand:Number = Math.random();
            var jun:int = 0;
            if (rand >= odds1) jun++;
            if (rand >= odds1 + odds2) jun++;
            if (rand >= odds1 + odds2 + odds3) jun++;
            return jun;
        }
        
        private function addChart(data:Array, y:int):void{
            var linechart:LineChart = new LineChart(this, 0, 0, data);
            linechart.x = stage.stageWidth / 2 - linechart.width / 2;
            linechart.y = stage.stageHeight / 2 - linechart.height / 2;
            linechart.showScaleLabels = true;
        }
        
        private function tr(...o):void{
            _tf.appendText(o + "\n");
            _tf.scrollV = _tf.maxScrollV;
        }

    }
    
}

class Utils{
    public static function average(array:Array):Number{
        var length:int = array.length;
        var sum:Number = 0;
        for(var i:int = 0; i < length; i++){
            sum += array[i];
        }
        return sum / length;
    }
}

Forked