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实例教程(19) 使用HoTMetal(3)
Dec 23 Javascript
asp 取文本框名称代码
Dec 02 Javascript
Javascript实现视频轮播在pc端与移动端均可
Sep 29 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
Nov 24 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
Mar 01 Javascript
Javascript创建类和对象详解
May 31 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
Jun 04 Javascript
Vue AST源码解析第一篇
Jul 19 Javascript
webpack打包react项目的实现方法
Jun 21 Javascript
Angular PWA使用的Demo示例
Jan 31 Javascript
原生JavaScript之es6中Class的用法分析
Feb 23 Javascript
js canvas实现五子棋小游戏
Jan 22 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
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
python模块之StringIO使用示例
2015/04/08 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
什么是设计模式
2012/06/17 面试题
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
应用艺术毕业生的自我评价
2013/12/04 职场文书
优秀党员获奖感言
2014/02/18 职场文书
《姥姥的剪纸》教学反思
2014/02/25 职场文书
青年文明号创建承诺
2014/03/31 职场文书