2048-jquery版

两个晚上做了一个2048,还不是很完善,核心功能做出来了,代码写的不是很简洁
期间遇到一个问题,关于jquery的animate阻塞的问题,比如
$("#div").animate({top:'-=70px'});
$("#div").css({"opacity":"0"});
这样写的话慢慢上移的效果压根就不出现,但是在for循环里面又不会能用animate的回调函数,所以最后animate没有加进来,后果就是没有移动的效果,代码里面没有注释(so sorry),改天加上可怜
上代码
<!DOCTYPE html>
	<html>
	  <head>
	    <title>GF.html</title>	
	    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	    <meta http-equiv="description" content="this is my page">
	    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
	 	 <link rel="stylesheet" href="css/style.css" type="text/css" />
	 	 <script type="text/javascript" src="css/jquery-1.5.2.min.js"></script>
	  </head>
	 <script>
	 $(document).ready(function() {
	 	var sum=0;
		
		//初始化一个二维数组
		var qp=new Array();
		for(var i=0;i<4;i++){
			qp[i]=new Array();
			for(var j=0;j<4;j++){
				qp[i][j]=0;
			}
		}
		//随机生成一个方块
		function sandFK(){
			if(sum==16)
			{
				alert("Game over!!");
				return;
			}
			var rand=Math.floor(Math.random()*16)+1;	//生成0-15的随机数
			var randCp=rand;
			var i=0,j=0;
			for(;i<4;i++){					//遍历二维数组,决定在哪个点出方格
				if(rand==0)
					break;
				for(j=0;j<4;j++){
					if(qp[i][j]==0)
						rand--;
					if(i==3&&j==3&&rand!=0)
						i=-1;
					if(rand==0)
						break;
				}
			}
			
			qp[i-1][j]=1;					//将这个点设为有方格
			sum++;
			var name="GF0"+((i-1)*4+j+1);			//找到这个div的id
			var left=110*j+28+"px";
			var top=110*(i-1)+28+"px";
			$("#"+name).css({
			  	"top":top,
	    		"left":left
			 });
			if(randCp>10)					//如果rand大于10则出现4
				$("#"+name).html("4");
			else						//否则出现2
				$("#"+name).html("2");
			$("#"+name).animate({opacity:'1'},100);		//出现
		}
		sandFK();	
		sandFK();
		function btnClick(obj){					//这个是按上下左右的的时候出现的效果,直接略过
			$(obj).animate({
				top:'-=3px',
				left:'-=3px',
	   			height:'+=6px',
	   			width:'+=6px'},50,function(){
	   			 	$(obj).animate({
						top:'+=3px',
						left:'+=3px',
			   			 height:'-=6px',
			   			 width:'-=6px'},50);
	   			 });
		}
		$("#up").stop().click(function(){			//核心代码
			btnClick(this);				
			//上移,去空格,div复位
			var isChange=0;	
			var markX=0,isBlack=0;
			for(var y=0;y<4;y++){				//这个for是在上移过程中去掉所有上移过程中的方格之间的空格
				for(var x=0;x<4;x++){
					if(qp[x][y]==0&&isBlack==0){
						isBlack=1;
						markX=x;
					}
					else if(qp[x][y]!=0&&isBlack==1){
						for(var upX=x;upX<4;upX++){
							if(qp[upX][y]!=0){
								var name1="GF0"+(upX*4+y+1);
								var nameReal="GF0"+((markX+upX-x)*4+y+1);
								var left=110*y+28+"px";
								var top=110*(markX+upX-x)+28+"px";
								$("#"+nameReal).css({"top":top,"left":left});
								$("#"+nameReal).css({"opacity":"1"});
								$("#"+nameReal).html($("#"+name1).html());
								qp[upX][y]=0;
								qp[markX+upX-x][y]=1;
								$("#"+name1).css({"opacity":"0"});
								$("#"+name1).html("");
								isChange=1;
							}
						}
						isBlack=0;
					}
				}
				markX=0;
				isBlack=0;
			}
			
			for(var y=0;y<4;y++){							//这个for是用来判断相邻的两个方格是不是相等的,是相等就合并
				for(var x=0;x<3;x++){
					if(qp[x][y]==0)
						break;
					var name="GF0"+(x*4+y+1);
					var name2="GF0"+((x+1)*4+y+1);
					if($("#"+name).html()==$("#"+name2).html()){					
						$("#"+name).html(parseInt($("#"+name).html())*2);
						$("#"+name2).css({"opacity":"0"});
						isChange=1;
						$("#"+name2).html("");
						qp[x+1][y]=0;
						sum--;
						for(var upX=x+2;upX<4;upX++){
							if(qp[upX][y]!=0){
								var name1="GF0"+(upX*4+y+1);
								var nameReal="GF0"+((upX-1)*4+y+1);
								var left=110*y+28+"px";
								var top=110*(upX-1)+28+"px";
								$("#"+nameReal).css({"top":top,"left":left});
								$("#"+nameReal).css({"opacity":"1"});
								$("#"+nameReal).html($("#"+name1).html());
								qp[upX][y]=0;
								qp[upX-1][y]=1;
								$("#"+name1).css({"opacity":"0"});
								$("#"+name1).html("");
							}
							else
								break;
						}
					}
				}
			}
			if(isChange==1)
				sandFK();
		});
		$("#down").click(function(){
			btnClick(this);
			var isChange=0;
			var markX=0,isBlack=0;
			for(var y=0;y<4;y++){
				for(var x=3;x>=0;x--){
					if(qp[x][y]==0&&isBlack==0){
						isBlack=1;
						markX=x;
					}
					else if(qp[x][y]!=0&&isBlack==1){
						for(var upX=x;upX>=0;upX--){
							if(qp[upX][y]!=0){
								var name1="GF0"+(upX*4+y+1);
								var nameReal="GF0"+((markX+upX-x)*4+y+1);
								var left=110*y+28+"px";
								var top=110*(markX+upX-x)+28+"px";
								$("#"+nameReal).css({"top":top,"left":left});
								$("#"+nameReal).css({"opacity":"1"});
								$("#"+nameReal).html($("#"+name1).html());
								qp[upX][y]=0;
								qp[markX+upX-x][y]=1;
								$("#"+name1).css({"opacity":"0"});
								$("#"+name1).html("");
								isChange=1;
							}
						}
						isBlack=0;
					}
				}
				markX=0;
				isBlack=0;
			}
			
			/*******************************************************************/
			for(var y=0;y<4;y++){
				for(var x=3;x>0;x--){
					if(qp[x][y]==0)
						break;
					var name="GF0"+(x*4+y+1);
					var name2="GF0"+((x-1)*4+y+1);
					if($("#"+name).html()==$("#"+name2).html()){					
						$("#"+name).html(parseInt($("#"+name).html())*2);
						$("#"+name2).css({"opacity":"0"});
						$("#"+name2).html("");
						isChange=1;
						qp[x-1][y]=0;
						sum--;
						for(var upX=x-2;upX>=0;upX--){
							if(qp[upX][y]!=0){
								var name1="GF0"+(upX*4+y+1);
								var nameReal="GF0"+((upX+1)*4+y+1);
								var left=110*y+28+"px";
								var top=110*(upX+1)+28+"px";
								$("#"+nameReal).css({"top":top,"left":left});
								$("#"+nameReal).css({"opacity":"1"});
								$("#"+nameReal).html($("#"+name1).html());
								qp[upX][y]=0;
								qp[upX+1][y]=1;
								$("#"+name1).css({"opacity":"0"});
								$("#"+name1).html("");
							}
							else
								break;
						}
					}
				}
			}
			if(isChange==1)
				sandFK();
		});
		$("#left").click(function(){
			btnClick(this);
			var isChange=0;
			var markY=0,isBlack=0;
			for(var x=0;x<4;x++){
				for(var y=0;y<4;y++){
					if(qp[x][y]==0&&isBlack==0){
						isBlack=1;
						markY=y;
					}
					else if(qp[x][y]!=0&&isBlack==1){
						for(var upY=y;upY<4;upY++){
							if(qp[x][upY]!=0){
								var name1="GF0"+(x*4+upY+1);
								var nameReal="GF0"+(x*4+(markY+upY-y)+1);
								var left=110*(markY+upY-y)+28+"px";
								var top=110*x+28+"px";
								$("#"+nameReal).css({"top":top,"left":left});
								$("#"+nameReal).css({"opacity":"1"});
								$("#"+nameReal).html($("#"+name1).html());
								qp[x][upY]=0;
								qp[x][markY+upY-y]=1;
								$("#"+name1).css({"opacity":"0"});
								$("#"+name1).html("");
								isChange=1;
							}
						}
						isBlack=0;
					}
				}
				markY=0;
				isBlack=0;
			}
			
			/*******************************************************************/
			
			for(var x=0;x<4;x++){
				for(var y=0;y<3;y++){
					if(qp[x][y]==0)
						break;
					var name="GF0"+(x*4+y+1);
					var name2="GF0"+(x*4+y+1+1);
					if($("#"+name).html()==$("#"+name2).html()){					
						$("#"+name).html(parseInt($("#"+name).html())*2);
						$("#"+name2).css({"opacity":"0"});
						$("#"+name2).html("");
						isChange=1;
						qp[x][y+1]=0;
						sum--;
						for(var upY=y+2;upY<4;upY++){
							if(qp[x][upY]!=0){
								var name1="GF0"+(x*4+upY+1);
								var nameReal="GF0"+(x*4+upY-1+1);
								var left=110*(upY-1)+28+"px";
								var top=110*x+28+"px";
								$("#"+nameReal).css({"top":top,"left":left});
								$("#"+nameReal).css({"opacity":"1"});
								$("#"+nameReal).html($("#"+name1).html());
								qp[x][upY]=0;
								qp[x][upY-1]=1;
								$("#"+name1).css({"opacity":"0"});
								$("#"+name1).html("");
							}
							else
								break;
						}
					}
				}
			}
			if(isChange==1)
				sandFK();
		});
		$("#right").click(function(){
			btnClick(this);
			var isChange=0;
			var markY=0,isBlack=0;
			for(var x=0;x<4;x++){
				for(var y=3;y>=0;y--){
					if(qp[x][y]==0&&isBlack==0){
						isBlack=1;
						markY=y;
					}
					else if(qp[x][y]!=0&&isBlack==1){
						for(var upY=y;upY>=0;upY--){
							if(qp[x][upY]!=0){
								var name1="GF0"+(x*4+upY+1);
								var nameReal="GF0"+(x*4+(markY+upY-y)+1);
								var left=110*(markY+upY-y)+28+"px";
								var top=110*x+28+"px";
								$("#"+nameReal).css({"top":top,"left":left});
								$("#"+nameReal).css({"opacity":"1"});
								$("#"+nameReal).html($("#"+name1).html());
								qp[x][upY]=0;
								qp[x][markY+upY-y]=1;
								$("#"+name1).css({"opacity":"0"});
								$("#"+name1).html("");
								isChange=1;
							}
						}
						isBlack=0;
					}
				}
				markY=0;
				isBlack=0;
			}
			
			/*******************************************************************/
			
			for(var x=0;x<4;x++){
				for(var y=3;y>0;y--){
					if(qp[x][y]==0)
						break;
					var name="GF0"+(x*4+y+1);
					var name2="GF0"+(x*4+y-1+1);
					if($("#"+name).html()==$("#"+name2).html()){					
						$("#"+name).html(parseInt($("#"+name).html())*2);
						$("#"+name2).css({"opacity":"0"});
						$("#"+name2).html("");
						isChange=1;
						qp[x][y-1]=0;
						sum--;
						for(var upY=y-2;upY>=0;upY--){
							if(qp[x][upY]!=0){
								var name1="GF0"+(x*4+upY+1);
								var nameReal="GF0"+(x*4+upY+1+1);
								var left=110*(upY+1)+28+"px";
								var top=110*x+28+"px";
								$("#"+nameReal).css({"top":top,"left":left});
								$("#"+nameReal).css({"opacity":"1"});
								$("#"+nameReal).html($("#"+name1).html());
								qp[x][upY]=0;
								qp[x][upY+1]=1;
								$("#"+name1).css({"opacity":"0"});
								$("#"+name1).html("");
							}
							else
								break;
						}
					}
				}
			}
			if(isChange==1)
				sandFK();
		});
	});
	</script>
	  <body>
	   	<div id="QP2048">
	   		<div id="GF01" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF02" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF03" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF04" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF05" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF06" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF07" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF08" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF09" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF010" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF011" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF012" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF013" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF014" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF015" class="GFILU" style="opacity:0;"></div>
	   		<div id="GF016" class="GFILU" style="opacity:0;"></div>
	   	</div>
	   	<div id="up" class="GF_FX">上</div>
	   	<div id="down" class="GF_FX">下</div>
	   	<div id="left" class="GF_FX">左</div>
	   	<div id="right" class="GF_FX">右</div>
	  </body>
	</html>


其实上下左右的代码是一样的,大家能给点意见吗,感激不尽

能够的运行的代码在这个这个地方下载

http://download.csdn.net/detail/xuxuan_csd/7332939

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值