flash on 2010-7-28
...
@author enecre
♥0 |
Line 107 |
Modified 2010-07-29 21:47:10 |
MIT License
archived:2017-03-20 05:37:28
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;
}
}