原生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 相关文章推荐
用倒置滤镜把div倒置,再把table倒置。
Jul 31 Javascript
对frameset、frame、iframe的js操作示例代码
Aug 16 Javascript
jQuery实现点击该行即可删除HTML表格行
Oct 17 Javascript
node.js中的Socket.IO使用实例
Nov 04 Javascript
Javascript限制网页只能在微信内置浏览器中访问
Nov 09 Javascript
javascript中innerText和innerHTML属性用法实例分析
May 13 Javascript
浅析AngularJS Filter用法
Dec 28 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
Sep 09 Javascript
Javascript 实现全屏滚动实例代码
Dec 31 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
Jan 27 Javascript
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
vue filter 完美时间日期格式的代码
Aug 14 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中去掉字符串首尾空格的方法
2012/05/19 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
php导出生成word的方法
2015/12/25 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
2010/06/28 Javascript
jquery中对表单的基本操作代码
2010/07/29 Javascript
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
python3生成随机数实例
2014/10/20 Python
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
python使用socket进行简单网络连接的方法
2015/04/29 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
python中的句柄操作的方法示例
2019/06/20 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
python相对企业语言优势在哪
2020/06/12 Python
运行Python编写的程序方法实例
2020/10/21 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
外语系大学生自荐信范文
2014/03/01 职场文书
机电系毕业生求职信
2014/07/11 职场文书
校园广播稿精选
2014/10/01 职场文书
美容院管理规章制度
2015/08/05 职场文书
vue项目proxyTable配置和部署服务器
2022/04/14 Vue.js