Google DevFest 2010 Patch
/**
* 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;
}
}