<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600" xmlns:UI="UI.*" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.containers.Canvas;
import mx.containers.Tile;
import mx.controls.Spacer;
import mx.controls.Text;
import mx.messaging.AbstractConsumer;
private var Can:UIComponent; //定义容器
private var loader:Loader=new Loader();
private var bit:Bitmap;
private var bitdata:BitmapData;
private var Canpanduan:Sprite;
private var sj:int=0;
private var lineSprite:Sprite=new Sprite();//定义网格
private var ROWS:int=4; //定义行与列
private var tileWidth:int; //定义方块高宽
private var tileHeight:int;
private var arrImg:Array=[]; //定义碎片数组
private var arrImgs:Array=[];//图片切换数组
private var arrFlag:Array=[]; //判断数组
protected function ChangeImage_clickHandler(event:MouseEvent):void //图片切换
{
sj=(sj+1)%11;
arrImgs=["images/1.jpg","images/2.jpg","images/3.jpg","images/4.jpg","images/5.jpg","images/6.jpg","images/7.jpg","images/8.jpg","images/9.jpg","images/10.jpg","images/11.jpg"];
loader.load(new URLRequest(arrImgs[sj]));
UIdatu.addChild(loader);
ROWSCOUNT.text=ROWS+"X"+ROWS;
}
private function init():void //加载背景图
{
loader.load(new URLRequest("images/1.jpg"));
UIdatu.addChild(loader);
}
private function MousedownHandler(event:MouseEvent):void //鼠标按下
{
Canpanduan=Sprite(event.target); //当前选中
Canpanduan.alpha=0.5;
var topPosition:uint=UI2.numChildren -1; //图片层次上调
UI2.setChildIndex(Canpanduan,topPosition);
Canpanduan.startDrag();
Canpanduan.addEventListener(MouseEvent.MOUSE_UP,MouseUpHandler);
Canpanduan.addEventListener(MouseEvent.MOUSE_MOVE,MousemoveHandler);
}
private function MouseUpHandler(event:MouseEvent):void //最后判断 拼图过程
{
Canpanduan=Sprite(event.target);
Canpanduan.stopDrag();
Canpanduan.alpha=1;
var tileX:int=int(Canpanduan.name)%ROWS*tileWidth;
var tileY:int=int(int(Canpanduan.name)/ROWS)*tileHeight;
if(((tileX-Canpanduan.x)<10&&(tileX-Canpanduan.x)>-10)&&((tileY-Canpanduan.y)<10&&(tileY-Canpanduan.y)>-10)) //方块与边线距离
{
Canpanduan= Sprite(event.target);
Canpanduan.stopDrag();
Canpanduan.x=tileX; //定义现在方块坐标
Canpanduan.y=tileY;
UI2.removeChild(Canpanduan);
UIFinal.addChild(Canpanduan);
UILast.addChild(UIFinal);
arrFlag.push("")
Canpanduan.removeEventListener(MouseEvent.MOUSE_UP,MouseUpHandler);
Canpanduan.removeEventListener(MouseEvent.MOUSE_MOVE,MousemoveHandler);
Canpanduan.removeEventListener(MouseEvent.MOUSE_DOWN,MousedownHandler);
}
if(arrFlag.length==ROWS*ROWS)
{
succeed.visible=true;
}
}
private function MousemoveHandler(event:MouseEvent):void
{
}
private function BtnStart_clickHandler(event:MouseEvent):void
{
//画线事件
UI2=new UIComponent();
UIFinal=new UIComponent();
//鼠标单击
needImage.enabled=true;
red.enabled=false;
add.enabled=false;
ChangeImage.enabled=false;
UIdatu.visible=false;
Lab.visible=true;
BtnStart.visible=false;
BtnReset.visible=true;
UIxiaotu.visible=true;
this.bit=Bitmap(loader.content);
this.tileWidth=this.bit.width/ROWS;
this.tileHeight=this.bit.height/ROWS;//定义宽高
this.bitdata=this.bit.bitmapData;
//定义提示小图
var bitdataSmall:BitmapData=this.bitdata.clone();
var bitSmall:Bitmap=new Bitmap(bitdataSmall);
UIxiaotu.addChild(bitSmall);
bitSmall.scaleX=0.3;
bitSmall.scaleY=0.3;
bitSmall.x=850;
bitSmall.y=40;
for(var i:int=0;i<ROWS;i++) //行
{
for(var j:int=0;j<ROWS;j++) //列
{
//纵向分割
lineSprite.graphics.lineStyle(1,0x000000,0.8); //线的格式
lineSprite.graphics.moveTo(0,0);//坐边线
lineSprite.graphics.lineTo(0 ,bit.height);
lineSprite.graphics.moveTo(0,0); //右边线
lineSprite.graphics.lineTo(bit.width,0);
lineSprite.graphics.moveTo(bit.x + tileWidth*(i+1) , bit.y); //整体分割线
lineSprite.graphics.lineTo(bit.x + tileWidth*(i+1) , bit.y + bit.height);
//横向分割
lineSprite.graphics.moveTo(bit.x , bit.y + tileHeight*(i+1));
lineSprite.graphics.lineTo(bit.x + bit.width , bit.y + tileHeight*(i+1));
rectCanvas.addChild(lineSprite);
var rectBitmapdata:BitmapData=new BitmapData(tileWidth,tileHeight,true,0xff0000); // 切小块,宽高
var bitarr:ByteArray = bitdata.getPixels(new Rectangle(j * tileWidth, i * tileHeight, tileWidth, tileHeight)); //切出小块
bitarr.position=0; //索引为0 第一个位置
rectBitmapdata.setPixels(new Rectangle(0,0,tileWidth,tileHeight),bitarr);
var bitmap:Bitmap=new Bitmap(rectBitmapdata);
Can= new UIComponent(); //新建容器
Can.addChild(bitmap);
arrImg.push(Can);
Can.name=String(i*ROWS+j);//单个方块起名
Can.x=Math.random()*200+800;
Can.y=Math.random()*200+200;
UI2.addChild(Can);
UIxiaotu.addChild(UI2);
Can.addEventListener(MouseEvent.MOUSE_DOWN,MousedownHandler);
}
}
}
private function BtnReset_clickHandler(event:MouseEvent):void //重新开始
{
arrFlag=new Array();
needImage.enabled=false;
UILast.removeChild(UIFinal);
UIdatu.visible=true;
succeed.visible=false;
UIdatu.alpha=1;
red.enabled=true;
add.enabled=true;
Lab.visible=false;
UIxiaotu.visible=false;
BtnStart.visible=true;
BtnReset.visible=false;
ChangeImage.enabled=true;
UIxiaotu.removeChild(UI2);
lineSprite.graphics.clear();
}
protected function add_clickHandler(event:MouseEvent):void //递增行列数
{
if(ROWS>3)
{
ROWS--;
}
ROWSCOUNT.text=ROWS+"X"+ROWS;
}
protected function red_clickHandler(event:MouseEvent):void //递减行列数
{
if(ROWS<8)
{
ROWS++;
}
ROWSCOUNT.text=ROWS+"X"+ROWS;
}
protected function needImage_clickHandler(event:MouseEvent):void //需要背景图片按钮
{
UIdatu.visible=true;
UIdatu.alpha=0.25;
needImage.visible=false;
NoneedImage.visible=true;
}
protected function NoneedImage_clickHandler(event:MouseEvent):void //不需要背景图片按钮
{
UIdatu.visible=false;
needImage.visible=true;
NoneedImage.visible=false;
}
]]>
</mx:Script>
<mx:Panel x="52" y="48" width="1300" height="750" layout="absolute" title="拼图游戏" fontSize="15">
<mx:Canvas x="10" y="10">
<mx:UIComponent x="0" y="0" id="UIdatu">
</mx:UIComponent>
<mx:UIComponent x="0" y="0" id="UI2" >
</mx:UIComponent>
<mx:UIComponent id="UIFinal" x="0" y="0">
</mx:UIComponent>
<mx:UIComponent id="UILast" x="0" y="0">
</mx:UIComponent>
<mx:UIComponent x="0" y="0" id="UIxiaotu" >
</mx:UIComponent>
<mx:UIComponent x="0" y="0" id="rectCanvas">
</mx:UIComponent>
<mx:Button x="614" y="631" label="开始游戏" width="100" height="28" id="BtnStart" click="BtnStart_clickHandler(event)" fontSize="15"/>
<mx:Button x="615" y="631" label="在玩一遍" width="100" height="28" id="BtnReset" click="BtnReset_clickHandler(event)" fontSize="15" visible="false"/>
<mx:Label x="850" y="10" text="提示图" fontSize="20" color="#FF0000" id="Lab" visible="false"/>
<mx:Label x="195" y="208" text="恭喜你 过关了!!" width="400" height="83" fontSize="50" color="#FF0000" id="succeed" visible="false"/>
<mx:TextArea x="326" y="631" height="22" id="ROWSCOUNT" text="4X4" enabled="false"/>
<mx:Button x="10" y="631" label="不需要背景图" fontSize="15" id="NoneedImage" click="NoneedImage_clickHandler(event)" visible="false" />
<mx:Button x="494" y="631" label="+" id="red" click="red_clickHandler(event)"/>
<mx:Button x="542" y="631" label="-" id="add" click="add_clickHandler(event)"/>
<mx:Button x="10" y="631" label="需要背景图" fontSize="15" id="needImage" click="needImage_clickHandler(event)" enabled="false" />
<mx:Button x="144" y="631" label="切换图像" width="127" fontSize="15" id="ChangeImage" click="ChangeImage_clickHandler(event)"/>
<mx:Label x="279" y="633" text="网格"/>
</mx:Canvas>
</mx:Panel>
</mx:Application>