==========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;
}
}
}