In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

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

Google DevFest 2010 Patch

Get Adobe Flash player
by mayahiro 28 Mar 2010
/**
 * Copyright mayahiro ( http://wonderfl.net/user/mayahiro )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/xvk8
 */

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	
        [SWF(width=300, height=300, backgroundColor="#FFFFFF", frameRate=60)]

	public class Main extends Sprite 
	{
		private const _size:int = 50;
		
		private var _source:Array;
		
		private var _target1:Array;
		private var _target2:Array;
		private var _type:int;
		private var _biggestGroup:int;
		private var _biggestSize:int;
		private var _currentGroup:int;
		private var _currentSize:int;
		
		private var _currentTargets:Array;
		
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			_source = [];
			for (var i:int = 0; i < _size; i++) 
			{
				_source.push([]);
				for (var j:int = 0; j < _size; j++)
				{
					_source[i].push(new Target(i, j, Math.random() * 2 < 1.2 ? 0 : 1));
					_source[i][j].x = i * 6;
					_source[i][j].y = j * 6;
					addChild(_source[i][j]);
				}
			}
			
			addEventListener(MouseEvent.CLICK, onClick);
		}
		
		private function onClick(e:MouseEvent):void 
		{
			_target1 = [];
			_target2 = [];
			
			for (var i:int = 0; i < _size; i++) 
			{
				for (var j:int = 0; j < _size; j++)
				{
					_target1[i + (j *_size)] = _source[i][j];
				}
			}
			
			_type = _target1[0].getType();
			_biggestGroup = 0;
			_biggestSize = 0;
			_currentGroup = 0;
			
			addEventListener(Event.ENTER_FRAME, onEnterFrame2);
		}
		
		private function onEnterFrame2(e:Event):void 
		{
			var currentTarget:Target;
			if (_target2.length != 0)
			{
				currentTarget = _target2.pop();
			}
			else
			{
                                if (_currentTargets != null)
				{
					var len:int = _currentTargets.length;
					for (var k:int = 0; k < len; k++)
					{
						_currentTargets[k].toDarkGreen();
					}
				}
				if (_target1.length != 0)
				{
					_currentTargets = [];
					
					if (_biggestSize < _currentSize)
					{
						_biggestGroup = _currentGroup;
						_biggestSize = _currentSize;
					}
					currentTarget = _target1.pop();
					_type = currentTarget.getType();
					_currentSize = 0;
					_currentGroup++;
				}
				else
				{
                                        removeEventListener(Event.ENTER_FRAME, onEnterFrame2);
					for (var i:int = 0; i < _size; i++) 
					{
						for (var j:int = 0; j < _size; j++)
						{
							if (_source[i][j].group == _biggestGroup)
							{
								_source[i][j].toBlack();
							}
						}
					}
                                        return;
				}
			}
			
			if (currentTarget.isChecked())
			{
				return;
			}
			
			if (currentTarget.check(_type))
			{
				currentTarget.group = _currentGroup;
				_currentSize++;
				_currentTargets[_currentTargets.length] = currentTarget;
				
				if ((currentTarget.px + 1) < _size)
				{
					_target2[_target2.length] = _source[currentTarget.px + 1][currentTarget.py];
				}
				if ((currentTarget.py + 1) < _size)
				{
					_target2[_target2.length] = _source[currentTarget.px][currentTarget.py + 1];
				}
				if ((currentTarget.px - 1) >= 0)
				{
					_target2[_target2.length] = _source[currentTarget.px - 1][currentTarget.py];
				}
				if ((currentTarget.py - 1) >= 0)
				{
					_target2[_target2.length] = _source[currentTarget.px][currentTarget.py - 1];
				}
			}
		}
	}
}

import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Point;
class Target extends Sprite
{
    private var _checked:Boolean;

    private var _type:int;

    public var px:int;
    public var py:int;
    
    public var group:int;
		
    public function Target(ax:int, ay:int, type:int) 
    {
	px = ax;
	py = ay;
	_checked = false;
	_type = type;
	
	var fillColor:uint = 0;
	switch(type) {
	    case 0:
		fillColor = 0xFF0000;
		break;
	    case 1:
		fillColor = 0x0000FF;
		break;
	}
	graphics.beginFill(fillColor);
	graphics.drawRect(0, 0, 6, 6);
	graphics.endFill();
    }
    
    public function check(type:int):Boolean
    {
	if (_type != type)
	{
	    return false;
			}
			
			_checked = true;
			
			graphics.clear();
			graphics.beginFill(0x00FF00);
			graphics.drawRect(0, 0, 6, 6);
			graphics.endFill();
			
			return true;
		}
		
		public function toBlack():void
		{
			graphics.clear();
			graphics.beginFill(0x000000);
			graphics.drawRect(0, 0, 6, 6);
			graphics.endFill();
		}
		
		public function toDarkGreen():void
		{
			graphics.clear();
			graphics.beginFill(0x006400);
			graphics.drawRect(0, 0, 6, 6);
			graphics.endFill();
		}
		
		public function isChecked():Boolean
		{
			return _checked;
		}
		
		public function getType():int
		{
			return _type;
		}
	}