原生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 相关文章推荐
JavaScript中“+=”的应用
Feb 02 Javascript
学习ExtJS Panel常用方法
Oct 07 Javascript
javascript 节点遍历函数
Mar 28 Javascript
什么是 AngularJS?AngularJS简介
Dec 06 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
基于replaceChild制作简单的吞噬特效
Sep 21 Javascript
JavaScript基本的输出和嵌入式写法教程
Oct 20 Javascript
JS实现刷新父页面不弹出提示框的方法
Jun 22 Javascript
javascript兼容性(实例讲解)
Aug 15 Javascript
如何利用ES6进行Promise封装总结
Feb 11 Javascript
微信小程序使用蓝牙小插件
Sep 23 Javascript
vue 全局封装loading加载教程(全局监听)
Nov 05 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
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
php输入数据统一类实例
2015/02/23 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
前端自动化开发之Node.js的环境搭建教程
2017/04/01 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
在vue中配置不同的代理同时访问不同的后台操作
2020/09/11 Javascript
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
python实现支付宝转账接口
2019/05/07 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
实习单位接收函
2014/01/11 职场文书
装修五一活动策划案
2014/01/23 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
七匹狼男装广告词
2014/03/21 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
催款函范文
2015/06/24 职场文书
大学运动会加油稿
2015/07/22 职场文书
详解Nginx 工作原理
2021/03/31 Servers
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android