复刻一个羊了个羊掘金商城版

news2024/11/15 9:40:36

游戏逻辑

与羊了个羊逻辑一致,不再赘述

游戏实现

  • 盛放元素的容器box,临时存储的容器temp,多余元素的容器source与source1,结果元素result
<div id="box"></div>
  <div id="temp"></div>
  <div id="source"></div>
  <div id="source1"></div>
  <div class="result">
    <div>游戏结束,别灰心,你能行的!</div>
    <div class="restart">重新开始</div>
  </div>
  • 样式基于定位和flex布局
<style>
  * {
    margin: 0;
    padding: 0;
    list-style: none;
    box-sizing: border-box;
  }

  html,
  body {
    width: 100%;
    height: 100%;
    overflow: auto;
    background-image: url('https://pic.qy566.com/snake/bg.jpeg');
    background-size: cover;
  }
  #box{
    width: 600px;
    height: 600px;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
  }
  #temp{
    width: 840px;
    height: 120px;
    position: absolute;
    left: 0;
    right: 0;
    margin: auto;
    bottom: 0;
    background-image: url('https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fup.92sucai.com%2Fimage%2F20180626%2F1529979993472449.jpg&refer=http%3A%2F%2Fup.92sucai.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1665795593&t=0c74935a1fa75d5861903e8249c15bbb');
    background-size: contain;
    border-radius: 16px;
    display: flex;
  }
  .item{
    width: 120px;
    height: 120px;
    border-radius: 16px;
    background-size: contain;
    background-position: center;
    background-repeat: no-repeat;
    border: 1px solid #333;
    cursor: pointer;
  }
  .shadow{
    box-shadow: 0 0 50px 10px #333 inset;
  }
  #source{
    width: 260px;
    height: 120px;
    position: absolute;
    top: 0;
    left: 0;
  }
  #source1{
    width: 260px;
    height: 120px;
    position: absolute;
    top: 0;
    right: 0;
  }
  .result{
    width: 200px;
    height: 120px;
    border: 4px dashed cyan;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
    background-color: #fff;
    padding: 10px;
    display: flex;
    flex-direction: column;
    justify-content: space-around;
    align-items: center;
    display: none;
  }
  .restart{
    width: 120px;
    height: 40px;
    line-height: 40px;
    border: 1px solid #333;
    text-align: center;
    cursor: pointer;
    margin: auto;
  }
</style>

生成元素的逻辑

  • 首先会有一个维护好的图片的数组imgSrc

 

  • 生成12*14的随机乱序待消除元素
// 随机乱序
function randomArr (array) {
    const arr = [].concat(array)
    for (let i = arr.length - 1; i >= 0; i--) {
    const inx = Math.floor(Math.random() * i + 1)
    const next = arr[inx]
    arr[inx] = arr[i]
    arr[i] = next
    }
    return arr
}
// 生成 12*14个待消除元素
for (let i =0;i<12;i++) {
        imgSrc.map((v,m)=>{
          console.log(m)
          source.push({src: v, inx: m})
        })
      }   
  • 分为5层,进行排列,其中层数从5至0递减,然后内部双层循环进行5*层数递减页面布局,元素依次由source.slice(0)来得到,维护图片索引 inx
 for(let k =5;k>0;k--) {
        for (let i=0;i<5;i++) {
          for (let j=0;j<k;j++) {
            let div = $('<div>')
            div.addClass('item')
            div.addClass(`${i}-${j}-${k}`)
            div.attr('x', i)  
            div.attr('y', j)  
            div.attr('z', k)  
            div.css('position', 'absolute')
            let img = source.splice(0,1)
            div.css('left', 120*j-Math.random()*10*k+'px')
            div.css('top', 120*i-Math.random()*10*k+'px')
            div.attr('inx', img[0].inx)
            div.css('backgroundImage', `url(${img[0].src})`)
            
            ....
            }
          }
      }
  • 判断是否被覆盖,被覆盖时添加shadow类
$('.item').each((i,v) => {
        let x = $(v).attr('x')
        let y = $(v).attr('y')
        let z = $(v).attr('z')
        let ele = $(`.${x}-${y}-${z-1}`)
        let ele1 = $(`.${x+1}-${y+1}-${z-1}`)
        if (ele.length || ele1.length) {
          $(v).addClass('shadow')
        }
      })
  • 添加点击事件,通过detach方式向temp中转移
  • 判断是否包含shadow类
  • 判断是否存在,维护temp对象
  • 删除后更新shadow覆盖状态
  • 判断是否大于7触发结束条件
