forked from: flash on 2010-7-28
forked from flash on 2010-7-28 (diff: 37)
... @author enecre
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;
}
}
