原生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 新手24条实用建议[TUTS+]
Jun 21 Javascript
Jquery ui css framework
Jun 28 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
Jul 28 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
json传值以及ajax接收详解
May 24 Javascript
AngularJS中指令的四种基本形式实例分析
Nov 22 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
Feb 21 Javascript
Angular2之二级路由详解
Aug 31 Javascript
微信小程序wx.request拦截器使用详解
Jul 09 Javascript
8个有意思的JavaScript面试题
Jul 30 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
Aug 14 Javascript
vue实现tab栏点击高亮效果
Aug 19 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
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
理解JS绑定事件
2016/01/19 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
python Django 创建应用过程图示详解
2019/07/29 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
Python猴子补丁知识点总结
2020/01/05 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
HTML5通用接口详解
2016/06/12 HTML / CSS
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
银行实习自我鉴定
2013/10/12 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
党员政治学习材料
2014/05/14 职场文书
平面设计专业求职信
2014/08/09 职场文书
同学聚会邀请函
2015/01/30 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
全网非常详细的pytest配置文件
2022/07/15 Python
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL