flash on 2012-10-8

by yurij.shaulov
♥0 | Line 177 | Modified 2012-10-08 02:28:35 | MIT License
play

ActionScript3 source code

/**
 * 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];

        }

    }

}