forked from: 自作乱数
らんすうのおべんきょう
<del>乱数から出てくる値を固定したかったんだけど、全然乱数にならなかったっていうお話。</del>
参考:よい乱数・悪い乱数
http://www001.upp.so-net.ne.jp/isaku/rand.html
乱数生成をXorShiftとかいうのにしてみたらうまくいった。
参考: http://meme.biology.tohoku.ac.jp:16080/klabo-wiki/index.php?%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%ECC%2B%2B#y919a7e1
// forked from South's 自作乱数
/*
らんすうのおべんきょう
<del>乱数から出てくる値を固定したかったんだけど、全然乱数にならなかったっていうお話。</del>
参考:よい乱数・悪い乱数
http://www001.upp.so-net.ne.jp/isaku/rand.html
乱数生成をXorShiftとかいうのにしてみたらうまくいった。
参考: http://meme.biology.tohoku.ac.jp:16080/klabo-wiki/index.php?%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%C0%B8%ECC%2B%2B#y919a7e1
*/
package {
import flash.display.Sprite;
import flash.events.*;
import flash.display.*;
public class FlashTest extends Sprite {
private var bmp:Bitmap;
private var bmpData:BitmapData;
public function FlashTest() {
bmpData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000);
bmp = new Bitmap(bmpData);
addChild(bmp);
addEventListener(Event.ENTER_FRAME, update);
Rand.srand(100);
}
private function update(e:Event):void
{
var x:uint, y:uint, color:uint;
bmpData.lock();
for (var i:uint=0; i<2000; i++) {
//書き込み先座標
//自作乱数で決定する
x = Rand.rand() % stage.stageWidth;
y = Rand.rand() % stage.stageHeight;
//Math.random()で決定する
/*
x = Math.random()*stage.stageWidth;
y = Math.random()*stage.stageHeight;
*/
//描いてある色を取得
color = bmpData.getPixel(x, y);
//色を加算 (16回同じ座標が処理されると色が(ほとんど)戻る)
color += 0x111111;
//書き込む
bmpData.setPixel(x, y, color);
}
bmpData.unlock();
}
}
}
class Rand
{
private static var seed:Array = new Array(4);
public function Rand():void
{
srand(0);
}
public static function rand():uint
{
var t:uint = (seed[0]^(seed[0]<<11));
seed[0] = seed[1];
seed[1] = seed[2];
seed[2] = seed[3];
return ( seed[3]=(seed[3]^(seed[3]>>19))^(t^(t>>8)) );
}
public static function srand(s:uint):void
{
for (var i:uint=0; i<4; i++) {
seed[i]=s=1812433253*(s^(s>>30))+i;
}
}
}