这篇文章主要介绍了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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号