Dead Code Preservation :: Archived AS3 works from wonderfl.net

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
Get Adobe Flash player
by South 11 Mar 2009
// 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;
        }
    }    
}