2048 小程式移植版
使用mpvue編寫的2048小程式, 僅供交流學習.
##圖檔展示
核心代碼
初始化
[00][01][02][03]
[10][11][12][13]
[20][21][22][23]
[30][31][32][33]
(例)左移
假設
索引為 => [00][01][02][03]
對應值 => 2 2 0 4
1.建立一個棧
2.從左入棧,如果入棧元素為0, 不做任何處理
否則每入一個棧之前和棧頂元素做對比
如果和棧頂元素不同,入棧 {number: x, flag: false}
如果和棧頂元素相同,并且flag==false把目前需要入棧的元素抛棄,把棧頂的元素抛出來,并乘以2,加上flag = true,防止多次累加
3.循環完成一輪之後進行解構指派
棧底第一個的值指派給[00]
棧底第二個的值指派給[01]
棧底第三個的值指派給[02]
棧底第四個的值指派給[03]
步驟展示
1. [00] => 2 需要入棧 {number:2, falg: false}
|{number:2, falg: false}|
|_______________________|
2. [01] => 2 需要入棧 {number:2, falg: false} , 和棧頂對比, 可以合并
|{number:2, falg: false}|
|_______________________|
∨
|{number:4, falg: true }|
|_______________________|
4. [02] => 0 直接抛棄
|{number:4, falg: true }|
|_______________________|
5. [03] => 4 需要入棧 {number:2, falg: false}, 和棧頂對比, 雖然數值一樣,但是flag=true, 無法合并, 入棧
|{number:4, falg: flase}|
|{number:4, falg: true }|
|_______________________|
--完成入棧, 進行指派解構--
[0][0] = 4
[0][1] = 4
[0][2] = 0
[0][3] = 0
代碼實作
for (let i = 0; i < 4; i++) {
var stack = new Stack() // 利用數組實作的棧結構
for (let j = 0; j < 4; j++) {
if (this.pie[i][j].number != 0) {
const top = stack.getTop()
if (!top.lock && top.number == this.pie[i][j].number) {
const current = stack.pop()
current.number *= 2
current.lock = true
stack.push(current)
} else {
stack.push({ number: this.pie[i][j].number, lock: false })
}
}
}
for (let j = 0; j < 4; j++) {
this.pie[i][j].number = stack.data[j] ? stack.data[j].number : 0
}
}
github源碼: https://github.com/MasterJoyHunan/2048-mp