Home > flash > lifegame

lifegame

  • Posted by: daniwell
  • 2008年3月19日 02:17
  • flash

AS2.0用ライフゲームのソースコード。
FLASH8以上なら、1frame目にまんまコピペで実行できます。

結構長くなってしまった。
短くするのはあんまり得意でないかも。

import flash.display.BitmapData;

var size :Number = 50;
var bmd :BitmapData = new BitmapData( size, size );
var mc :MovieClip = _root.createEmptyMovieClip( "m", 0 );
mc.attachBitmap( bmd, 0 );
mc._xscale = mc._yscale = 100 * Stage.width/size;

var aa :Array = new Array();
var ab :Array = new Array();

for ( var i = 0; i < size; i ++) {
	aa[ i ] = new Array();
	ab[ i ] = new Array();
}
function func_init ( ) {
	for ( var i = 0; i < size; i ++) {
		for ( k = 0; k < size; k ++) {
			if ( Math.random() < 0.2 ) {
				bmd.setPixel( k, i, 0x000000 );
				aa[ i ][ k ] = 1;
			} else {
				bmd.setPixel( k, i, 0xffffff );
				aa[ i ][ k ] = 0;
			}
		}
	}
}
func_init ( );

mc.onEnterFrame = function ( ) {
	for ( var i = 0; i < size; i ++ ) {
		for ( var k = 0; k < size; k ++ ) {
			var c :Number = 0;
			if ( aa[ i-1 ][ k-1 ] ) c++;	if ( aa[ i-1 ][ k ] ) c++;
			if ( aa[ i-1 ][ k+1 ] ) c++;	if ( aa[ i ][ k-1 ] ) c++;
			if ( aa[ i+1 ][ k-1 ] ) c++;	if ( aa[ i ][ k+1 ] ) c++;
			if ( aa[ i+1 ][ k+1 ] ) c++;	if ( aa[ i+1 ][ k ] ) c++;
			
			if ( c==3 || (aa[ i ][ k ] && c==2) )	ab[ i ][ k ] = 1;
			else	ab[ i ][ k ] = 0;			
			if ( ab[ i ][ k ] )	bmd.setPixel( k, i, 0x000000 );
			else	bmd.setPixel( k, i, 0xffffff );
		}
	}
	for ( var i = 0; i < size; i ++ )
		for ( var k = 0; k < size; k ++ )
			aa[ i ][ k ] = ab[ i ][ k ];
}
mc.onPress = function ( ) {
	func_init ( );
}

上のソースコードにはないけれど、
画面上をクリックでリセットできます。

Comments:0

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://www.papiness.com/blog/mt-tb.cgi/7
Listed below are links to weblogs that reference
lifegame from papi-blo

Home > flash > lifegame

Search
Feeds

Return to page top