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 相关文章推荐
最新优化收藏到网摘代码(digg,diigo)
Feb 07 Javascript
HTML中不支持静态Expando的元素的问题
Mar 08 Javascript
如何在一个页面显示多个百度地图
Apr 07 Javascript
AngularJS基础 ng-show 指令简单示例
Aug 03 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
Aug 03 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
详解Angular 开发环境搭建
Jun 22 Javascript
高性能的javascript之加载顺序与执行原理篇
Jan 14 Javascript
微信小程序 Storage更新详解
Jul 16 Javascript
JS中比Switch...Case更优雅的多条件判断写法
Sep 05 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
Sep 12 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
May 12 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中实现记住密码自动登录的代码
2011/03/02 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
python查看数据类型的方法
2019/10/12 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
音乐教育感言
2014/03/05 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
个人担保书范文
2014/05/20 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
表扬信范文
2015/05/04 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python