欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue實現(xiàn)2048小游戲功能思路詳解

 更新時間:2018年05月09日 11:02:45   作者:dry0106  
這篇文章主要介紹了vue實現(xiàn)2048小游戲功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

試玩地址

項目地址

使用方法:

git clone
npm i
npm run dev

實現(xiàn)思路如下:

  1. 用vue-cli搭建項目,對這個項目可能有點(diǎn)笨重,但是也懶的再搭一個
  2. 4X4的方格用一個二維數(shù)組存放,綁定好后只關(guān)心這個二維數(shù)組,其他事交給vue
  3. 監(jiān)聽鍵盤事件
  4. 2048的核心部分就是移動合并的算法,因為是一個4X4的矩陣,所以只要實現(xiàn)左移的算法,其他方向的移動只需要將矩陣旋轉(zhuǎn),移動合并,再旋轉(zhuǎn)回來,渲染dom即可
  5. 綁定不同數(shù)值的樣式
  6. 分值計算,以及用localstorage存放最高分

關(guān)鍵實現(xiàn)

DOM

<div class="box">
  <div class="row" v-for="row in list">
    <div class="col" :class="'n-'+col" v-for="col in row">{col}}</div>
  </div>
</div>

主要的游戲部分的DOM,很簡單,用一個二維數(shù)組渲染,并動態(tài)綁定樣式

左移

主要由以下幾種情況:

  • 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

按單行數(shù)據(jù)舉例,

  1. 遍歷單行數(shù)組,若存在數(shù)據(jù),記為cell,尋找cell往左可移到的最遠(yuǎn)空位置farthest
  2. 判斷farthest的左邊是否存在,不存在則直接移到到farthest
  3. 若存在,則判斷farthest - 1的值和cell是否相同
  4. 相同=> 合并
  5. 不相同=>移到farthest位置
  6. 移動完后,清空cell
  7. 下一輪

因為一輪移動中,一個數(shù)只能合并一次,所以每個格子要有merged參數(shù)來記錄是否已經(jīng)合并過。

主要代碼:

_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
      }
    }
  })

矩陣旋轉(zhuǎn)

因為上移,下移,左移,右移實際上是相同的,寫4遍也可以,但是容易出錯,所以我直接旋轉(zhuǎn)將矩陣旋轉(zhuǎn),再進(jìn)行移動。

以上移為例,只要將矩陣逆時針旋轉(zhuǎn)一次,上移就變成了左移,移動合并成之后,只要再將矩陣逆時針旋轉(zhuǎn)4-1次,矩陣就和單純上移一樣了。

逆時針旋轉(zhuǎn)算法:

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
  },

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

總結(jié)

以上所述是小編給大家介紹的vue實現(xiàn)2048小游戲功能思路詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Vue實現(xiàn)記住賬號密碼功能的操作過程

    Vue實現(xiàn)記住賬號密碼功能的操作過程

    這篇文章主要介紹了Vue實現(xiàn)記住賬號密碼功能,用戶登錄時若勾選“記住我”功能選項,則將登錄名和密碼(加密后)存入本地緩存,下次登錄頁面加載時自動獲取保存好的賬號和密碼(需解密),回顯到登錄輸入框中,下面分享我實現(xiàn)的具體步驟,需要的朋友可以參考下
    2022-07-07
  • 詳解VUE自定義組件中用.sync修飾符與v-model的區(qū)別

    詳解VUE自定義組件中用.sync修飾符與v-model的區(qū)別

    這篇文章主要介紹了詳解VUE自定義組件中用.sync修飾符與v-model的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 詳解Vue中router-view組件的使用

    詳解Vue中router-view組件的使用

    router-view組件作為vue最核心的路由管理組件,在項目中作為路由管理經(jīng)常被使用到,所以下面小編就來和大家詳細(xì)聊聊router-view組件的具體使用方法,希望對大家有所幫助
    2023-06-06
  • uniapp一鍵打包H5的詳細(xì)步驟

    uniapp一鍵打包H5的詳細(xì)步驟

    uniapp如何打包到H5并成功發(fā)布,以及在打包過程中會遇到的坑如何解決,本文將一一講解,文中通過圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2024-10-10
  • vue 中固定導(dǎo)航欄的實例代碼

    vue 中固定導(dǎo)航欄的實例代碼

    今天小編就為大家分享一篇vue 中固定導(dǎo)航欄的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue?mergeProps用法詳細(xì)講解

    Vue?mergeProps用法詳細(xì)講解

    這篇文章主要介紹了Vue?mergeProps用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • vue2.0 elementUI制作面包屑導(dǎo)航欄

    vue2.0 elementUI制作面包屑導(dǎo)航欄

    本篇文章主要給大家詳細(xì)代碼講解了vue2.0 elementUI制作面包屑導(dǎo)航欄的過程,對此有興趣的朋友可以學(xué)習(xí)下。
    2018-02-02
  • vue實現(xiàn)列表的添加點(diǎn)擊

    vue實現(xiàn)列表的添加點(diǎn)擊

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)列表的添加點(diǎn)擊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 使用vue-router在Vue頁面之間傳遞數(shù)據(jù)的方法

    使用vue-router在Vue頁面之間傳遞數(shù)據(jù)的方法

    這篇文章主要介紹了使用vue-router在Vue頁面之間傳遞數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • vue下history模式刷新后404錯誤解決方法

    vue下history模式刷新后404錯誤解決方法

    這篇文章主要介紹了vue下history模式刷新后404錯誤解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論