==========Main文档类========== package { import flash.display.Sprite; import com.RectShape; import flash.events.MouseEvent; public class Main extends Sprite { private var indexshape:Array=new Array(1,2,3,4,5,6,7,8);//矩形上的8个编号 private var ditu:Array=new Array(new Array(3),new Array(3),new Array(3)); //小方块的坐标编号,1代表坐标编号位上没有小方块,0代表坐标编号位上有小方块 private var pailie:Array=new Array(new Array(0,0),new Array(40,0),new Array(80,0),new Array(0,40),new Array(40,40),new Array(80,40),new Array(0,80),new Array(40,80),new Array(80,80)); //小方块的坐标 public function Main():void { init(); } private function init():void { var kuang:Sprite=new Sprite(); kuang.graphics.lineStyle(3,0xff0000); kuang.graphics.drawRect(0,0,120,120); kuang.graphics.endFill(); kuang.x=215; kuang.y=140;//设置大方框位置在舞台中间 addChild(kuang); for (var i:uint=0; i<3; i++) { for (var t:uint=0; t<3; t++) { ditu[i][t]=1; } }//初始化小方块坐标编号均为1 //初始化8个小方块位置 for (var n:uint=1; n<=8; n++) { //随机抽取一个indexshape数组的元素,将它设置为一个小方块的编号 var hao:uint=Math.floor(Math.random()*indexshape.length);//随机抽取得到数组indexshape的一个索引号(0~7) var bianhao:uint=indexshape[hao];//得到上面随机抽取的索引号对应的indexshape数组的元素 indexshape.splice(hao,1);//删除已经抽取的元素,indexshape剩下7个元素,下次从这7个元素中抽取,依次递减 var rect:RectShape=new RectShape(bianhao); rect.mouseChildren=false;//小方块里的文本框和小方块刚好是重合的,此处设置点击到文本框,不处罚鼠标事件,目的是只让小方块接收鼠标事件 //通过随机得到一个坐标,随机得到一个位置的小方块,以便让这个小方块具有上面随机抽到的编号 var weizhi:uint=Math.floor(Math.random()*pailie.length); var dui:Array=pailie[weizhi]; pailie.splice(weizhi,1); rect.x=dui[0]; rect.y=dui[1]; rect.X=dui[0]/40; rect.Y=dui[1]/40; kuang.addChild(rect); ditu[dui[0]/40][dui[1]/40]=0; rect.addEventListener(MouseEvent.CLICK,dong); } } private function dong(evt:MouseEvent):void { //当前被点击的小方块左右上下四个位置的xzuobiao、yzuobiao var zuo:uint=evt.target.X-1; var you:uint=evt.target.X+1; var shang:uint=evt.target.Y-1; var xia:uint=evt.target.Y+1; if (zuo!=4294967295&&ditu[zuo][evt.target.Y]==1) { ditu[evt.target.X][evt.target.Y]=1; evt.target.X=zuo; evt.target.x-=40; //判断当前小方块左边位置是否有小方块,如果没有,就将小方块当前位置设置为没有小方块状态,即坐标编号为1;并将小方块向左平移1个位置;同时将它的x坐标减去40 } else if (you!=3&&ditu[you][evt.target.Y]==1) { ditu[evt.target.X][evt.target.Y]=1; ditu[you][evt.target.Y]=0; evt.target.X=you; evt.target.x+=40; } else if (shang!=4294967295&&ditu[evt.target.X][shang]==1) { ditu[evt.target.X][evt.target.Y]=1; ditu[evt.target.X][shang]=0; evt.target.Y=shang; evt.target.y-=40; } else if (xia!=3&&ditu[evt.target.X][xia]==1) { ditu[evt.target.X][evt.target.Y]=1; ditu[evt.target.X][xia]=0; evt.target.Y=xia; evt.target.y+=40; } } } } ==========RectShape小方块类========== package com{ //RectShape类在com包中 import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFieldAutoSize; public class RectShape extends Sprite { private var xzuobiao:uint; private var yzuobiao:uint; public function RectShape(indexs):void { init(indexs); } private function init(index):void { this.graphics.beginFill(0x00ff00); this.graphics.lineStyle(1,0x000000,1); this.graphics.drawRect(0,0,40,40); this.graphics.endFill(); var txt:TextFormat=new TextFormat(); txt.size=30; var num_txt:TextField=new TextField(); num_txt.selectable=false; num_txt.text=String(index); num_txt.width=40; num_txt.height=40;//文本框大小刚好和上面绘制的矩形一样大 num_txt.x=0; num_txt.y=0; num_txt.setTextFormat(txt); num_txt.autoSize=TextFieldAutoSize.CENTER; this.addChild(num_txt); } public function get X():uint { return xzuobiao; } public function set X(n:uint):void { xzuobiao=n; } public function get Y():uint { return yzuobiao; } public function set Y(n:uint):void { yzuobiao=n; } } }