溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

js實(shí)現(xiàn)一款簡(jiǎn)單踩白塊小游戲(曾經(jīng)很火)

發(fā)布時(shí)間:2020-09-08 01:29:02 來(lái)源:腳本之家 閱讀:162 作者:風(fēng)吹麥田的聲音 欄目:web開(kāi)發(fā)

效果圖如下所示:

js實(shí)現(xiàn)一款簡(jiǎn)單踩白塊小游戲(曾經(jīng)很火)

html

 <div class="bigbox">
    <!-- 顯示游戲的區(qū)域 -->
    <div class="gamequyu">
      <!-- 上面顯示一個(gè)游戲開(kāi)始的按鈕 -->
      <div class="start">游戲開(kāi)始</div>
      <!-- 再顯示一個(gè)游戲的主體部分 -->
      <div class="zhuti"></div>
      <div class="zhezhaoceng"></div>

    </div>
    <!-- 下面再顯示一個(gè)計(jì)分的盒子 -->
    <div class="jifen">當(dāng)前分?jǐn)?shù):0</div>
  </div>

js

<script>
    // 先找到主體內(nèi)容的盒子,添加到這個(gè)盒子中去
    var zhuti = document.getElementsByClassName('zhuti')[0];
    //找到計(jì)分 , 每點(diǎn)擊一次, 就讓分?jǐn)?shù)++;
    var jifen = document.getElementsByClassName('jifen')[0];
    // 找到游戲開(kāi)始按鈕, 點(diǎn)擊讓它影藏,結(jié)束時(shí)顯示并把里面的文字改變?yōu)?游戲結(jié)束'
    var start = document.getElementsByClassName('start')[0];
    // 找到遮罩層, 結(jié)束游戲的時(shí)候顯示
    var zhezhaoceng = document.getElementsByClassName('zhezhaoceng')[0];
    // addbox('row')
    //動(dòng)態(tài)創(chuàng)建盒子的函數(shù)
    function addbox(classname) {
      // 思路: 
      // 1: 先封裝一個(gè)函數(shù)動(dòng)態(tài)的創(chuàng)建盒子;
      // 2: 一個(gè)盒子里裝了四個(gè)小盒子;
      // 3: 隨機(jī)一個(gè)數(shù),讓這四個(gè)小盒子的某一個(gè)的顏色改為黑色 ;
      // 4: 給這個(gè)小盒子添加類名,設(shè)置樣式;
      // 5: 隨機(jī)數(shù)作為下標(biāo), 給這個(gè)隨機(jī)數(shù)的下標(biāo)的小盒子添加一個(gè)類名;
      // 6: 添加到'zhuti'里面去,顯示在頁(yè)面上(如果zhuti里面有內(nèi)容了,就要添加到所有內(nèi)容的最前面,如果沒(méi)有,接直接添加)
      // 生成隨機(jī)數(shù)作為四個(gè)盒子的下標(biāo)
      var index = Math.floor(Math.random() * 4)
      // console.log(index);
      //創(chuàng)建一個(gè)盒子; 
      var bigdiv = document.createElement('div');
      bigdiv.className = classname;
      // 再依次創(chuàng)建四個(gè)小盒子;添加到剛剛創(chuàng)建的大盒子中;
      for (var i = 0; i < 4; i++) {
        var smallbox = document.createElement('div')
        bigdiv.appendChild(smallbox)
      }
      // 判斷主體里面有沒(méi)有盒子 ; 
      // 如果已經(jīng)存在盒子,就要添加到它們的最前面
      // 如果沒(méi)有,就可以直接添加到頁(yè)面上
      if (zhuti.children.length == 0) {
        zhuti.appendChild(bigdiv)
      } else {
        zhuti.insertBefore(bigdiv, zhuti.children[0])
      }
      // 給隨機(jī)下標(biāo)的盒子添加樣式的背景色為黑色;
      bigdiv.children[index].style.backgroundColor = 'black';
      // 再給這個(gè)隨機(jī)的盒子添加一點(diǎn)東西,可以用來(lái)做判斷
      bigdiv.children[index].className = 'random_box';
    }
    //計(jì)分與控制速度的函數(shù)
    function move(obj) {
      // 封裝一個(gè)計(jì)時(shí)器移動(dòng)的方法, 讓主體內(nèi)的內(nèi)容動(dòng)起來(lái);
      // 思路: 
      //   1: 先獲取元素的最終樣式,距離頂部的top值;
      //   2: 聲明兩個(gè)變量; 一個(gè)用來(lái)改變?cè)鼐嚯x頂部的top值; 一個(gè)用來(lái)計(jì)分?jǐn)?shù); 
      var num = 0;
      var sudu = 5;
      // 創(chuàng)建一個(gè)計(jì)時(shí)器讓它緩動(dòng)顯示到頁(yè)面
      //在樣式里面就設(shè)置了top值為-150px;
      //通過(guò)計(jì)時(shí)器讓它的top值緩動(dòng)到頁(yè)面, 當(dāng)它的top值等于0的時(shí)候,又讓它的top值變?yōu)?150px;
      //就調(diào)用創(chuàng)建元素的方法再創(chuàng)建一個(gè)盒子,讓它插在這個(gè)顯示在頁(yè)面上的盒子的前面
      obj.timeID = setInterval(function () {
        var nowtop = parseInt(getComputedStyle(obj)['top']) + sudu;
        // console.log(nowtop);
        obj.style.top = nowtop + 'px';
        if (parseInt(getComputedStyle(obj)['top']) >= 0) {
          addbox('row')
          obj.style.top = -150 + 'px'
        }
        // 判斷條件:在移動(dòng)的時(shí)候,如果用戶沒(méi)有點(diǎn)擊到帶有顏色的盒子,讓盒子超過(guò)了界限;就結(jié)束游戲;
        if (obj.children.length == 6) {
          for (var i = 0; i < 4; i++) {
            if (obj.children[obj.children.length - 1].children[i].className == 'random_box') {

              jifen.innerHTML = '當(dāng)前最高得分:' + num;
              start.style.display = 'block'
              start.innerHTML = '小朋友, 游戲結(jié)束';
              start.style.display = 'block';
              start.style.backgroundColor = 'green';
              start.style.height = 60 + 'px';
              start.style.fontSize = 30 + 'px';
              zhezhaoceng.style.display = 'block';
              clearInterval(obj.timeID)

            }
          }
          // 讓主體的內(nèi)容的長(zhǎng)度永遠(yuǎn)等于6,如果不等于6,就會(huì)出現(xiàn)按下第一個(gè)帶'random_box'類名的小盒子,之后就不會(huì)再回到以上的判斷里面了;
          obj.removeChild(obj.children[obj.children.length - 1])
        }
        // console.log(obj.children.length);

        // 判斷用戶點(diǎn)擊的時(shí)候:條件:如果沒(méi)有點(diǎn)中指定的盒子(類名為'random_box')的盒子,就結(jié)束游戲;不然就計(jì)分num++;
        obj.onmousedown = function (event) {
          // 根據(jù)事件對(duì)象里面的事件源來(lái)進(jìn)行判斷;
          //當(dāng)它的事件源的名字等于'random_box'的時(shí)候;
          if (event.target.className == 'random_box') {
            // 讓這個(gè)事件源的的背景色變?yōu)榧t色;
            event.target.style.backgroundColor = 'red';
            //當(dāng)用戶點(diǎn)擊了事件源時(shí),把他的類名清空, 不然只變了顏色,到了第6個(gè),判斷類名還是'random_box'時(shí), 就會(huì)結(jié)束游戲;
            event.target.className = '';
            // 計(jì)分
            num++;
            // 顯示在當(dāng)前得分的盒子里
            jifen.innerHTML = '當(dāng)前得分' + num;
          } else {
            // 結(jié)束游戲
            clearInterval(obj.timeID)
            start.style.display = 'block';
            start.style.backgroundColor = 'green';
            start.style.height = 60 + 'px';
            start.style.fontSize = 30 + 'px';
            start.innerHTML = '游戲結(jié)束!再來(lái)一局';
            jifen.innerHTML = '最終得分' + num;
            // 讓遮罩層顯示
            zhezhaoceng.style.display = 'block';
          }
          // 加速(判斷分?jǐn)?shù)到了多少時(shí),讓主體下降的top值變大)
          if (num % 5 == 0) {
            sudu++;
          }
        }

      }, 20)
    }
    // 當(dāng)它點(diǎn)擊開(kāi)始按鈕的時(shí)候,再調(diào)用函數(shù);運(yùn)行起來(lái);
    start.onclick = function () {
      //如果事重新來(lái)一局,那就先把頁(yè)面上已經(jīng)創(chuàng)建的盒子先清除;
      if (zhuti.children.length != 0) {
        zhuti.innerHTML = ''
      }
      // 讓遮罩層隱藏
      zhezhaoceng.style.display = 'none';
      // 讓開(kāi)始的按鈕影藏 
      this.style.display = 'none';
      jifen.innerHTML = '當(dāng)前得分:0'
      move(zhuti)
    }
  </script>

