這次為大家帶來怎樣使用vue實現2048小遊戲,使用vue實現2048小遊戲的注意事項有哪些,下面就是實戰案例,一起來看一下。
使用方法:
git clone npm i npm run dev
實作想法如下:
用vue-cli搭建項目,對這個項目可能有點笨重,但是也懶的再搭一個
4X4的方格用一個二維數組存放,綁定好後只關心這個二維數組,其他事交給vue
監聽鍵盤事件
#2048的核心部分就是移動合併的演算法,因為是4X4的矩陣,所以只要實現左移的演算法,其他方向的移動只需要將矩陣旋轉,移動合併,再旋轉回來,渲染dom即可
#關鍵實作
##DOM<p class="box">
<p class="row" v-for="row in list">
<p class="col" :class="'n-'+col" v-for="col in row">{col}}</p>
</p>
</p>
主要由以下幾種情況:
##因為一輪移動中,一個數字只能合併一次,所以每個格子要有merged參數來記錄是否已經合併過。
_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中文網其它相關文章!
推薦閱讀:
如何操作Vue內使用vee-validatenode跨域使用express http-proxy- middleware步驟詳解
#
以上是怎麼使用vue實現2048小遊戲的詳細內容。更多資訊請關注PHP中文網其他相關文章!