スポンサーサイト

-------- | --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[ActionScript 3.0]LifeGame

2007-08-09 | 20:32

Life Game

ライフゲームとは

ソースコード(毎回すべてのセルをチェックしているので、アルゴリズム的には最も効率が悪いやり方である)
package {
    import flash.display.*;
    import flash.utils.Timer;
    import flash.events.*;

    [SWF(width="400", height="400", backgroundColor="#ffffff")]
    public class LifeGame2 extends Sprite {
        private var _COLUMS:int = 100;
        private static var _RADIUS:Number = 2;
        private var _cells:Array = new Array();

        public function LifeGame2( ) {
            var cell_count:int = _COLUMS * _COLUMS;
            for(var i:int = 0 ; i < cell_count; i++){
                var x:int = Math.random() * 10;
                _cells.push(x%2);
            }
            draw(false);
            var t:Timer = new Timer(1500);
            t.addEventListener(TimerEvent.TIMER, function(e:Event):void{draw();});
            t.start();
        }

        private function draw(cal:Boolean = true):void{
            var old_cells:Array = _cells.concat();
            graphics.clear();
            for(var y:int = 0 ; y < _COLUMS ; y++){
                for(var x:int = 0 ; x < _COLUMS ; x++){
                    var ix:int = y * _COLUMS + x;
                    if(cal){
                        var alive_cnt:int = 0;
                        // 周りの8セルをチェック
                        for(var yy:int = y - 1 ; yy <= y+1 ; yy++){
                            for(var xx:int = x - 1 ; xx <= x+1 ; xx++){
                                var check_ix:int = yy*_COLUMS + xx;
                                if(!(xx == x && yy == y) &&  // not myself
                                        yy >= 0 && yy < _COLUMS &&
                                        xx >= 0 && xx < _COLUMS){
                                    if(old_cells[check_ix]){
                                        alive_cnt++;
                                    }
                                }
                            }
                        }
                        if(_cells[ix]){
                            if(alive_cnt != 2 && alive_cnt != 3){
                                _cells[ix] = false;
                            }
                        }else{
                            if(alive_cnt == 3){
                                _cells[ix] = true;
                            }
                        }
                    }
                    if(_cells[ix]){
                        graphics.beginFill( 0x0000ff );
                        graphics.drawCircle(x*_RADIUS*2+_RADIUS, y*_RADIUS*2+_RADIUS, _RADIUS);
                        graphics.endFill();
                    }
                }
            }
        }
    }
}
スポンサーサイト

Comment

Post a comment

Secret

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。