div.click(function () {
              if(!$(this).hasClass('shadow')) {
                if (temp[$(this).attr('inx')]) {
                  temp[$(this).attr('inx')] += 1
                } else {
                  temp[$(this).attr('inx')] = 1
                }
                let e = $(this).detach()
                e.css('position', 'unset')
                $('#temp').append(e)
                $('.item').each((i,v) => {
                  $(v).removeClass('shadow')
                  let x = $(v).attr('x')
                  let y = $(v).attr('y')
                  let z = $(v).attr('z')
                  let ele = $(`.${x}-${y}-${z-1}`)
                  let ele1 = $(`.${x+1}-${y+1}-${z-1}`)
                  if (ele.length || ele1.length) {
                    $(v).addClass('shadow')
                  }
                })
                if (temp[$(this).attr('inx')]===3) {
                  $(`#temp div[inx=${$(this).attr('inx')}]`).remove()
                  temp[$(this).attr('inx')] = 0
                }
                let num = 0
                for (let i in temp) {
                  num+=temp[i]
                }
                if (num>=7) {
                  $('.item').off('click')
                  $('.result').fadeIn()
                }
              }
            })
  • 将剩余的待消除元素均分至source和source1
 let len = Math.ceil(source.length /2)
      source.forEach((v,i) => {
        let div = $('<div>')
        div.addClass('item')
        div.attr('inx', v.inx)
        div.css('backgroundImage', `url(${v.src})`)
        div.css('position', 'absolute')
        div.css('top', 0)
        if (i>len) {
          div.css('right', `${5*(i-len)}px`)
          $('#source1').append(div)
          
        } else {
          div.css('left', `${5*i}px`)
          $('#source').append(div)
        }
        
        ...
  • 同样添加点击事件处理

  • 初始化处理清空容器的相关逻辑

 $('#box').empty()
      $('#temp').empty()
      $('#source').empty()
      $('#source1').empty()
      $('.result').fadeOut()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/511526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【OC底层-类和对象深基】

文章目录 前言1 类和对象1.1 类1.1.1 cache_t 和 class_data_bits_t 1.2 对象 2 isa指针&#xff08;结构体&#xff09;复习-OC中的对象实例对象&#xff08;Instance&#xff09;类对象(Class)元类对象isa的指向方法调用顺序&#xff08;不涉及消息转发&#xff09; 2.1 unio…

JavaScrip 实战案例之【实现动画导航栏效果】

​Hello~ 咱们今天一起来学习一个动画导航的小项目 Part 1 HTML结构 <body><nav class"active" id"nav"><ul><li><a href"#">Home</a></li><li><a href"#">Works</a>&…

Cy5.5-PEG-NH2/SH/COOH/MAL,NH2-PEG-Cy5.5;CY5.5-聚乙二醇-氨基文章介绍

Cy5.5-PEG-NH2 cy5.5-聚乙二醇-氨基 中文名称&#xff1a;CY5.5-聚乙二醇-氨基 英文名称&#xff1a;Cy5.5-PEG-NH2 溶剂&#xff1a;溶于水、氯仿&#xff0c;DMSO等常规性有机溶剂 性状&#xff1a;固体或粉末&#xff0c;取决于分子量 分子量&#xff1a;1k、2k、3.4k、…

计算机视觉(4)—— 未有深度学习之前

目录 四、未有深度学习之前 4.1 图像分割 4.1.1 基于阈值分割 4.1.2 基于边缘分割 4.1.3 基于区域分割 &#xff08;1&#xff09;区域生长法 &#xff08;2&#xff09;分水岭算法 4.1.4 基于图论分割 &#xff08;1&#xff09;Graph Cuts 分割 ​&#xff08;2&…

关于说服(三)- 表达

关于口才 一般人眼中的口才好&#xff1a; 有见解&#xff0c;有想法内容条理分明&#xff0c;逻辑清晰严谨真诚自信&#xff0c;拉近距离 这些都关注于逻辑与内容&#xff0c;真正的表达是要教你如何输出有价值的信息 表达需要做什么&#xff1a; 如何筛选素材&#xff0c…

【P16】JMeter JSON提取器(JSON Extractor)

文章目录 一、准备工作二、测试计划设计 一、准备工作 慕慕生鲜&#xff1a; http://111.231.103.117/#/login 进入网页后&#xff0c;登录&#xff0c;页面提供了账户和密码 搜索框输入“虾” 右键检查或按F12&#xff0c;打开调试工具&#xff0c;点击搜索 二、测试计划设…

Cy5.5-PEG-FA结构式 荧光Cy5.5标记聚乙二醇叶酸;PEG分子量2000,叶酸(-FA)基团可应用于靶向传递

Cy5.5-PEG-FA&#xff0c;Cy5.5-聚乙二醇-叶酸 中文名称&#xff1a;Cy5.5-聚乙二醇-叶酸 英文名称&#xff1a;Cy5.5-PEG-FA 溶剂&#xff1a;溶于水、氯仿&#xff0c;DMSO等常规性有机溶剂 性状&#xff1a;固体或粉末&#xff0c;取决于分子量 分子量&#xff1a;1k、…

OSS 文件文件夹 直接打包下载

前言 OSS 存放了很多项目&#xff08;项目是 TMagic 低代码平台编辑生成&#xff0c;自动上传 OSS&#xff09;&#xff0c;现在需要在管理后台将项目打包ZIP下载&#xff0c;并不在本地生成文件。 OSS 要下载项目文件&#xff1a; 一、思路实现 创建 OSSClient 实例获取 Bu…

198页11万字智慧水务平台建设方案(word)

目 录 一、项目概述 1、建设背景 2、存在问题 2、运营分析 二、支持技术 1、3S技术 2、物联网技术 3、富客户端技术 4、移动互联网技术 三、建设目标 三、需求分析 1、系统用户 2、调度管理对象 3、业务需求分析 3.1 主要业务描述 3.2 业务需求…

Mal-PEG2000-Cy5.5;Cy5.5-PEG-Maleimide 花箐染料Cy5.5-聚乙二醇-马来酰亚胺

CY5.5-PEG-Mal&#xff0c;CY5.5-聚乙二醇-马来酰亚胺 中文名称&#xff1a;CY5.5-聚乙二醇-马来酰亚胺 英文名称&#xff1a;CY5.5-PEG-Mal&#xff0c; Cy5.5-PEG-Maleimide 溶剂&#xff1a;溶于水、氯仿&#xff0c;DMSO等常规性有机溶剂 性状&#xff1a;固体或粉末&a…

车载以太网 - SomeIP - TC8用例常见缩写

对于初接触SomeIP的朋友来说,看测试用例最大的烦恼我想不仅仅是来自纯英文的描述,更多的一定无休止的缩写,那这些缩写到底代表什么意思呢,我也是深受其害的人,因此就把对应的缩写、中文、英文整理出来了,希望能对大家有所帮助。 常见缩写及中英文注释 SomeIP常见缩写英文…

第一章 电路模型和电路定律(习题解析)

第一章 电路模型和电路定律&#xff08;习题解析&#xff09; 简介&#xff1a; 书后面的习题详解&#xff0c;主要包含的内容关联方向与非关联方向、功率平衡 电路基础&#xff08;第一章电路模型和电路定律&#xff09;第一章电路模型和电路定律&#xff08;补充&#xff09;…

Bentley ContextCapture Center操作入门(1)

什么是ContextCapture Center 使用照片或激光雷达点云为城市等最大规模的项目生成详细的 3D 实景网格。 ContextCapture Center具有强大的计算能力&#xff0c;可以轻松处理非常大的项目。它利用网格计算&#xff0c;通过在多台计算机上运行多个引擎并将它们关联到单个作业队列…

261页10万字政务服务一网通办平台建设方案(word)

目 录 第1章 项目建设概述 1.1 建设背景 1.2 建设意义 1.3 现状分析 1.4 建设目标 1.4.1 政务服务标准化 1.4.2 政务服务精准化 1.4.3 政务服务便捷化 1.4.4 政务服务平台化 1.4.5 政务服务协同化 1.5 建设原则 1.6 建设内容 1.7 编制依据 &#x…

前端本地存储方案-localForage

1 前言 前端有多种本地存储方案可供选择&#xff0c;以下是其中一些常见的方案&#xff1a; Cookie&#xff1a;Cookie是一种小型的文本文件&#xff0c;可以在浏览器中存储少量数据。Cookie通常用于存储会话信息或用户偏好设置等数据&#xff08;只能存储少量数据&#xff0…

动态规划-数字三角形模型

title: 数字三角形模型 date: 2023-05-10 14:26:11 categories: Algorithm动态规划 tags:动态规划数字三角形 数字三角形 Number Triangles 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可…

Cy5.5-聚乙二醇-羟基;PEG2000;Cy5.5-PEG-OH结构式以及相关信息介绍

中文名称Cy5.5-聚乙二醇-羟基 英文名称Cy5.5-PEG-OH 性状&#xff1a;蓝色或深蓝色固体或粘性液体&#xff0c;取决于分子量 溶剂&#xff1a;溶于水、氯仿、DMSO等常规性有机溶剂 激发/发射波长&#xff1a;655nm/678nm 分子量PEG:1k、2k、3.4k、5k其他分子量可以制定 分…

vue3 - 实现文字横向滚动 / 垂直翻滚功能组件,类似喇叭广告、公告、跑马灯的文字滚动效果(详细组件源码与注释,一键复制开箱即用!)

效果图 在 vue3.js 项目中,完成了文字横向 / 纵向自动重复滚动效果组件,支持设置滚动区域宽高、背景色、展示条数、滚动间隔、横向纵向-方向切换等等,丝滑流畅! 无任何第三方插件依赖,详细的示例及注释,轻松一键复制组件源码开箱即用! 第一步 创建文字滚动组件TextSc…

22年山东省B-2网页渗透测试

首先这道题目就是ip/1找flag的题目,所以我们直接来看环境: 这个题目直接使用抓包 修改头部即可拿到flag 我们接着看一道题目: 这道题目

输入url后,到页面展示出来

目录 1、用户在浏览器中输入url地址 2、缓存解析 3、浏览器进行DNS解析域名得到服务器ip地址 4、TCP三次握手建立客户端和服务器的连接 5、客户端发送HTTP请求获取服务器端的静态资源 6、服务器发送HTTP响应报文给客户端&#xff0c;客户端获取到页面静态资源 7、TCP四次…