Beautifl - Flash Gallery

Thumbnail : Puzzle
Puzzle
hacker_cobulht0 2010-02-18 see code comments

再生するにはFlash Playerが必要です。デスクトップのブラウザでご覧ください。

package {//papervision3d練習その2
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	import org.papervision3d.materials.*;
	import org.papervision3d.objects.*;
	import org.papervision3d.materials.utils.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.view.*;
	
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.core.utils.InteractiveSceneManager;
	import org.papervision3d.core.utils.Mouse3D;
	
	import org.papervision3d.typography.*;
    import org.papervision3d.typography.fonts.*;
    import org.papervision3d.materials.special.*;

	import org.papervision3d.core.geom.*;
	
	import caurina.transitions.Tweener; 

	[SWF(width = "465", height = "465", backgroundColor = 0xFFFFFF, frameRate = "30")]

	public class neunPuzzle extends BasicView {

		private var rootNode  : DisplayObject3D;	
		private var rot:Number=0;
		
		private var _sArray=[0,1,2,3,4,8,6,7,5]
		private var myArray=[
						[99,99,99,99,99],
						[99,0,1,2,99],
						[99,3,4,5,99],
						[99,6,7,8,99],
						[99,99,99,99,99]
						];
		private var myArray_pos:Object={nineY:98, nineX:98, ue:98, st:98, mg:98, hd:98};
		private var _BlockList:Array=new Array();

		private var ckClick:Boolean=false;
		
		//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		private var rndArray:Array=[1000,-1000];
		private var ckClear:Boolean=false;
			
		public function neunPuzzle() {
			super(0,0,true,true);
			//ShuffleArray
			var sa = _sArray.length;
			while (sa--) {
			var j = Math.floor(Math.random()*(sa+1));
			var t = _sArray[sa];
			_sArray[sa] = _sArray[j];
			_sArray[j] = t;
			}
			funcReady1();
		}
		
		public function funcReady1() {
			//背景----------------------------------------------------------------------------------------------------
			var bg:back_ground=new back_ground();
			addChildAt(bg,0);
			
			rootNode = new DisplayObject3D();
			scene.addChild( rootNode );	
			var color1:Array=[0xFB5E79,0xFE8D8D,0xFB5E79,0xFF9575,0xDD4969,0xFF9575,0xFB5E79,0xFE8D8D];
			
			for (var j:int = 0; j < 9; j++) {
				if(j!=8){
				var bmpData:BitmapData = new BitmapData(50,50,true,0x00000000);
				var shapes:drawBlockFront=new drawBlockFront(j,String(j+1));
				bmpData.draw(shapes);
				var mat1: BitmapMaterial = new BitmapMaterial(bmpData);
				mat1.interactive = true;
				mat1.smooth = true;
				
				var bmpData2:BitmapData = new BitmapData(50,50,true,0x00000000);
				var shapes2:drawBlockSide=new drawBlockSide(j);
				bmpData2.draw(shapes2);
				var mat2: BitmapMaterial = new BitmapMaterial(bmpData2);
				mat2.interactive = true;
				mat2.smooth = true;
				
				var materialsList:MaterialsList = new MaterialsList({
				front: mat2,
				back: mat1,
				right: mat2,
				left: mat2,
				top: mat2,
				bottom: mat2
				});
				var cube = new Cube(materialsList, 50, 50, 50, 1, 1, 1);
				cube.name=j;//"Cube"+String(j+1);
				
				rootNode.addChild( cube);				
				_BlockList.push(cube);
				}
			}
			funcReady2();
		}
		
		public function funcReady2() {
			for (var j:uint=0; j < 9; j++) {
				myArray[(Math.floor(j/3))+1][(j%3)+1]=_sArray[j];
				if(_sArray[j]!=8){		
				_BlockList[_sArray[j]].y=Math.floor(j/3)*-60+60;				
				_BlockList[_sArray[j]].x=j%3*60-60;
				_BlockList[_sArray[j]].addEventListener(InteractiveScene3DEvent.OBJECT_PRESS,funcRelease);
				}else if(_sArray[j]==8){
					myArray_pos["nineY"]=(Math.floor(j/3))+1;
					myArray_pos["nineX"]=(j%3)+1;
				}
			}
			camera.z = -600;
			camera.zoom = 100;
			//camera.focus = 10;	
			ckAzimuth();
			stage.addEventListener(Event.ENTER_FRAME, loop);
		}
		
		private function funcRelease(e:InteractiveScene3DEvent):void {
			var t_C:Cube=e.target as Cube;
			var _move:Number;
			var yy:Number=myArray_pos["nineY"];
			var xx:Number=myArray_pos["nineX"];
			if(t_C.name==myArray_pos["ue"]&&ckClick==true){ckClick=false;
				_move=t_C.y-60;
								Tweener.addTween(t_C, {y:_move, time:0.6, transition:"easeOutBack"
								,onComplete:function(e){
									myArray[yy][xx]=t_C.name;
									myArray[yy-1][xx]=8;
									myArray_pos["nineY"]=yy-1;ckAzimuth();
								}
								});
								Tweener.addTween(camera,{y:-300, time:1, transition:"easeOutQuad"});
			}
			else if(t_C.name==myArray_pos["st"]&&ckClick==true){ckClick=false;
				_move=t_C.y+60;
								Tweener.addTween(t_C, {y:_move, time:0.6, transition:"easeOutBack"
								,onComplete:function(e){
									myArray[yy][xx]=t_C.name;
									myArray[yy+1][xx]=8;
									myArray_pos["nineY"]=yy+1;ckAzimuth();
								}
								});
								Tweener.addTween(camera,{y:300, time:1, transition:"easeOutQuad"});
			}
			else if(t_C.name==myArray_pos["hd"]&&ckClick==true){ckClick=false;
				_move=t_C.x+60;
								Tweener.addTween(t_C, {x:_move, time:0.6, transition:"easeOutBack"
								,onComplete:function(e){
									myArray[yy][xx]=t_C.name;
									myArray[yy][xx-1]=8;
									myArray_pos["nineX"]=xx-1;ckAzimuth();
								}
								});
								Tweener.addTween(camera,{x:-300, time:1, transition:"easeOutQuad"});
			}
			else if(t_C.name==myArray_pos["mg"]&&ckClick==true){ckClick=false;
				_move=t_C.x-60;
								Tweener.addTween(t_C, {x:_move, time:0.6, transition:"easeOutBack"
								,onComplete:function(e){
									myArray[yy][xx]=t_C.name;
									myArray[yy][xx+1]=8;
									myArray_pos["nineX"]=xx+1;ckAzimuth();
								}
								});
								Tweener.addTween(camera,{x:300, time:1, transition:"easeOutQuad"});
			}
			
		}
		
		private function ckAzimuth() {
			var _9y:Number=myArray_pos["nineY"];
			var _9x:Number=myArray_pos["nineX"];			
			if(myArray[_9y-1][_9x]==99){myArray_pos["ue"]=99}else{myArray_pos["ue"]=myArray[_9y-1][_9x]};
			if(myArray[_9y+1][_9x]==99){myArray_pos["st"]=99}else{myArray_pos["st"]=myArray[_9y+1][_9x]};
			if(myArray[_9y][_9x-1]==99){myArray_pos["hd"]=99}else{myArray_pos["hd"]=myArray[_9y][_9x-1]};
			if(myArray[_9y][_9x+1]==99){myArray_pos["mg"]=99}else{myArray_pos["mg"]=myArray[_9y][_9x+1]};
			ckGoal();			
		}
		private function ckGoal(){
			if(myArray[1][1]==0&&
			 	myArray[1][2]==1&&
				myArray[1][3]==2&&
				myArray[2][1]==3&&
				myArray[2][2]==4&&
				myArray[2][3]==5&&
				myArray[3][1]==6&&
				myArray[3][2]==7&&
				myArray[3][3]==8
			   ){funcClear();}ckClick=true;
		}
		private function funcClear(){				
			for(var j:int=0; j < 8; j++){
				var rndX:Number=rndArray[Math.floor(Math.random()*2)];
				var rndY:Number=rndArray[Math.floor(Math.random()*2)];
				Tweener.addTween(_BlockList[j], {x:rndX,y:rndY,delay:1+j/10,time:1.5,transition : "easeOutQuad"});
			}
			var letterMat = new Letter3DMaterial(0xE3DA37,1);
			letterMat.doubleSided=true;
			var strCo = new Text3D("Congratulations!", new HelveticaBold(), letterMat);
			strCo.z=2000;
			strCo.scaleX=strCo.scaleY=1.5;
			rootNode.addChild(strCo);				
			Tweener.addTween(strCo, {rotationY:360,delay:2,time:5,transition : "easeOutQuad"});
			Tweener.addTween(camera, {z:-800,y:10,x:0,delay:2,time:3,transition : "easeOutQuad"});
		}
		//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		private function loop( event:Event ):void {singleRender();}	
		//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	}
}

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
import flash.display.Sprite;
import flash.filters.GlowFilter;
import flash.text.*;
class drawBlockFront extends Sprite{
		public var _color:Array=[0xFFCCA7,0xFCC9DC,0xFFCCA7,0xFFDA8C,0xFFB67F,0xFFDA8C,0xFFCCA7,0xFCC9DC];
		public var _color1:Array=[0xFB5E79,0xFE8D8D,0xFB5E79,0xFF9575,0xFF7268,0xFF9575,0xFB5E79,0xFE8D8D];
public function drawBlockFront(nums:Number,str:String){
		var block_sp:Sprite = new Sprite();
		block_sp.name="block_sp";
		block_sp.graphics.beginFill(_color[nums]);
		block_sp.graphics.drawRect(0,0,50,50);
		block_sp.graphics.endFill();
		
		var _pic:drawFlower=new drawFlower(0xffffff);
		block_sp.addChild(_pic);
		_pic.alpha=0.8;
		_pic.scaleX=_pic.scaleY=5;
		_pic.x=25;							
		_pic.y=25;
		
		if(nums==8){this.alpha=0;}	else{
			var fmt:TextFormat = new TextFormat();
			fmt.color = _color1[nums];			
			fmt.size  = 40;
			fmt.font="Impact"
			var _txt = new TextField();
			_txt.name="_txt";
			_txt.defaultTextFormat = fmt;
			_txt.text=str;
			_txt.x=15;
			_txt.y=1;
			_txt.selectable = false;
			block_sp.addChild(_txt);
		}
		filters = [ new GlowFilter( _color1[nums], 1, 20, 20, 1,2,true ) ] ;	
		addChild(block_sp);
		mouseChildren = false;		
}}

class drawBlockSide extends Sprite{
		public var _color:Array=[0xFFCCA7,0xFCC9DC,0xFFCCA7,0xFFDA8C,0xFF917A,0xFFDA8C,0xFFCCA7,0xFCC9DC];//FF9B9B
		public var _color1:Array=[0xFB5E79,0xFE8D8D,0xFB5E79,0xFF9575,0xFF4074,0xFF9575,0xFB5E79,0xFE8D8D];//DD4969
public function drawBlockSide(nums:Number){
		var block_sp:Sprite = new Sprite();
		block_sp.name="block_sp";
		block_sp.graphics.beginFill(_color[nums]);
		block_sp.graphics.drawRect(0,0,50,50);
		block_sp.graphics.endFill();
		
		var _pic:drawFlower=new drawFlower(0xffffff);
		block_sp.addChild(_pic);
		_pic.scaleX=_pic.scaleY=2;
		_pic.x=25;							
		_pic.y=25;
		
		filters = [ new GlowFilter( _color1[nums], 1, 20, 20, 1,2,true ) ] ;	
		addChild(block_sp);
		mouseChildren = false;		
}}

class drawFlower extends Sprite{
public function drawFlower(colors){	
			for(var j:int=0; j < 5; j++){
					var fl_sp:Sprite = new Sprite();					
					fl_sp.graphics.beginFill(colors);
					fl_sp.graphics.drawEllipse(-1,0.5,2,4);					
					fl_sp.graphics.endFill();						
					fl_sp.rotation=j*72+180;
					addChild(fl_sp);
			}		
	}
}
class back_ground extends Sprite{
public function back_ground(){
	var bg:Sprite=new Sprite();
	bg.graphics.beginFill(0xFFFFFF,1);
	bg.graphics.drawRect(0,0,465,465);
	bg.graphics.endFill();
	addChild(bg);
	for(var j:uint=0; j < 100; j++) {
		var panel:drawFlower=new drawFlower(0xFFFFFF);		
		panel.x=Math.floor (Math.random() * 465);
		panel.y=Math.floor (Math.random() * 465);
		panel.scaleX=panel.scaleY=Math.floor (Math.random() * 3)+2;
		panel.rotation=Math.floor (Math.random() * 465);
		panel.filters = [ new GlowFilter(0xFFB8A2, 1, 20, 20, 1,2,false ) ] ;	
		bg.addChild(panel);
	}
}
}