⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 puzzledocument.as

📁 用flash cs3编写的一个拼图小游戏
💻 AS
字号:
package{
	import flash.display.*;
	import flash.text.TextField;
	import flash.events.*;
	import flash.ui.Mouse;
	import flash.geom.*;
	
	
	public class PuzzleDocument extends MovieClip{
		//声明变量
		//各行各列拼图数量
		public var col:uint;
		//拼图数量总数
		public var totalTiles:uint;
		//画布矩形
		public var rectCanvas:Rectangle;
		//临时堆放拼图的矩形
		public var rectTemp:Rectangle;
		//拼图碎皮宽度
		public var tileWidth:Number;
		//拼图高度
		public var tileHeight:Number;
		//碎皮数组
		public var aTiles:Array=[];
		//拼图位图数据
		public var bmpData:BitmapData;
		//拼图位图
		public var bmpMap:Bitmap;
		//存放位图和拼图碎皮的工作区
		public var scene:Sprite=new Sprite();
		//存放拼图分割线的Sprite对象
		public var lineSprite:Sprite;
		//构造函数
		public function PuzzleDocument(){
			col=4;
			rectCanvas=new Rectangle(5,15,360,360);
			rectTemp=new Rectangle(375,15,180,360);
			//设置拼图数量的文本框
			txtTileNum.text=col+"X"+col;
			mc.stop();
			scene=new Sprite();
			addChild(scene);
			swapChildren(mc,mcGameInfo);
			//交换工作区和游戏信息的深度
			swapChildren(scene,mcGameInfo);
			bmpData=new BitmapData(mc.width,mc.height);
			//把影片剪辑当前帧的图像作为拼图的位图数据
			bmpData.draw(mc,new Matrix());
			//使用位图数据创建位图对像
			bmpMap=new Bitmap(bmpData);
			bmpMap.x=rectCanvas.x;
			bmpMap.y=rectCanvas.y;
			//添加到显示列表
			scene.addChild(bmpMap);
			//添加  按钮的侦听器
			this.btnStart.addEventListener(MouseEvent.CLICK,btnStart_ClickHandler);
			this.btnReplay.addEventListener(MouseEvent.CLICK,btnReplay_ClickHandler);
			
			this.btnPlus.addEventListener(MouseEvent.CLICK,btnPlus_ClickHandler);
			this.btnMinus.addEventListener(MouseEvent.CLICK,btnMinus_ClickHandler);
			
			}
			//清除所有拼图碎皮
			private function clearTiles():void{
				for(var i:uint=0;i<aTiles.length;i++){
					scene.removeChild(aTiles[i]);
					}
					aTiles=[];
				}
				//初始化拼图分割线
				private function initArea():void{
					lineSprite=new Sprite();
					lineSprite.graphics.lineStyle(1,0x000000,.2);
					for(var i:uint=0;i<col-1;i++){
						//横向分割
						lineSprite.graphics.moveTo(rectCanvas.x,rectCanvas.y+tileHeight*(i+1));
						lineSprite.graphics.lineTo(rectCanvas.x+rectCanvas.width,rectCanvas.y+tileHeight*(i+1));
						//纵向分隔
						lineSprite.graphics.moveTo(rectCanvas.x+tileWidth*(i+1),rectCanvas.y);
						lineSprite.graphics.lineTo(rectCanvas.x+tileWidth*(i+1),rectCanvas.y+rectCanvas.height);
						}
						addChild(lineSprite);
					}
					//初始化拼图碎皮
					private function initTiles():void{
						//隐藏原始图层
						bmpMap.visible=false;
						clearTiles();
						for(var i:uint=0;i<col;i++){
							for(var j:uint=0;j<col;j++){
								var tile:Tile=new Tile(tileWidth,tileHeight);
								//从位图数据复制相应的像素到拼图碎片
								tile.bmpTile.bitmapData.copyPixels(bmpData,new Rectangle(j*tileWidth,i*tileHeight,tileWidth,tileHeight),new Point(0,0));
								//拼图碎片序列
								tile.index=i*col+j;
								//碎片可托拽
								tile.dragable=true;
								//碎片放置在临时区域
								tile.x=rectTemp.x+(rectTemp.width-tileWidth)*Math.random();
								tile.y=rectTemp.y+(rectTemp.height-tileHeight)*Math.random();
								//添加碎片的托拽事件
								tile.addEventListener(MouseEvent.MOUSE_DOWN,dragTile,false);
								tile.addEventListener(MouseEvent.MOUSE_UP,stopDragTile,false);
								//添加到数组
								aTiles.push(tile);
								scene.addChild(tile);
								}
							}
						}
		
		///////////////开始游戏 按钮方法
		private function btnStart_ClickHandler(e:MouseEvent):void{
			tileWidth=rectCanvas.width/col;
			tileHeight=rectCanvas.height/col;
			totalTiles=col*col;
			mc.visible=false;
			
			mcGameInfo.visible=false;
			btnStart.visible=false;
			btnReplay.visible=true;
			initArea();
			//初始化碎片
			initTiles();
			}
			////再玩一遍 按钮方法
			private function btnReplay_ClickHandler(e:MouseEvent):void{
				mc.visible=true;
				mcGameInfo.visible=false;
				mc.gotoAndStop(Math.ceil(Math.random()*mc.totalFrames));
				removeChild(lineSprite);
				bmpData=null;
				bmpData=new BitmapData(mc.width,mc.height);
				bmpData.draw(mc,new Matrix());
				bmpMap.bitmapData.copyPixels(bmpData,new Rectangle(0,0,rectCanvas.width,rectCanvas.height),new Point(0,0));
				bmpMap.visible=true;
				btnStart.visible=true;
				btnReplay.visible=false;
				clearTiles();
				}
				///添加按钮 方法
				private function btnPlus_ClickHandler(e:MouseEvent):void{
					if(col<8) col++;
					txtTileNum.text=col+"X"+col;
					}
					//减少按钮 方法
					private function btnMinus_ClickHandler(e:MouseEvent):void{
						if(col>3) col--;
						txtTileNum.text=col+"X"+col;
						
						}
						//托拽
						private function dragTile(e:MouseEvent):void{
							var tile:Tile=Tile(e.currentTarget);
							if(tile.dragable){
								scene.setChildIndex(tile,scene.numChildren-1);
								tile.startDrag();
								}
							
							}
							
							//停止托拽
							private function stopDragTile(e:MouseEvent):void{
								var tile:Tile=Tile(e.currentTarget);
								tile.stopDrag();
								var targetX:Number=tile.index%col*tileWidth+tileWidth/2+rectCanvas.x;
								var targetY:Number=Math.floor(tile.index/col)*tileHeight+tileHeight/2+rectCanvas.y;
								var targetPoint:Point=new Point(targetX,targetY);
								var mousePoint:Point=new Point(e.stageX,e.stageY);
								
								if(Point.distance(mousePoint,targetPoint)<tileWidth/2){
									if(!tile.dragable){
										return;
										}
										tile.dragable=false;
										scene.setChildIndex(tile,1);
										tile.x=targetX-tileWidth/2;
										tile.y=targetY-tileHeight/2;
										totalTiles--;
										if(totalTiles==0){
											mcGameInfo.visible=true;
											totalTiles=col*col;
											mcGameInfo.gotoAndStop("Success");
											}
									}
								
								}
				
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -