js消除图片小游戏代码


Posted in Javascript onDecember 11, 2019

js消除图片小游戏,效果如下所示:

js消除图片小游戏代码

做了一个简易的消除图片的小游戏,没有连线的规则。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>js连连看</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    html,
    body {
      width: 100%;
      height: 100%;
      background: #222;
      overflow: hidden;
    }
    .wrapper {
      background-size: 100% 100%;
      margin: 10px auto;
      position: relative;
      /* border: 1px solid #f40; */
    }
    .square {
      cursor: pointer;
      position: absolute;
      width: 80px;
      height: 80px;
      background-size: cover;
    }
  </style>
</head>
<body>
  <div class="wrapper"></div>
  <script>
    var wrap = document.getElementsByClassName('wrapper')[0];
    var rows = 7;  // 创建连连看行数
    var cols = 12; // 创建连连看列数
    var type = 24  //选择多少种图片,0-24都可以 看自己心情 数字大种类多 数字小种类少游戏难度更简单
    var squareSet = [];  // 生成小方块的数组 
    var chooseOne = null; //
    var chooseTwo = null; //
    var Toward = { node: null, up: { row: -1, col: 0 }, right: { row: 0, col: 1 }, down: { row: 1, col: 0 }, left: { row: 0, col: -1 } }
    window.onload = function () {
      init(); //初始化
    }
    function init() {
      if (rows * cols % 2 != 0) { //判断小方块总数是否为奇数,奇数就不执行
        alert('展示数量不能为奇数') // 弹出提示,阻塞js加载
      }
      initSquareSet();
    }
    function initSquareSet() {
      // 方块默认长宽都是80px
      wrap.style.height = rows * 80 + 'px';  // 外面盒子的总高度
      wrap.style.width = cols * 80 + 'px'; // 外面盒子的总宽度
      var oDiv = document.createElement('div')
      var tmp = createRandomNum(); //生成随机数数组  我的图片名称是0.jpg~24.jpg 函数生成0~24随机数就可以通过字符串拼接动态的选择图片 
      squareSet = new Array(rows + 2); // 生成小方块的数组  既有行又有列 我们就要利用for循环生成二维数组 57~60
      for (var i = 0; i < squareSet.length; i++) {
        squareSet[i] = new Array(cols + 2);
      }
      for (var i = 1; i <= rows; i++) { // 生成行数  
        for (var j = 1; j <= cols; j++) { // 生成列数 同理
          var temp = createSquare(tmp.pop(), i, j); // 参数每次取随机数数组的最后一位 i小方块在整体中行的位置j是列的位置  temp接收这个返回的DOM元素
          squareSet[i][j] = temp;
          wrap.append(temp);
          temp.onclick = function () {
            if (chooseOne == null || chooseOne.num != this.num) {  // 判断是第一次点击还是第二次 77~81 没有值或者说没有属性的都是第一次点击
              chooseOne = this;
            } else {
              chooseTwo = this;
              if (chooseOne != chooseTwo && chooseOne.num == chooseTwo.num ) { //判断第一次和第二次点击不是同一个 并且num值相等 以及是否在路径上可以消除
                clearSquare(chooseOne.row, chooseOne.col);
                clearSquare(chooseTwo.row, chooseTwo.col);
              }
              chooseOne = null;
              chooseTwo = null;
            }
            render(); // 点击方块变换样式
          }
        }
      }
    }
    function createRandomNum() {
      var tmp = [] // 存放生成图片是 字符串拼接的数字
      // rows * cols 可以算出需要多少张图片 然后除以2 因为每张图片都是成对出现的 即 7*12=84张图片 84/2=41算出有42对
      for (var i = 0; i < rows * cols / 2; i++) {
        var num = Math.floor(Math.random() * type) // 生成0~24的随机数
        tmp.push(num);
        tmp.push(num); // 循环了42次 所以push两遍 相当如每次push了相同的一对数,42次 正好84张图片
      }
      // console.log(tmp) // 看看生成的数组 可以看到成对的随机数字数组
      tmp.sort(function () {
        return Math.random() - 0.5 //可以打乱数组
      })
      // console.log(tmp) // 看看生成的数组 可以看到已经不成对的随机数字数组
      return tmp      // 将数组返回回去 
    }
    function createSquare(num, row, col) {
      var temp = document.createElement('div');
      temp.classList.add('square');
      temp.style.backgroundImage = "url('./src/img/连连看/" + num + ".jpg')";
      temp.style.top = row * 80 + 'px'; // 生成方块的位置 96,97
      temp.style.left = col * 80 + 'px';
      temp.num = num; //设置小方块的随机数属性 到时候可以用来判断属性是否一样来判断是否消除小方块 
      return temp;  //返回了一个带着属性的DOM元素
    }
    function render() {
      for (var i = 0; i < squareSet.length; i++) { //做一个样式的切换 
        for (var j = 0; j < squareSet[i].length; j++) {
          if (squareSet[i][j] && squareSet[i][j] == chooseOne) {
            squareSet[i][j].style.opacity = '0.5';
          } else if (squareSet[i][j]) {
            squareSet[i][j].style.opacity = '1';
          }
        }
      }
    }
    function clearSquare(x, y) {
      wrap.removeChild(squareSet[x][y]); // 删除方块
      squareSet[x][y] = null;
    }
  </script>
</body>
</html>

总结

以上所述是小编给大家介绍的js消除图片小游戏代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JavaScript中的闭包原理分析
Mar 08 Javascript
js实现在字符串中提取数字
Nov 05 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
Mar 27 Javascript
学好js,这些js函数概念一定要知道【推荐】
Jan 19 Javascript
jQuery实现文档树效果
Feb 20 Javascript
微信小程序 新建登录页并实现tabBar隐藏
Jun 13 Javascript
react-router4 嵌套路由的使用方法
Jul 24 Javascript
微信小程序 自定义消息提示框
Aug 06 Javascript
vue中页面跳转拦截器的实现方法
Aug 23 Javascript
jquery学习笔记之无new构建详解
Dec 07 jQuery
微信小程序使用progress组件实现显示进度功能【附源码下载】
Dec 12 Javascript
element-ui中Table表格省市区合并单元格的方法实现
Aug 07 Javascript
详解vue中$nextTick和$forceUpdate的用法
Dec 11 #Javascript
基于jQuery实现可编辑的表格
Dec 11 #jQuery
jQuery实现可编辑的表格
Dec 11 #jQuery
vue element自定义表单验证请求后端接口验证
Dec 11 #Javascript
详解如何在JS代码中消灭for循环
Dec 11 #Javascript
Angular封装表单控件及思想总结
Dec 11 #Javascript
小程序接口的promise化的实现方法
Dec 11 #Javascript
You might like
php结合飞信 免费天气预报短信
2009/05/07 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
js获取提交的字符串的字节数
2009/02/09 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
package.json文件配置详解
2017/06/15 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
Python 模板引擎的注入问题分析
2017/01/01 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
在Python中给Nan值更改为0的方法
2018/10/30 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
迪拜领先运动补剂零售品牌中文站:Sporter商城
2019/08/20 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
银行工作检查书范文
2014/01/31 职场文书
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
项目经理任命书范本
2014/06/05 职场文书
节能标语大全
2014/06/21 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL