原生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中使用parseInt函数需要注意的问题
Apr 02 Javascript
Javascript中String的常用方法实例分析
Jun 13 Javascript
Bootstrap页面布局基础知识全面解析
Jun 13 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
Jul 20 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
Oct 27 Javascript
文件上传,iframe跨域数据提交的实现
Nov 18 Javascript
JS封装通过className获取元素的函数示例
Dec 20 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
Jan 04 Javascript
JS库之Particles.js中文开发手册及参数详解
Sep 13 Javascript
JavaScript 中判断变量是否为数字的示例代码
Oct 22 Javascript
微信小程序实现页面监听自定义组件的触发事件
Nov 01 Javascript
JavaScript WeakMap使用详解
Feb 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
通过php删除xml文档内容的方法
2015/01/23 PHP
php微信开发之上传临时素材
2016/06/24 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
pygame学习笔记(4):声音控制
2015/04/15 Python
Python3.x中自定义比较函数
2015/04/24 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
Django 视图层(view)的使用
2018/11/09 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
大学生实习自我鉴定
2013/12/11 职场文书
《守株待兔》教学反思
2014/03/01 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书