天天看點

js小遊戲-别踩白塊兒js+jq面向對象程式設計-别踩白塊兒。首先是css部分然後是html部分最後是js部分

js+jq面向對象程式設計-别踩白塊兒。

一個非常簡單的小遊戲。點選黑色會變成白色,,點選白色或者碰到大盒子下邊框遊戲結束。

排版比較簡單,js代碼也非常好了解,而且不到100行,使用的方法也非常簡單。

js小遊戲-别踩白塊兒js+jq面向對象程式設計-别踩白塊兒。首先是css部分然後是html部分最後是js部分
js小遊戲-别踩白塊兒js+jq面向對象程式設計-别踩白塊兒。首先是css部分然後是html部分最後是js部分

首先是css部分

<style>
        * {
            margin: 0;
            padding: 0;
        }

        #app {
            width: 408px;
            height: 608px;
            border: 1px solid #ccc;
            margin: auto;
            overflow: hidden;
            position: relative;
        }

        .row {
            position: absolute;
            top: -150px;
            left: 0;
        }

        .row div {
            float: left;
            width: 100px;
            height: 150px;
            border: 1px solid #ccc;
        }

        .row .black {
            background: black;
            background-size: 100% 100%;
        }

        .white {
            background: #fff;
            background-size: 100% 100%;
        }

        .tits {
            text-align: center;
            position: fixed;
            top: 680px;
            left: 50%;
            transform: translate(-50%, -50%);
        }

        .tits p {
            height: 50px;
            line-height: 50px;
            font-size: 33px;
            color: red
        }

        #gameOver {
            width: 408px;
            height: 608px;
            background: #fff;
            position: fixed;
            top: 305px;
            left: 50%;
            text-align: center;
            transform: translate(-50%, -50%);
            color: red;
            display: none;
            border: 1px solid #ccc
        }

        #gameOver h1 {
            margin-top: 200px;
        }
    </style>
           

然後是html部分

<body>
   <div id="app">
        <!-- 遊戲區域 -->
    </div>
    <div id="gameOver">
        <h1>遊戲結束</h1>
        <br>
        <p>下次繼續努力吧</p>
    </div>
    <div class="tits">
        <p>别踩白塊兒</p>
        目前分數為<span id='score'>0</span>分
    </div>
</body>
           

最後是js部分

js部分需要引入jq架構

<script src="./jquery-1.12.4.min.js"></script>
           

添加方塊

首先往對象中添加方塊。

定義一個數組,用來存放class名,并且預設全部顯示為白色,寫一個随機數,随機其中一個為黑色。

并且把他們周遊放進class為row的div裡面,最後顯示在頁面中。

設定計時器,算出每次添加的時間。每次添加的時間 = 每次移動的時間 ✖ 盒子的高度 ➗ 定義好的速度

var game = {
  speed: 5, //定義速度
}
    // 連續添加
  addRows() {
      time = (20 * 150) / game.speed
      addRows = setInterval(() => {
          // 加載4個白色,随機一個為黑色
          load = ['white', 'white', 'white', 'white']
          BlackPosition = Math.floor(Math.random() * 4)
          load[BlackPosition] = 'black'
          var str = ''
          for (var i = 0; i < load.length; i++) {
              str += ` <div class='${load[i]}' ></div>`
          }
          app.innerHTML += `<div class='row' name='${game.list}'>${str}</div>`
          game.list++
      }, time)
  },
           

方塊移動

周遊所有的行(.row),通過改變它的top值, 來實作移動。

當超出大盒子,就清除了這一行。

周遊所有的黑色方塊,放黑色方塊碰到盒子底部,遊戲結束,并且清除所有的計數器。

