原生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 相关文章推荐
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
Sep 19 Javascript
THREE.JS入门教程(2)着色器-上
Jan 24 Javascript
javascript中节点的最近的相关节点访问方法
Mar 20 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
Jun 02 Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 Javascript
详解 vue.js用法和特性
Oct 15 Javascript
微信小程序实现图片上传、删除和预览功能的方法
Dec 18 Javascript
使用Vue自定义数字键盘组件(体验度极好)
Dec 19 Javascript
详解使用React进行组件库开发
Feb 06 Javascript
vue element-ui实现动态面包屑导航
Dec 23 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
Oct 02 Javascript
JavaScript实现音乐播放器
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/09/08 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
如何在PHP中读写文件
2020/09/07 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
js+html制作简单验证码
2017/02/16 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
python解析html开发库pyquery使用方法
2014/02/07 Python
python通过ssh-powershell监控windows的方法
2015/06/02 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
python flask搭建web应用教程
2019/11/19 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
使用Python发现隐藏的wifi
2020/03/04 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
你常见到的runtime exception
2016/09/05 面试题
毕业生多媒体设计求职信
2013/10/12 职场文书
销售会计工作职责
2013/12/02 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
离职保密承诺书
2014/05/28 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python