比羊了个羊还难的游戏:捕获YoYo

5,205 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

游戏玩法

玩家通过鼠标点击的方式打开灯光,假如运气好找到yoyo的藏身地,那么游戏会直接结束,假如运气不好,那么yoyo会更新藏身的位置,游戏难度地狱级,假如你找到了yoyo,那么抓紧下楼买彩票吧,今天你的运气一定爆表了

游戏机制

当点击开始运行后,游戏计时开始,玩家通过鼠标点击的方式打开一个50x50的区域,假如在区域内发现yoyo,则游戏结束,否则yoyo将会更新他的位置。

游戏实现

  • 背景 背景采用了简单的背景图的方式,整体css盒模型采用了border-box
  * {
    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;
    overflow: hidden;
  }

  • yoyo 哟哟采用的是背景图的形式,图片来源于掘金的登录页
#yoyo{
    width: 50px;
    height: 50px;
    background-image: url('https://pic.qy566.com/snake/bg.jpeg');
    background: #666;
    background-size: cover;
    position: absolute;
  }
  <div id="yoyo"></div>
  • 幕布 为了将yoyo藏起来,我们还需要一张幕布,这里采用纯色背景来实现
.cover{
    width: 100%;
    height: 100%;
    background: #333;
    position: absolute;
    top: 0;
    left: 0;
  }
<div class="cover"></div>
  • 计时器 计时器采用了setInterval定时器来实现,页面加载完成就开始及时
#time{
    width: 350px;
    height: 40px;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    margin: auto;
    color: #fff;
    font-size: 20px;
    line-height: 40px;
    text-align: center;
    z-index: 999;
  }
  <div id="time"></div>
  let time = new Date().getTime()
  let timer = setInterval(() => {
    let t = (new Date().getTime() - time) / 1000
    $('#time').text(t+'秒')
  }, 10)
  • 捕获灯光 捕获灯光默认是隐藏状态,通过鼠标点击激活,并进行处理
#light{
    width: 50px;
    height: 50px;
    background: transparent;
    border-radius: 50%;
    box-shadow: 0 0 1000px 10000px #333;
    position: absolute;
    display: none;
  }
 <div id="light"></div>
 
  • yoyo 位置更新的实现 通过获取容器宽高,赋予随机的位置
let w = document.body.clientWidth - 100 
  let h = document.body.clientHeight - 100
  let YTop = null
  lrandomPos()
  function randomPos () {
    YTop = Math.random() * h
    YLeft = Math.random() * w
    $('#yoyo').css('top',YTop + 'px')
    $('#yoyo').css('left', YLeft + 'px')
  }et YLeft = null

  • 捕获yoyo的判断实现: 判断鼠标点击坐标-yoyo坐标的绝对值是否小于50,小于50则表示命中
 document.body.onmousedown = function (e) {
    let top = e.pageY - 25
    let left = e.pageX - 25
    $('#light').css('top', top+'px')
    $('#light').css('left', left+'px')
    $('#light').show()
    $('.cover').hide()
    if(Math.abs(left-YLeft)<=50 && Math.abs(top-YTop)<=50){
      clearInterval(timer)
      document.body.onmousedown = null
      document.body.onmouseup = null
      $('#time').text('恭喜你,成功解救YOYO,用时:'+$('#time').text())
      return false
    }
    document.body.onmouseup = function () {
      randomPos()
      $('#light').hide()
      $('.cover').show()
    }
  }

码上掘金

代码通过码上掘金的形式发布,欢迎试玩,游戏难度爆高!可以说是比羊了个羊还狗的游戏~