// 移動
    rowMove() {
        rowMoves = setInterval(function () {
            // 周遊所有行 并且移動
            $.each($('.row'), (v, i) => {
                $(i).css('top', i.offsetTop + game.speed)
                // 當超出距離就删除這一行
                if ($(i).offset().top > $('#app').height()) {
                    $(i).remove()
                }
            })
            // 周遊黑色塊 當超出距離就清除計時器
            $.each($('.black'), (v, i) => {
                if ($(i).offset().top >= 458) {
                    clearInterval(rowMoves)
                    clearInterval(addRows)
                    $('#app').hide()
                    $('#gameOver').show()
                }
            })
        }, 20)
    },
           

點選消除黑色塊

給一個滑鼠擡起事件,并且加上事件代理t = e.target || window.event 相容ie。

當點選的class名字為white 遊戲結束,清除所有的計時器。

當點選的為黑色塊時,并且是目前行,就讓這個色塊變為白色。定義的nowLstClick++ 。

nowLstClick判斷是不是目前行,如果是就可以點選,否則不允許點選。

判斷原理就是給每行都設定一個name屬性,目前可點選的列的值等于name屬性,就是目前行,可以消除黑色塊,否則不允許。

// 點選消除黑塊
    removeBlack() {
        $(window).mouseup(function (e) {
            e = e || e.srcElement
            t = e.target || window.event //事件代理
            // 當點選為白色遊戲結束
            if (t.className == 'white') {
                clearInterval(rowMoves)
                clearInterval(addRows)
                $('#app').hide()
                $('#gameOver').show()
            }
            if (
                //判斷當點選的為黑塊,并且目前為可點選狀态 消除黑塊
                t.className == 'black' &&
                $(t).parent().attr('name') == game.nowLstClick
            ) {
                $(t).attr('class', 'white')
                game.nowLstClick++
                // 顯示分數
                $('#score').html(game.nowLstClick)
            }
        })
    },
           

完整js代碼

$(function () {
   game.init('app')
})
var game = {
   speed: 5, //定義速度
   list: 0, //一共多少列
   nowLstClick: 0,
   init() {
       this.addRows()
       this.rowMove()
       this.removeBlack()
   },
   // 連續添加
   addRows() {
       time = (20 * 150) / game.speed
       addRows = setInterval(() => {
           // 加載4個白色,随機一個為黑色
           load = ['white', 'white', 'white', 'white']
           BlackPosition = Math.floor(Math.random() * 4)
           load[BlackPosition] = 'black'
           var str = ''
           for (var i = 0; i < load.length; i++) {
               str += ` <div class='${load[i]}' ></div>`
           }
           app.innerHTML += `<div class='row' name='${game.list}'>${str}</div>`
           game.list++
       }, time)
   },
   // 移動
   rowMove() {
       rowMoves = setInterval(function () {
           // 周遊所有行 并且移動
           $.each($('.row'), (v, i) => {
               $(i).css('top', i.offsetTop + game.speed)
               // 當超出距離就删除這一行
               if ($(i).offset().top > $('#app').height()) {
                   $(i).remove()
               }
           })
           // 周遊黑色塊 當超出距離就清除計時器
           $.each($('.black'), (v, i) => {
               if ($(i).offset().top >= 458) {
                   clearInterval(rowMoves)
                   clearInterval(addRows)
                   $('#app').hide()
                   $('#gameOver').show()
               }
           })
       }, 20)
   },
   // 點選消除黑塊
   removeBlack() {
       $(window).mouseup(function (e) {
           t = e.target || window.event //事件代理
           // 當點選為白色遊戲結束
           if (t.className == 'white') {
               clearInterval(rowMoves)
               clearInterval(addRows)
               $('#app').hide()
               $('#gameOver').show()
           }
           if (
               //判斷當點選的為黑塊,并且目前為可點選狀态 消除黑塊
               t.className == 'black' &&
               $(t).parent().attr('name') == game.nowLstClick
           ) {
               $(t).attr('class', 'white')
               game.nowLstClick++
               // 顯示分數
               $('#score').html(game.nowLstClick)
           }
       })
   },
}
           

總體實作非常簡單,隻封裝了3個方法,如果對您有幫助,就請伸出您的貴手點個贊吧!!!祝您2021好運連連,桃花泛濫,天天無bug!

繼續閱讀