原生JS实现记忆翻牌游戏


Posted in Javascript onJuly 31, 2020

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

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
})

原生JS实现记忆翻牌游戏

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
刷新页面实现方式总结(HTML,ASP,JS)
Nov 13 Javascript
jQuery 版元素拖拽原型代码
Apr 25 Javascript
JavaScript 选中文字并响应获取的实现代码
Aug 28 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
Dec 26 Javascript
IE8兼容Jquery.validate.js的问题
Dec 01 Javascript
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
vue根据进入的路由进行原路返回的方法
Sep 26 Javascript
微信小程序开发常见问题及解决方案
Jul 11 Javascript
javascrpt密码强度校验函数详解
Mar 18 Javascript
vue使用微信扫一扫功能的实现代码
Apr 11 Javascript
JS定时器如何实现提交成功提示功能
Jun 12 Javascript
js实现跳一跳小游戏
Jul 31 #Javascript
js实现翻牌小游戏
Jul 31 #Javascript
Vue 请求传公共参数的操作
Jul 31 #Javascript
vue2.0 解决抽取公用js的问题
Jul 31 #Javascript
vue实现公共方法抽离
Jul 31 #Javascript
js实现无缝轮播图插件封装
Jul 31 #Javascript
原生js滑动轮播封装
Jul 31 #Javascript
You might like
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
php数组去重的函数代码
2013/02/03 PHP
php遍历目录方法小结
2015/03/10 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
Jquery插件之多图片异步上传
2010/10/20 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
jQuery中实现text()的方法
2019/04/04 jQuery
微信小程序template模版的使用方法
2019/04/13 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
Python OS模块常用函数说明
2015/05/23 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
python实现小球弹跳效果
2019/05/10 Python
Python编程快速上手——强口令检测算法案例分析
2020/02/29 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
Python按照list dict key进行排序过程解析
2020/04/04 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
详解anaconda安装步骤
2020/11/23 Python
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
岗位聘任书范文
2014/03/29 职场文书
财会专业大学生求职信
2014/09/26 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python