诗词连线

package com{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.display.SimpleButton;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.geom.ColorTransform;
    import flash.display.Stage;

    public class Game extends MovieClip {

        private var startX:Number;
        private var startY:Number;

        private var hitMc:MovieClip;
        private var dragMc:MovieClip;
        private var eTarMc:MovieClip;
        private var newDrag:MovieClip;

        private var hitStr1:String;
        private var hitStr2:String;
        private var dragStr1:String;
        private var dragStr2:String;

        private var stepNum:Number;
        private var mcArr:Array;
        private var newArr:Array;
        private var XYArr:Array;
        private var newHitArr:Array;
        private var newDragArr:Array;
        private var rightArr:Array;
        private var rightNum:Number;


        private var emptyMc:MovieClip;
        private var thisMc:MovieClip;
        private var stageStage:Stage;

        private var dragRightNum:Number;//要拖对多少个以后才可以连线


        public function Game(_dragMc:MovieClip,_stage:Stage,_dragRightNum:Number) {
            dragMc=_dragMc;
            dragMc.buttonMode=true;
            stageStage=_stage;
            dragRightNum=_dragRightNum;
            dragMc.addEventListener(MouseEvent.MOUSE_UP,onClick);
            dragMc.addEventListener(MouseEvent.MOUSE_DOWN,onClick);
            newArr=[];
            XYArr=[[],[]];
            newHitArr=[];
            newDragArr=[];
            rightArr=[];
            stepNum=1;
            rightNum=1;

            thisMc=dragMc.parent as MovieClip;
            emptyMc=new MovieClip();
            thisMc.addChild(emptyMc);
            emptyMc.x=dragMc.x;
            emptyMc.y=dragMc.y;
            thisMc.setChildIndex(emptyMc,thisMc.getChildIndex(dragMc)-1);
        }
        //======================================================================================================================
        private var resetBtn:SimpleButton;
        private var hintBtn:SimpleButton;
        private var hintMc1:MovieClip;
        private var hintMc2:MovieClip;
        private var hintMc3:MovieClip;
        private var hintMc4:MovieClip;
        public function toolFun(_resetBtn:SimpleButton,_hintBtn:SimpleButton) {
            resetBtn=_resetBtn;
            hintBtn=_hintBtn;
            if (resetBtn.hasEventListener(MouseEvent.CLICK)==false) {
                hintBtn.addEventListener(MouseEvent.CLICK,onHint);
                resetBtn.addEventListener(MouseEvent.CLICK,onReset);
            }
        }
        private function onHint(e:MouseEvent) {
            var stepNum:Number;
            for (var n:uint=1; n<=dragRightNum; n++) {
                for (var i:uint=0; i<dragMc.numChildren; i++) {
                    stepNum=Number(dragMc.getChildAt(i).name.slice(3,4));
                    if (stepNum==n) {
                        var newMc:MovieClip=dragMc.getChildAt(i) as MovieClip;
                        if (newMc.mouseChildren==true) {
                            newArr.push(newMc.name);
                        }
                    }
                }
            }

            outFor:for (var k:uint=0; k<newArr.length; k++) {
                var lastNum:Number=Number(newArr[k].slice(3,4));
                for (var j:uint=0; j<newArr.length; j++) {
                    if (k!=j) {
                        if (lastNum==Number(newArr[j].slice(3,4))) {
                            hintMc1=MovieClip(dragMc.getChildByName(newArr[j]) as MovieClip).getChildAt(1) as MovieClip;
                            hintMc2=MovieClip(dragMc.getChildByName(newArr[k]) as MovieClip).getChildAt(1) as MovieClip;
                            hintMc3=MovieClip(dragMc.getChildByName(newArr[j]) as MovieClip).getChildAt(0) as MovieClip;
                            hintMc4=MovieClip(dragMc.getChildByName(newArr[k]) as MovieClip).getChildAt(0) as MovieClip;
                            var t:Timer=new Timer(300,4);
                            if (t.hasEventListener(TimerEvent.TIMER)==false) {
                                t.addEventListener(TimerEvent.TIMER,onT);
                            }
                            t.start();
                            function onT(e:TimerEvent) {
                                if (t.currentCount!=4) {
                                    MovieClip(hintMc4.parent).setChildIndex(hintMc4,MovieClip(hintMc4.parent).numChildren-1);
                                    MovieClip(hintMc3.parent).setChildIndex(hintMc3,MovieClip(hintMc3.parent).numChildren-1);
                                } else {
                                    MovieClip(hintMc1.parent).setChildIndex(hintMc1,MovieClip(hintMc1.parent).numChildren-1);
                                    MovieClip(hintMc2.parent).setChildIndex(hintMc2,MovieClip(hintMc2.parent).numChildren-1);
                                }
                                if (t.currentCount%2==0) {
                                    hintMc1.alpha=hintMc2.alpha=0;

                                    var a:ColorTransform=new ColorTransform();
                                    a.color=0x9F3D1B;
                                    hintMc3.transform.colorTransform=hintMc4.transform.colorTransform=a;
                                } else {
                                    hintMc1.alpha=hintMc2.alpha=1;

                                    var b:ColorTransform=new ColorTransform();
                                    b.color=0xFFFFFF;
                                    hintMc3.transform.colorTransform=hintMc4.transform.colorTransform=b;
                                }
                            }
                            break outFor;
                        }
                    }
                }
            }


            newArr=[];
        }

        private function onReset(e:MouseEvent) {
            var xyArrLength:Number=XYArr[0].length-1;
            newHitArr[xyArrLength].mouseEnabled=true;
            newHitArr[xyArrLength].mouseChildren=true;
            newDragArr[xyArrLength].mouseEnabled=true;
            newDragArr[xyArrLength].mouseChildren=true;
            newDragArr[xyArrLength].x=XYArr[0][xyArrLength];
            newDragArr[xyArrLength].y=XYArr[1][xyArrLength];
            XYArr[1].pop();
            XYArr[0].pop();
            newHitArr.pop();
            newDragArr.pop();

            for (var f:uint=0; f<newHitArr.length; f++) {
                newHitArr[f].mouseEnabled=false;
                newHitArr[f].mouseChildren=false;
                newDragArr[f].mouseEnabled=false;
                newDragArr[f].mouseChildren=false;
            }

        }

        //================================================================================
        private function onClick(e:MouseEvent) {

            if (e.type=="mouseDown") {
                eTarMc=e.target as MovieClip;
                newDrag=eTarMc.parent as MovieClip;

                startX=newDrag.x;
                startY=newDrag.y;

                if (newDragArr.length<dragRightNum) {
                    dragMc.setChildIndex(newDrag,dragMc.numChildren-1);
                    newDrag.startDrag();
                } else if (newDragArr.length==dragRightNum) {
                    dragMc.addEventListener(MouseEvent.MOUSE_MOVE,onMove);
                    stageStage.addEventListener(MouseEvent.MOUSE_UP,onClick);
                }

            } else if (e.type=="mouseUp"&&newDragArr.length<dragRightNum) {
                stopDrag();
                for (var i:uint=dragMc.numChildren-1; i>0; i--) {
                    if (newDrag.name=="drag") {
                        newDrag.x=startX;
                        newDrag.y=startY;
                    } else if (newDrag.hitTestObject(dragMc.getChildAt(i))&&newDrag.name!=dragMc.getChildAt(i).name) {

                        hitMc=dragMc.getChildAt(i) as MovieClip;
                        hitStr1=hitMc.name.slice(0,1);
                        hitStr2=hitMc.name.slice(1,2);

                        dragStr1=newDrag.name.slice(0,1);
                        dragStr2=newDrag.name.slice(1,2);

                        if (hitMc.name.slice(-4)=="sure"&&newDrag.name.slice(-4)=="sure"||hitStr1==dragStr1) {
                            newDrag.x=hitMc.x;
                            newDrag.y=hitMc.y;

                            hitMc.mouseEnabled=false;
                            hitMc.mouseChildren=false;
                            newDrag.mouseEnabled=false;
                            newDrag.mouseChildren=false;

                            newHitArr.push(hitMc);
                            newDragArr.push(newDrag);
                            XYArr[0].push(startX);
                            XYArr[1].push(startY);
                            if (newDragArr.length==dragRightNum) {
                                for (var f:uint=0; f<newHitArr.length; f++) {
                                    newHitArr[f].mouseEnabled=true;
                                    newHitArr[f].mouseChildren=true;
                                    newDragArr[f].mouseEnabled=true;
                                    newDragArr[f].mouseChildren=true;
                                }
                            }

                        } else {
                            newDrag.x=startX;
                            newDrag.y=startY;
                        }
                        break;
                    } else {
                        if (i==1) {
                            newDrag.x=startX;
                            newDrag.y=startY;
                        }
                    }
                }
            } else if (newDragArr.length>=dragRightNum) {
                dragMc.removeEventListener(MouseEvent.MOUSE_MOVE,onMove);
                stageStage.removeEventListener(MouseEvent.MOUSE_UP,onClick);
                if (rightNum!=15) {
                    init();
                    rightNum=1;
                } else {
                    init();
                    thisMc.nextFrame();
                }
                trace(rightNum);
            }

        }
        private function onMove(e:MouseEvent) {

            if (newDragArr.length>=dragRightNum) {
                for (var d:uint=0; d<newHitArr.length; d++) {
                    newHitArr[d].mouseEnabled=true;
                    newHitArr[d].mouseChildren=true;
                    newDragArr[d].mouseEnabled=true;
                    newDragArr[d].mouseChildren=true;
                }
                eTarMc=e.target as MovieClip;

                newDrag=eTarMc.parent as MovieClip;
                var eTarNum:Number=Number(eTarMc.name.slice(3));
                if (rightNum==eTarNum) {
                    //划线
                    if (rightNum==1) {
                        Line.LineStart(newDrag.x,newDrag.y);
                    } else {
                        Line.LineStop(newDrag.x,newDrag.y,emptyMc);
                    }
MyMusic.changeSound("诗词解谜点击音效");
                    rightNum++;
                    var mc0:MovieClip=newDrag.getChildAt(0) as MovieClip;
                    var mc1:MovieClip=newDrag.getChildAt(1) as MovieClip;

                    var b:ColorTransform=new ColorTransform();
                    b.color=0xFFFFFF;
                    mc0.transform.colorTransform=b;

                    for (var i:uint=0; i<newHitArr.length; i++) {
                        if (newDrag.hitTestObject(newHitArr[i])) {
                            var newHitMc:MovieClip=newHitArr[i];
                            var newHitMc0:MovieClip=newHitMc.getChildAt(0) as MovieClip;
                            var newHitMc1:MovieClip=newHitMc.getChildAt(1) as MovieClip;
                            newHitMc0.transform.colorTransform=b;
                            newHitMc1.alpha=1;
                            newHitMc.setChildIndex(newHitMc0,newHitMc.getChildIndex(newHitMc1));
                            break;
                        } else {
                            if (i==newHitArr.length -1) {
                                mc1.alpha=1;
                                newDrag.setChildIndex(mc0,newDrag.getChildIndex(mc1));
                            }
                        }
                    }
                } else if (eTarNum-rightNum>=2)  {
                    init();
                } else if (eTarNum==20) {
                    init();
                }
            }
        }
        private function init() {
            dragMc.removeEventListener(MouseEvent.MOUSE_MOVE,onMove);
            for (var h:uint=0; h<dragMc.numChildren; h++) {
                var backMc:MovieClip=dragMc.getChildAt(h) as MovieClip;//获取dragMc里面的mc
                var backMc0:MovieClip=new MovieClip();
                var backMc1:MovieClip=new MovieClip();

                if (backMc.getChildAt(0).name.slice(0,2)=="di") {
                    backMc0=backMc.getChildAt(0) as MovieClip;
                    backMc1=backMc.getChildAt(1) as MovieClip;
                } else {
                    backMc0=backMc.getChildAt(1) as MovieClip;
                    backMc1=backMc.getChildAt(0) as MovieClip;
                }
                backMc0.alpha=0;
                var c:ColorTransform=new ColorTransform();
                c.color=0x9F3D1B;
                backMc1.transform.colorTransform=c;
                backMc.setChildIndex(backMc0,backMc.numChildren-1);
            }

            for (var p:Number=0; p<emptyMc.numChildren; p++) {
                emptyMc.removeChildAt(p);
            }
        }
    }
}

 

posted on 2018-12-10 16:37  zqiang0803  阅读(203)  评论(0编辑  收藏  举报

导航