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调试工具(下载)
Jan 09 Javascript
Prototype Object对象 学习
Jul 12 Javascript
js open() 与showModalDialog()方法使用介绍
Sep 10 Javascript
javascript实现的DES加密示例
Oct 30 Javascript
js jq 单击和双击区分示例介绍
Nov 05 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
Oct 11 Javascript
elementui的默认样式修改方法
Feb 23 Javascript
浅谈vue权限管理实现及流程
Apr 23 Javascript
JS实现canvas简单小画板功能
Jun 23 Javascript
JavaScript WeakMap使用详解
Feb 05 Javascript
JavaScript canvas实现流星特效
May 20 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在window iis的莫名问题的测试方法
2013/05/14 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
js css后面所带参数含义介绍
2013/08/18 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
jquery得到iframe src属性值的方法
2014/09/25 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
Angular排序实例详解
2017/06/28 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
ES6 十大特性简介
2020/12/09 Javascript
python 快速排序代码
2009/11/23 Python
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
硕士研究生个人求职信
2013/12/04 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
六年级学生评语大全
2014/12/26 职场文书
开幕式邀请函
2015/01/31 职场文书
商务司机岗位职责
2015/04/10 职场文书
优秀志愿者感言
2015/08/01 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书