/**
* Copyright yurij.shaulov ( http://wonderfl.net/user/yurij.shaulov )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/rLAm
*/
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.text.TextField;
public class n extends Sprite
{
private var jw:Array=new Array();
private var g:Sprite;
private var s:Sprite=new Sprite();
private var pr:int = -10;
private var pc:int = -10;
private var cl:Array = new Array(0xFF0000,0xFF00,0xFF,0XFFFF00,0xFF00FF,0xFFFF,0xFFFFFF);
private var cp:Boolean = false;
private var ts:TextField=new TextField();
private var th:TextField=new TextField();
private var sc:uint = 0;
private var m:uint = 0;
public function n()
{
addChild(ts);
ts.textColor = 0xFFFFFF;
ts.x = 500;
addChild(th);
th.textColor = 0xFFFFFF;
th.x = 550;
for (var i:uint=0; i<8; i++)
{
jw[i]=new Array();
for (var j:uint=0; j<8; j++)
{
do
{
jw[i][j] = Math.floor(Math.random() * 7);
} while (rk(i,j)>2||ck(i,j)>2);
g=new Sprite();
g.graphics.beginFill(cl[jw[i][j]]);
g.graphics.drawCircle(30,30,29);
g.graphics.endFill();
g.name = i + "_" + j;
g.x = j * 60;
g.y = i * 60;
addChild(g);
}
}
addChild(s);
s.graphics.lineStyle(2,0xff0000,1);
s.graphics.drawRect(0,0,60,60);
s.visible = false;
stage.addEventListener(MouseEvent.CLICK,ci);
//addEventListener(Event.ENTER_FRAME,ef);
}
private function ci(e:MouseEvent):void
{
if (cp)
{
if (mouseX<480&&mouseX>0&&mouseY<480&&mouseY>0)
{
var sr:uint=Math.floor(mouseY/60);
var sc:uint=Math.floor(mouseX/60);
if (!(((sr==pr+1||sr==pr-1)&&sc==pc)||((sc==pc+1||sc==pc-1)&&sr==pr)))
{
pr = sr;
pc = sc;
s.x = 60 * pc;
s.y = 60 * pr;
s.visible = true;
}
else
{
swp(pr,pc,sr,sc);
if (rk(pr,pc)>2||ck(pr,pc)>2||rk(sr,sc)>2||ck(sr,sc)>2)
{
th.text = "";
cp = false;
getChildByName(pr+"_"+pc).x=sc*60;
getChildByName(pr+"_"+pc).y=sr*60;
getChildByName(pr+"_"+pc).name="t";
getChildByName(sr+"_"+sc).x=pc*60;
getChildByName(sr+"_"+sc).y=pr*60;
getChildByName(sr+"_"+sc).name=pr+"_"+pc;
getChildByName("t").name = sr + "_" + sc;
}
else
{
swp(pr,pc,sr,sc);
}
pr = -10;
pc = -10;
s.visible = false;
}
}
else
{
for (var i:uint=0; i<8; i++)
{
for (var j:uint=0; j<8; j++)
{
if (i<7)
{
swp(i,j,i+1,j);
if ((rk(i,j)>2||ck(i,j)>2||rk(i+1,j)>2||ck(i+1,j)>2))
{
th.text = i.toString() + "," + j.toString() + "->" + (i + 1).toString() + "," + j.toString();
}
swp(i,j,i+1,j);
}
if (j<7)
{
swp(i,j,i,j+1);
if ((rk(i,j)>2||ck(i,j)>2||rk(i,j+1)>2||ck(i,j+1)>2) )
{
th.text = i.toString()+","+j.toString()+"->"+(i).toString()+","+(j+1).toString();
}
swp(i,j,i,j+1);
}
}
}
}
}
}
private function swp(r1:uint,c1:uint,r2:uint,c2:uint):void
{
var t:uint = jw[r1][c1];
jw[r1][c1] = jw[r2][c2];
jw[r2][c2] = t;
}
private function rk(r:uint,c:uint):uint
{
var u:uint = jw[r][c];
var stk:uint = 1;
var t:int = c;
while (chk(u,r,t-1))
{
t--;
stk++;
}
t = c;
while (chk(u,r,t+1))
{
t++;
stk++;
}
return (stk);
}
private function ck(r:uint,c:uint):uint
{
var u:uint = jw[r][c];
var stk:uint = 1;
var t:int = r;
while (chk(u,t-1,c))
{
t--;
stk++;
}
t = r;
while (chk(u,t+1,c))
{
t++;
stk++;
}
return (stk);
}
private function chk(g:uint,r:int,c:int):Boolean
{
if (jw[r] == null)
{
return false;
}
if (jw[r][c] == null)
{
return false;
}
return g==jw[r][c];
}
}
}