原生JS实现记忆翻牌游戏

本文实例为大家分享了JS实现记忆游戏" title="翻牌游戏">翻牌游戏的具体代码,供大家参考,具体内容如下

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, // 最高游戏级别

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

})

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上是 原生JS实现记忆翻牌游戏 的全部内容, 来源链接: utcz.com/z/349297.html

回到顶部