原生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 相关文章推荐
Node.js中child_process实现多进程
Feb 03 Javascript
JavaScript实现的圆形浮动标签云效果实例
Aug 06 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
JS获取IMG图片高宽的简单实例
May 17 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
layui实现动态和静态分页
Apr 28 Javascript
微信小程序使用npm支持踩坑
Nov 07 Javascript
动态内存分配导致影响Javascript性能的问题
Dec 18 Javascript
vue路由--网站导航功能详解
Mar 29 Javascript
JavaScript事件委托实现原理及优点进行
Aug 29 Javascript
npm ci命令的基本使用方法
Sep 20 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
PHP5中虚函数的实现方法分享
2011/04/20 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
php基于curl重写file_get_contents函数实例
2016/11/08 PHP
有趣的javascript数组定义方法
2010/09/10 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
Python字典底层实现原理详解
2019/12/18 Python
Python换行与不换行的输出实例
2020/02/19 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
德国机车企业:FC-Moto
2017/10/27 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
大学生最新职业生涯规划书范文
2014/01/12 职场文书
师范毕业生自我鉴定
2014/01/15 职场文书
财务会计自荐信范文
2014/02/21 职场文书
教师节活动主持词
2014/04/02 职场文书
一年级学生期末评语
2014/04/21 职场文书
补充协议书范本
2014/04/23 职场文书
好学生评语大全
2014/05/05 职场文书
佛光寺导游词
2015/02/10 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
如何用Navicat操作MySQL
2021/05/12 MySQL
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript