• 技术文章 >web前端 >js教程

    js面向对象之如何实现拼图游戏

    零到壹度零到壹度2018-04-04 13:46:59原创1183
    这篇文章主要介绍了js面向对象之如何实现拼图游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    一、html代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>拼图小游戏</title>
    <style>
    body,td { margin:0; padding:0; }
    #begin { display:block; margin:20px auto; }
    table { margin:80px auto; background:#fff; border:10px solid pink;  }
    td { width:100px; height:100px; border:1px solid #ccc; cursor:pointer; background:url(img.jpg) no-repeat; }
    </style>
    <script src="js.js"></script>
    <script>
    window.onload = function(){
    	var thisGame = new PinTuGame('begin');
    }
    </script>
    
    </head>
    
    <body>
    <button id="begin">开始</button>
    </body>
    </html>

    二、js代码

    function PinTuGame(id){
    	var that = this;
    	this.oBtn = document.getElementById(id);
    	this.oTable = document.createElement('table');
    	this.oTbody = document.createElement('tbody');
    	this.aTd = null;
    	this.aTdMsg = [];		//用于存储每个图片的信息
    	this.num = 0;			//用于判断拼图是否完成
    	this.oTable.cellSpacing = '0';
    	
    	this.createElem();		//初始化游戏界面
    	this.oBtn.onclick = function(){
    		for(var i = 0; i<that.aTd.length; i++){
    			that.aTd[i].style.opacity = 1;	
    		}
    		this.innerHTML = '重新开始';
    		that.aTd[that.aTd.length-1].style.opacity = 0;
    		
    		var iAlpha = 100;
    		var sp = -10;
    		var timer = setInterval(function(){
    			iAlpha += sp;
    			that.oTbody.style.opacity = iAlpha / 100;
    	
    			if(iAlpha <=0) { sp = -sp; that.randomElem();}
    			if(iAlpha > 100) {clearInterval(timer) };
          	},15);	
    		that.beginGame();	
    	}
    }
    
    PinTuGame.prototype = {		//初始化游戏界面
    	createElem: function(){
    		for(var i =0; i<4; i++){
    			var oTr = document.createElement('tr');
    			for(var j =0; j<4; j++){
    				var oTd = document.createElement('td');
    				this.num ++;
    				var tdMsg = {
    					seq: this.num,
    					bgPosition: -100*j+'px '+ -100*i+'px' 	
    				};	
    				this.aTdMsg.push(tdMsg);
    				oTr.appendChild(oTd);
    			}
    			this.oTbody.appendChild(oTr);	
    		}	
    		this.oTable.appendChild(this.oTbody);
    		document.body.appendChild(this.oTable);	
    		
    		this.aTd = this.oTbody.getElementsByTagName('td');
    		for(var i = 0; i<this.aTd.length; i++){
    			this.aTd[i].json = this.aTdMsg[i];
    			this.aTd[i].style.backgroundPosition = this.aTd[i].json.bgPosition;
    		}
    	},
    	randomElem: function(){    	//随机排序图片
    		this.aTdMsg.sort(function (){
    			return Math.random()-0.5;     
    		});
    		for(var i=0;i<this.aTd.length;i++){
    			this.aTd[i].json = this.aTdMsg[i];
    			this.aTd[i].style.backgroundPosition = this.aTd[i].json.bgPosition;
    		}
    	},
    	beginGame: function(){		//开始游戏
    		var that = this;
    		var rows = this.oTbody.rows;
    		for(var i =0; i<4; i++){
    			for(var j =0; j<4; j++){
    				rows[i].cells[j].Y = i;
    				rows[i].cells[j].X = j;
    				
    				rows[i].cells[j].onclick = function(){
    					var arr = [       //获取该图片的上右下左,四个方向的坐标
    						[this.Y-1, this.X],
    						[this.Y, this.X+1],
    						[this.Y+1, this.X],
    						[this.Y, this.X-1]	
    					];	
    					for(var i = 0; i<arr.length; i++){
    						if( arr[i][0]<0 || arr[i][1]<0 || arr[i][0]>3 || arr[i][1]>3)continue;
    						if( rows[arr[i][0]].cells[ arr[i][1] ].style.opacity == '0' ){
    							
    							rows[arr[i][0]].cells[ arr[i][1] ].style.opacity = 1;
    							this.style.opacity=0;
    	
    							//与隐藏的td交换json对象
    							var thisJson = this.json;
    							this.json = rows[arr[i][0]].cells[ arr[i][1]].json;  
    							rows[arr[i][0]].cells[arr[i][1]].json = thisJson;		
    	
    							//与隐藏的td交换bakcground-position
    							this.style.backgroundPosition=this.json.bgPosition;
    							rows[arr[i][0]].cells[arr[i][1]].style.backgroundPosition=rows[arr[i][0]].cells[arr[i][1]].json.bgPosition;	
    						}
    					}
    					that.checkWin();
    				};	
    			}	
    		}
    	},
    	checkWin: function(){		//检测游戏是否完成
    		var aJson = [];
    		for(var i = 0; i<this.aTd.length; i++){
    			aJson.push(this.aTd[i].json.seq);
    		}	
    		for(var i = 0; i<aJson.length-1; i++){
    			if(aJson[i]>aJson[i+1])return;	
    		}
    		for(var i = 0; i<this.aTd.length; i++){
    			this.aTd[i].style.opacity = 1;	
    		}
    		alert('恭喜,胜利啦!');
    		location.reload();  
    	}	
    }

    二、游戏图片素材


    以上就是js面向对象之如何实现拼图游戏的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:ajax的应用实战解析 下一篇:ajax内部值无法在外部调用的解决方法
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 浅析IDEA中如何开发Angular• 整理总结JavaScript常见的BOM操作• 四种方法搞定JavaScript创建多个对象• Angular的:host、:host-context、::ng-deep选择器• 什么是异步资源?浅析Node实现异步资源上下文共享的方法
    1/1

    PHP中文网