zoukankan      html  css  js  c++  java
  • 魔法色块

       本来是想写个祖玛寻宝的,结果写来写去成这样了。

       点击颜色相同的色块相连超过三个的图片即可消除,换新的色块。

    package 
    {
    	import adobe.utils.CustomActions;
    	import flash.display.MovieClip;
    	import flash.events.MouseEvent ;
    	import flash.events.Event;
    	import Block ;
    	import BlockId;
    	import flash.utils.Timer;
    	import flash.events .TimerEvent;
    	/**
    	 * ...
    	 * @author ...
    	 */
    	public class  Game extends MovieClip 
    	{
    		var block:MovieClip ;
    		var MARGINX:int = 90;
    		var MARGINY:int = 90;
    		private var maparr:Array = [[], [], [], [], [], [], []] ;
    		
    		private var lockmap:Array = new Array ();
            private var newarr:Array ;
    		private var main:Block;
    		private var arr:Array ;
    		private var maxr:int=7;
    		private var maxc:int = 7;
    		
    		private var timer:Timer;
    		public function Game()
    		{
    			init();
    		}
    		private function init() //初始化界面
    		{
    			for (var i:int = 0; i < maxr; i++ )
    			{
    				for (var j:int = 0; j < maxc ; j++ )
    				{
    					var id:int = Math.floor(Math.random() * 7 + 1);
    					var block:Block = BlockId. creatId(id);
    					block .x = MARGINX + j * 32;
    					block .y = MARGINY + i * 32;
    					block .i = i;
    					block .j = j;
    					maparr[i][j]= block ;
    					addChild (maparr[i][j]);
    					block.addEventListener (MouseEvent .CLICK , onclick);
    					
    				}
    			}
    		}
    		private function onclick(evt:MouseEvent ):void 
    		{
    			timer = new Timer (300, 1);
    			timer.addEventListener(TimerEvent.TIMER, ontimer);
    			timer.start ();
    			var id:int = evt.currentTarget .id;
    			var i:int = evt.currentTarget .i;
    			var j:int = evt.currentTarget .j;
    			evt.currentTarget.islock = true;
    			var arr:Array = [i, j];
    	        lockmap.push(arr);
    			check(id, i, j);
    		}
    		function ontimer(e:TimerEvent):void //此时已经寻找到要处理的色块了
    		{
    			if (lockmap.length >= 3)
    			{
    				
    				clear ();
    				timer .removeEventListener (TimerEvent .TIMER , ontimer );
    			}
    			else 
    			{
    				lockmap.splice(0);
    			    for (var i:int  = 0; i < maxr; i++ )
    			    {
    			    	for (var j:int = 0; j < maxc; j++ )
    				    {
    					   maparr[i][j].islock = false;
    				    }
    			    }
    				timer .removeEventListener (TimerEvent .TIMER , ontimer );
    			}
    		}
    		private function check(id:int,i:int,j:int  ):void //搜寻色块
    		{
    			var ix:int = i;
    			var iy:int = j;
    			
    				addUnlocklist (chectkId (ix+1,iy-1,id));
    				addUnlocklist (chectkId (ix+1,iy ,id));
    				addUnlocklist (chectkId (ix+1,iy+1,id));
    				addUnlocklist (chectkId (ix,iy+1 ,id));
    				addUnlocklist (chectkId (ix-1,iy+1 ,id ));
    				addUnlocklist (chectkId (ix-1,iy ,id ));
    				addUnlocklist (chectkId (ix-1,iy-1,id  ));
    				addUnlocklist (chectkId (ix, iy - 1, id ));
    			  //  addUnlocklist (chectkId (ix, iy, id ));
    		}
    		private function addUnlocklist( bll:Boolean)
    		{
    			//if(bll)
    			//trace (lockmap.length )
    		}
    		private function chectkId(i:int, j:int, idd:int  ):Boolean
    		{
    		
    			//越界
    			if (i < 0 || j < 0 || i >= maxr || j >= maxc )
    			{
    				return false ;
    			}
    			//加入了lock已经扫描过
    		    
    			if (maparr [i][j].islock)
    			{
    				return false;
    			}
    			if (maparr [i][j].id == idd )
    			{
    				arr = new Array (i, j);
    			    
    				maparr [i][j].islock = true ;
    				lockmap.push(arr);
    				check(idd, i, j);        //以此为中心,再次搜寻
    			    
    				return false;
    			}
    			else 
    			{
    				maparr[i][j].islock = true;
    				return false;
    			}
    		
    			return false ;
    		}
    		private function clear():void 
    		{
    			addEventListener (Event.ENTER_FRAME , onevent);
    			function onevent(e:Event ):void 
    			{
    				for (var i:int = 0; i < lockmap.length ; i++ )
    				{
    					var r:int = lockmap [i][0];
    					var c:int = lockmap [i][1];
    					maparr [r][c].alpha -= 0.1;
    					if (maparr [r][c].alpha <= 0.1)
    					{
    						for (var j:int = 0; j < lockmap.length ; j++ )
    						{
    				        	var n:int = lockmap [j][0];
    				        	var m:int = lockmap [j][1];
    						removeChild (maparr [n][m]);
    						var id:int = Math.floor(Math.random() * 7 + 1);
    					    var block:Block = BlockId. creatId(id);
    						block .i = maparr [n][m].i;
    						block .j = maparr [n][m].j;
    						block.x = MARGINX + maparr [n][m].j * 32;
    						block.y = MARGINY + maparr [n][m].i * 32;
    						maparr [n][m] = block ;
    						addChild (block );
    						block.addEventListener (MouseEvent .CLICK , onclick);
    						}
    						removeEventListener(Event.ENTER_FRAME , onevent );
    						lockmap .splice (0);
    					}
    				}
    				
    			}
    			
    			for (var i:int  = 0; i < maxr; i++ )
    			{
    				for (var j:int = 0; j < maxc; j++ )
    				{
    					
    					maparr[i][j].islock = false;
    				}
    			}
    		
    		}
    		
    	}
    	
    }
    

    Magicblock源代码

  • 相关阅读:
    How to alter department in PMS system
    Can't create new folder in windows7
    calculate fraction by oracle
    Long Wei information technology development Limited by Share Ltd interview summary.
    ORACLE BACKUP AND RECOVERY
    DESCRIBE:When you mouse click right-side is open an application and click left-side is attribution.
    ORACLE_TO_CHAR Function
    电脑BOIS设置
    JSP点击表头排序
    jsp+js实现可排序表格
  • 原文地址:https://www.cnblogs.com/sevenmoons/p/2507794.html
Copyright © 2011-2022 走看看