- 
[SWF(width=500, height=500)]
 - 
var canvasSize:int=stage.stageWidth;
 - 
var canvas:BitmapData=new BitmapData(canvasSize,canvasSize,false,0x000001);
 - 
addChild(new Bitmap(canvas, "auto", true));
 - 
var size:int=canvas.width*canvas.height - canvasSize;
 - 
var pixels:Vector.<uint>=canvas.getVector(canvas.rect);
 - 
for (var i:int = 0; i<canvasSize; i++) {
 - 
var xp:int=int(Math.random()*canvasSize);
 - 
var yp:int=int(Math.random()*canvasSize);
 - 
pixels[xp+yp*canvasSize]=0xFF000000;
 - 
}
 - 
var targetCol:uint=0xFF000000;
 - 
var buffer:Vector.<uint>=pixels.concat();
 - 
var fade:uint=1;
 - 
 - 
addEventListener(Event.ENTER_FRAME, onLoop);
 - 
function onLoop(evt:Event):void {
 - 
var curr:uint=targetCol;
 - 
var r:int = (curr>> 16) & 0xFF;
 - 
var g:int = (curr>> 8) & 0xFF;
 - 
var b:int=curr&0xFF;
 - 
r+=fade;
 - 
g+=fade;
 - 
b+=fade;
 - 
if (r>255) r=255;
 - 
if (g>255) g=255;
 - 
if (b>255) b=255;
 - 
var darker:uint=0xFF000000|r<<16|g<<8|b;
 - 
if (darker==0xFFFFFFFF) {
 - 
removeEventListener(Event.ENTER_FRAME, onLoop);
 - 
}
 - 
for (var i:int = canvasSize; i<size; i++) {
 - 
curr=pixels[i];
 - 
if (curr==targetCol) {
 - 
var index:int=i-canvasSize+int(Math.random()*3) - 1;
 - 
if (index>0) buffer[index]=darker;
 - 
if (int(Math.random()*50)==1) {
 - 
index=i-canvasSize+int(Math.random()*3)-1;
 - 
if (index>0) buffer[index]=darker;
 - 
}
 - 
}
 - 
}
 - 
targetCol=darker;
 - 
canvas.lock();
 - 
canvas.setVector(canvas.rect, buffer);
 - 
pixels=buffer.concat();
 - 
canvas.unlock();
 - 
}
 
This snippet uses setVector() to draw something that looks like this:

This is a cellular automaton. It has kind of a strange rule set - but you could easily use this snippet to do more traditional cellular automata.