首頁 > web前端 > js教程 > 使用vue實現2048小遊戲步驟詳解

使用vue實現2048小遊戲步驟詳解

php中世界最好的语言
發布: 2018-05-22 14:51:45
原創
2306 人瀏覽過

這次帶給大家使用vue實現2048小遊戲步驟詳解,使用vue實現2048小遊戲的注意事項有哪些,下面就是實戰案例,一起來看一下。

git clone
npm i
npm run dev
登入後複製

實現想法如下:

  1. 用vue-cli搭建項目,對這個項目可能有點笨重,但是也懶的再搭一個

  2. 4X4的方格用一個二維數組存放,綁定好後只關心這個二維數組,其他事交給vue

  3. 監聽鍵盤事件

  4. 2048的核心部分就是移動合併的演算法,因為是4X4的矩陣,所以只要實現左移的演算法,其他方向的移動只需要將矩陣旋轉,移動合併,再旋轉回來,渲染dom即可

  5. 綁定不同數值的樣式

  6. ##分值計算,以及用localstorage存放最高分

關鍵實作

##
<p class="box">
  <p class="row" v-for="row in list">
    <p class="col" :class="&#39;n-&#39;+col" v-for="col in row">{col}}</p>
  </p>
</p>
登入後複製

主要的遊戲部分的DOM,很簡單,用一個二維數組渲染,並動態綁定樣式

左移

主要由以下幾種情況:

2 2 2 2 => 4 4 0 0

  • 4 2 2 2 => 4 4 2 0

  • 0 4 2 2=> 4 4 0 0

  • 2 2 4 2 => 4 4 2 0

  • #按單行資料舉例,

遍歷單行數組,若存在數據,記為cell,尋找cell往左可移到的最遠空位置farthest

  1. 判斷farthest的左邊是否存在,不存在則直接移到farthest

  2. 若存在,則判斷farthest - 1的值和cell是否相同

  3. 相同=> 合併

  4. #不相同=>移到farthest位置

  5. 移動完後,清空cell

  6. 下一輪

  7. #因為一輪移動中,數字只能合併一次,所以每個格子要有merged參數來記錄是否已經合併過。

  8. 主要代碼:
_list.forEach(item => {
    let farthest = this.farthestPosition(list, item)
    let next = list[farthest - 1]
    if (next && next === item.value && !_list[farthest - 1].merged) {
      //合并
      list[farthest - 1] = next * 2
      list[item.x] = undefined
      item = {
        x: farthest - 1,
        merged: true,
        value: next * 2
      }
      this.score += next * 2
    } else {
      if (farthest != item.x) {
        list[farthest] = item.value
        list[item.x] = undefined
        item.x = farthest
      }
    }
  })
登入後複製

矩陣旋轉

#因為上移,下移,左移,右移實際上是相同的,寫4遍也可以,但是容易出錯,所以我直接旋轉將矩陣旋轉,再進行移動。 以上移為例,只要將矩陣逆時針旋轉一次,上移就變成了左移,移動合併成之後,只要再將矩陣逆時針旋轉4-1次,矩陣就和單純上移一樣了。

逆時針旋轉演算法:

rotate(arr, n) {
    n = n % 4
    if (n === 0) return arr
    let tmp = Array.from(Array(this.size)).map(() => Array(this.size).fill(undefined))
    for (let i = 0; i < this.size; i++) {
      for (let j = 0; j < this.size; j++) {
        tmp[this.size - 1 - i][j] = arr[j][i]
      }
    }
    if (n > 1) tmp = this.rotate(tmp, n - 1)
    return tmp
  },
登入後複製

到這時候已經完成了80%了,只要再完善一下,加入分數,重新開始等功能就可以了。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

VeeValidate在vue專案裡表單校驗使用案例程式碼分析

JavaScript DOM元素增刪改步驟詳解

以上是使用vue實現2048小遊戲步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板