css

<style>
    .bigbox {
      width: 400px;
      height: auto;
      border: 1px solid #2d2d2d;
      margin: 100px auto 0 auto;
    }

    .gamequyu {
      width: 100%;
      height: 600px;
      position: relative;
      overflow: hidden;
      background-color: #fefefe;
      /* background: url("./dog.png") no-repeat; */
      background-size: 100%;
    }

    .start {
      position: absolute;
      width: 400px;
      height: 50px;
      color: white;
      text-align: center;
      line-height: 50px;
      background-color: brown;
      font-size: 30px;
      cursor: pointer;
      z-index: 9999;
    }

    .zhuti {
      width: 100%;
      height: 600px;
      position: absolute;
      top: -150px;
    }

    .jifen {
      width: 400px;
      height: 50px;
      font-size: 30px;
      text-align: center;
      line-height: 50px;
      color: white;
      margin: 0 auto;
      background-color: brown;
    }

    .row {
      width: 400px;
      height: 150px;

    }

    .row div {
      width: 100px;
      height: 150px;
      border: 1px solid #343434;
      border-top-width: 0;
      border-left-width: 0;
      float: left;
      cursor: pointer;
      box-sizing: border-box;
    }

    .zhezhaoceng {
      width: 100%;
      height: 100%;
      position: absolute;
      z-index: 999;
      display: none;
    }
  </style>

總結(jié)

以上所述是小編給大家介紹的js實(shí)現(xiàn)一款簡(jiǎn)單踩白塊小游戲,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)億速云網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI