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源代码

  • 相关阅读:
    Atitit.ati orm的设计and架构总结 适用于java c# php版
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit.ati dwr的原理and设计 attilax 总结 java php 版本
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit. 软件设计 模式 变量 方法 命名最佳实践 vp820 attilax总结命名表大全
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.基于  Commons CLI 的命令行原理与 开发
    atitit.js 与c# java交互html5化的原理与总结.doc
  • 原文地址:https://www.cnblogs.com/sevenmoons/p/2507794.html
Copyright © 2011-2022 走看看