拼图游戏

==========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;
		}
	}
}
原文地址:https://www.cnblogs.com/leon3286/p/1708342.html