最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

試玩地址

項(xiàng)目地址

使用方法:

git clone
npm i
npm run dev

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

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

關(guān)鍵實(shí)現(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. 下一輪

因?yàn)橐惠喴苿又校粋€數(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)

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

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

逆時(shí)針旋轉(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
  },

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

總結(jié)

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

相關(guān)文章

  • Vue3刷新頁面報(bào)錯404的解決方法

    Vue3刷新頁面報(bào)錯404的解決方法

    本文主要介紹了Vue3刷新頁面報(bào)錯404的解決方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 使用Vue3創(chuàng)建多布局系統(tǒng)的三種方法

    使用Vue3創(chuàng)建多布局系統(tǒng)的三種方法

    布局是中大型網(wǎng)站或應(yīng)用的基礎(chǔ),假設(shè)你正在創(chuàng)建一個網(wǎng)頁應(yīng)用,它包括主頁、營銷頁面和應(yīng)用頁面,你不會想要為每一頁重復(fù)所有的工作,對吧,與Nuxt不同,Vue 3并沒有內(nèi)置的布局系統(tǒng),但是別擔(dān)心,這里將向你展示3種簡單的方法來實(shí)現(xiàn)這一點(diǎn),需要的朋友可以參考下
    2023-08-08
  • Vue 路由間跳轉(zhuǎn)和新開窗口的方式(query、params)

    Vue 路由間跳轉(zhuǎn)和新開窗口的方式(query、params)

    這篇文章主要介紹了Vue 路由間跳轉(zhuǎn)和新開窗口的方式,本文主要通過query方式和params方式介紹,需要的朋友可以參考下
    2019-12-12
  • element中el-container容器與div布局區(qū)分詳解

    element中el-container容器與div布局區(qū)分詳解

    這篇文章主要介紹了element中el-container容器與div布局區(qū)分詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • vue shallowRef作用及引發(fā)問題詳解

    vue shallowRef作用及引發(fā)問題詳解

    這篇文章主要為大家介紹了vue shallowRef作用及引發(fā)問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 解決vue中監(jiān)聽input只能輸入數(shù)字及英文或者其他情況的問題

    解決vue中監(jiān)聽input只能輸入數(shù)字及英文或者其他情況的問題

    今天小編就為大家分享一篇解決vue中監(jiān)聽input只能輸入數(shù)字及英文或者其他情況的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • javascript中Set、Map、WeakSet、WeakMap區(qū)別

    javascript中Set、Map、WeakSet、WeakMap區(qū)別

    這篇文章主要介紹了javascript中Set、Map、WeakSet、WeakMap區(qū)別,需要的朋友可以參考下
    2022-12-12
  • 手把手教你Vue3?按需引入?Echarts的過程(收藏)

    手把手教你Vue3?按需引入?Echarts的過程(收藏)

    新項(xiàng)目采用?Vue3?作為前端項(xiàng)目框架,避免不了要使用?echarts,但是在使用的時(shí)候,出現(xiàn)了與?Vue2?使用不一樣的地方,所以特別記下來,希望給到有需要的同學(xué)一些幫助
    2023-10-10
  • vue路由傳參三種基本方式詳解

    vue路由傳參三種基本方式詳解

    這篇文章主要介紹了vue路由傳參三種基本方式詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 完美解決vue 項(xiàng)目開發(fā)越久 node_modules包越大的問題

    完美解決vue 項(xiàng)目開發(fā)越久 node_modules包越大的問題

    這篇文章主要介紹了vue 項(xiàng)目開發(fā)越久 node_modules包越大的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09

最新評論

灌云县| 东源县| 文登市| 客服| 桑植县| 江安县| 府谷县| 长葛市| 宜都市| 黄石市| 安福县| 合阳县| 揭西县| 沧源| 玉林市| 白水县| 莱西市| 平乡县| 无极县| 湟中县| 通海县| 刚察县| 皋兰县| 陵水| 陆丰市| 扶绥县| 淮安市| 宜宾县| 纳雍县| 临城县| 汉川市| 河东区| 固始县| 泊头市| 乳山市| 观塘区| 慈利县| 象山县| 宜宾县| 东阿县| 宁德市|