forked from: flash on 2010-7-28

by enecre forked from flash on 2010-7-28 (diff: 37)
...
@author enecre
♥0 | Line 106 | Modified 2010-07-29 17:03:52 | 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/oYei
 */

// forked from enecre's flash on 2010-7-28
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
     */
    [SWF(frameRate=60)]
    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 a:Number;
        private var b:Number;
        
        private var numPlay:int = 200;
        private var numSimulate:int = 1000;
        
        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];
        private const next:Event = new Event("next");
        
        
        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;
            a = odds1 + odds2; b = a + odds3;
            var l:int = numSimulate;
            heijunData = new Array(110);
            for (var i:int = 0; i < heijunData.length; i++){
                heijunData[i] = 0;
            }
            addEventListener("next",start);
            addEventListener("end",function():void{
                tr(heijunData);
                addChart(heijunData,0);
            });
            tr("start");
            start();
            tr("end");
        }
        
        private function start(e:Event=null):void 
        {
            var l:int = numPlay;
            var data:Array = [0,0,0,0];
            
            while(l--)data[juni()]++;
            var heijun:int = int((data[0] + data[1]*2 + data[2]*3 + data[3]*4)/numPlay*100)-200;
            try{heijunData[heijun] += 1;}catch(e:Error){tr("error");};
            progress++;
            progressbar.value = progress / numSimulate;
            tr("hello");
           if(progress == numSimulate){
               tr("hello");
               removeEventListener(Event.ENTER_FRAME,start);
               dispatchEvent(new Event("end"));
           }
           else dispatchEvent(next);
        }
        
        private function juni():int {
            var rand:Number = Math.random();
            var jun:int = 0;
            if (rand >= odds1) jun++;
            if (rand >= a) jun++;
            if (rand >= b) 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;
    }
}