原生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实现ASP分页函数 HTML分页函数
Sep 22 Javascript
picChange 图片切换特效的函数代码
May 06 Javascript
javascript new后的constructor属性
Aug 05 Javascript
javascript parseInt() 函数的进制转换注意细节
Jan 08 Javascript
jquery高级编程的最佳实践详解
Mar 23 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
Mar 04 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
Aug 24 Javascript
jQuery仿IOS弹出框插件
Feb 18 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
Jul 22 Javascript
token 机制和实现方式
Dec 15 Javascript
Ajax实现局部刷新的方法实例
Mar 31 Javascript
关于JS中的作用域中的问题思考分享
Apr 06 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+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
php对象工厂类完整示例
2018/08/09 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
[36:37]2014 DOTA2华西杯精英邀请赛5 24 VG VS iG
2014/05/25 DOTA
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
python利用sklearn包编写决策树源代码
2017/12/21 Python
python实现多线程行情抓取工具的方法
2018/02/28 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
营销与策划应届生求职信
2013/11/04 职场文书
总经理职责
2013/12/22 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
公司给客户的感谢信
2015/01/23 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python