原生JS實(shí)現(xiàn)記憶翻牌游戲
本文實(shí)例為大家分享了JS實(shí)現(xiàn)記憶翻牌游戲的具體代碼,供大家參考,具體內(nèi)容如下
html代碼
<div id="game"> <!-- div.block*16>div.pic --> </div>
css代碼
* {
padding: 0;
margin: 0;
}
#game {
width: 600px;
height: 600px;
margin: 0 auto;
}
.block {
float: left;
box-sizing: border-box;
width: 25%;
height: 25%;
border: 2px solid #ddd;
background-color: #f0f0f0;
}
.block:hover {
background-color: #2b84d0;
}
.pic {
width: 100%;
height: 100%;
background-repeat: no-repeat;
background-position: center center;
transform: scaleX(0);
transition: transform .2s;
}
.block.on .pic {
transform: scaleX(1)
}
js代碼
var game = {
el: '',
level: 0,
blocks: 0,
gameWidth: 600,
gameHeight: 600,
dataArr: [],
judgeArr: [],
turnNum: 0,
picNum: 20,
maxLevel: 3, // 最高游戲級(jí)別
init: function (options) {
this.initData(options);
this.render();
this.handle();
},
initData: function (options) {
this.options = options;
this.el = options.el;
this.level = options.level > this.maxLevel ? this.maxLevel : options.level;
this.blocks = (this.level * 2) * (this.level * 2);
this.getdataArr();
},
getdataArr: function () {
var randomArr = this.randomArr();
var halfBlocks = this.blocks / 2;
var dataArr = [];
for(var i = 0; i < halfBlocks; i ++) {
var num = randomArr[i];
var info = {
url: './images/' + num + '.png',
id: num
}
dataArr.push(info, info);
}
console.log(dataArr);
this.dataArr = this.shuffle(dataArr);
},
randomArr: function () {
var picNum = this.picNum;
var arr = [];
for(var i = 0; i < picNum; i ++) {
arr.push(i + 1);
}
console.log(arr);
return this.shuffle(arr);
},
shuffle: function (arr) {
return arr.sort(function () {
return 0.5 - Math.random();
})
var length = arr.length - 1;
for(var i = length ; i >= 0; i --) {
var randomIndex = Math.floor(Math.random() * (i + 1));
var temp = arr[randomIndex];
arr[randomIndex] = arr[i];
arr[i] = temp;
}
return arr;
},
render: function () {
var blocks = this.blocks;
var gameWidth = this.gameWidth;
var gameHeight = this.gameHeight;
var level = this.level;
var blockWidth = gameWidth / ( level * 2 );
var blockHeight = gameHeight / ( level * 2 );
var dataArr = this.dataArr;
for(var i = 0; i < blocks; i ++) {
var info = dataArr[i];
var oBlock = document.createElement('div');
var oPic = document.createElement('div');
oPic.style.backgroundImage = 'url(' + info.url + ')';
oBlock.style.width = blockWidth + 'px';
oBlock.style.height = blockHeight + 'px';
oBlock.picid = info.id;
oPic.setAttribute('class', 'pic');
oBlock.setAttribute('class', 'block');
oBlock.appendChild(oPic);
this.el.appendChild(oBlock);
handle: function () {
var self = this;
this.el.onclick = function (e) {
var dom = e.target;
var isBlock = dom.classList.contains('block');
if(isBlock) {
self.handleBlock(dom);
}
}
},
handleBlock: function (dom) {
var picId = dom.picid;
var judgeArr = this.judgeArr;
var judgeLength = judgeArr.push({
id: picId,
dom: dom
});
dom.classList.add('on');
if(judgeLength === 2) { this.judgePic(); }
this.judgeWin();
},
judgePic: function () {
var judgeArr = this.judgeArr;
var isSamePic = judgeArr[0].id === judgeArr[1].id;
if(isSamePic) {
this.turnNum += 2;
} else {
var picDom1 = judgeArr[0].dom;
var picDom2 = judgeArr[1].dom;
setTimeout(function () {
picDom1.classList.remove('on');
picDom2.classList.remove('on');
}, 800)
}
judgeArr.length = 0;
},
judgeWin: function () {
if(this.turnNum === this.blocks) {
setTimeout(function () {
alert('勝利');
}, 300)
}
}
}
game.init({
el: document.getElementById('game'),
level: 2
})

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript 對(duì)象數(shù)組根據(jù)對(duì)象object key的值排序
本文僅僅是實(shí)現(xiàn)了javascript 對(duì)象數(shù)組根據(jù)對(duì)象object key的值排序,算是對(duì)自己學(xué)習(xí)javascript這么久的一個(gè)小結(jié),希望大家能夠喜歡2015-03-03
javascript 鼠標(biāo)拖動(dòng)圖標(biāo)技術(shù)
剛剛學(xué)習(xí)了個(gè)js的小技術(shù),還蠻好玩的,以后會(huì)把做的一些小例子貼上來(lái),方便自己也可以跟大家一起分享學(xué)習(xí)成果,哈哈~~2010-02-02
javascript實(shí)現(xiàn)電腦和手機(jī)版樣式切換
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)電腦和手機(jī)版樣式切換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
layui表格 列自動(dòng)適應(yīng)大小失效的解決方法
今天小編就為大家分享一篇layui表格 列自動(dòng)適應(yīng)大小失效的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
JS運(yùn)動(dòng)特效之完美運(yùn)動(dòng)框架實(shí)例分析
這篇文章主要介紹了JS運(yùn)動(dòng)特效之完美運(yùn)動(dòng)框架,結(jié)合實(shí)例形式分析了javascript針對(duì)運(yùn)動(dòng)中的元素屬性檢測(cè)與判斷相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
微信小程序登錄按鈕遮罩浮層效果的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于微信小程序登錄按鈕遮罩浮層效果的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12

