原生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 相关文章推荐
brook javascript框架介绍
Oct 10 Javascript
实用的Jquery选项卡TAB示例代码
Aug 28 Javascript
通过onmouseover选项卡实现img图片的变化
Feb 12 Javascript
jquery实现侧边弹出的垂直导航
Dec 09 Javascript
Perl Substr()函数及函数的应用
Dec 16 Javascript
javascript每日必学之基础入门
Feb 16 Javascript
原生js实现淘宝购物车功能
Jun 23 Javascript
详解Angular4中路由Router类的跳转navigate
Jun 09 Javascript
Angular模板表单校验方法详解
Aug 11 Javascript
javascript实现切割轮播效果
Nov 28 Javascript
vue组件开发之tab切换组件使用详解
Aug 21 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
Sep 10 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实现多服务器共享SESSION数据的方法
2007/03/16 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
2019/04/04 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
Jquery Fade用法详解
2020/11/06 jQuery
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
Python缩进和冒号详解
2016/06/01 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
女大学生毕业找工作的自我评价
2013/10/03 职场文书
校园十大歌手策划书
2014/02/01 职场文书
工程力学专业自荐信范文
2014/03/17 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
护士节活动总结
2014/08/29 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记