原生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 相关文章推荐
准确获得页面、窗口高度及宽度的JS
Nov 26 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
Jul 04 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
May 05 Javascript
javascript动态加载三
Aug 22 Javascript
UpdatePanel和Jquery冲突的解决方法
Apr 01 Javascript
js跑马灯代码(自写)
Apr 17 Javascript
jquery 正整数数字校验正则表达式
Jan 10 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 Javascript
laydate日历控件使用方法详解
Nov 20 Javascript
js实现搜索栏效果
Nov 16 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
May 08 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
Aug 28 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的FTP学习(四)
2006/10/09 PHP
再次研究下cache_lite
2007/02/14 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
python使用7z解压apk包的方法
2015/04/18 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
Python输入二维数组方法
2018/04/13 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
上课玩手机检讨书
2014/02/08 职场文书
结婚司仪主持词
2015/06/29 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python