|
|
@ -54,7 +54,7 @@ |
|
|
|
|
|
|
|
|
<view class="tips"> |
|
|
<view class="tips"> |
|
|
<text>规则:点选未被压住的卡牌,底部槽内3张相同自动消除,槽满则失败。</text> |
|
|
<text>规则:点选未被压住的卡牌,底部槽内3张相同自动消除,槽满则失败。</text> |
|
|
<text>挑战难度 · 剩余 {{remainingCount}} 张 · 当前可点 {{availableCount}} 张 · {{riskText}}</text> |
|
|
<text>地狱难度 · 剩余 {{remainingCount}} 张 · 当前可点 {{availableCount}} 张 · {{riskText}}</text> |
|
|
</view> |
|
|
</view> |
|
|
|
|
|
|
|
|
<view class="board"> |
|
|
<view class="board"> |
|
|
@ -70,9 +70,9 @@ |
|
|
</view> |
|
|
</view> |
|
|
|
|
|
|
|
|
<view class="slot-wrap"> |
|
|
<view class="slot-wrap"> |
|
|
<view class="slot-title">助推槽 {{slots.length}}/7</view> |
|
|
<view class="slot-title">助推槽 {{slots.length}}/{{slotLimit}}</view> |
|
|
<view class="slots"> |
|
|
<view class="slots"> |
|
|
<view class="slot" v-for="i in 7" :key="i"> |
|
|
<view class="slot" v-for="i in slotLimit" :key="i"> |
|
|
<text v-if="slots[i - 1]">{{slots[i - 1].icon}}</text> |
|
|
<text v-if="slots[i - 1]">{{slots[i - 1].icon}}</text> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
@ -139,6 +139,7 @@ |
|
|
startTs: 0, |
|
|
startTs: 0, |
|
|
cards: [], |
|
|
cards: [], |
|
|
slots: [], |
|
|
slots: [], |
|
|
|
|
|
slotLimit: 5, |
|
|
moveCount: 0, |
|
|
moveCount: 0, |
|
|
modal: { show: false, title: '', sub: '' } |
|
|
modal: { show: false, title: '', sub: '' } |
|
|
} |
|
|
} |
|
|
@ -181,8 +182,8 @@ |
|
|
return this.cards.filter(item => !item.removed && !item.selected && !this.isLocked(item)).length |
|
|
return this.cards.filter(item => !item.removed && !item.selected && !this.isLocked(item)).length |
|
|
}, |
|
|
}, |
|
|
riskText() { |
|
|
riskText() { |
|
|
if (this.slots.length >= 6) return '危险:差1格就满' |
|
|
if (this.slots.length >= this.slotLimit - 1) return '危险:差1格就满' |
|
|
if (this.slots.length >= 5) return '注意槽位' |
|
|
if (this.slots.length >= this.slotLimit - 2) return '注意槽位' |
|
|
return '先看上层再下手' |
|
|
return '先看上层再下手' |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
@ -255,7 +256,7 @@ |
|
|
}) |
|
|
}) |
|
|
}, |
|
|
}, |
|
|
buildLevel() { |
|
|
buildLevel() { |
|
|
const icons = ['🍔', '🥤', '📚', '🏀', '🎧', '🚲', '🍜', '📦', '☕', '🧋'] |
|
|
const icons = ['🍔', '🥤', '📚', '🏀', '🎧', '🚲', '🍜', '📦', '☕', '🧋', '🎮', '🌟', '🍟', '🥪'] |
|
|
let cards = [] |
|
|
let cards = [] |
|
|
for (let attempt = 0; attempt < 8; attempt++) { |
|
|
for (let attempt = 0; attempt < 8; attempt++) { |
|
|
const seed = this.levelSeed() + '_try_' + attempt |
|
|
const seed = this.levelSeed() + '_try_' + attempt |
|
|
@ -272,21 +273,21 @@ |
|
|
}, |
|
|
}, |
|
|
buildCardPositions(seed) { |
|
|
buildCardPositions(seed) { |
|
|
const cards = [] |
|
|
const cards = [] |
|
|
const layerCounts = [36, 30, 24] |
|
|
const layerCounts = [42, 36, 30, 18] |
|
|
const rand = this.seededRandom(seed + '_pos') |
|
|
const rand = this.seededRandom(seed + '_pos') |
|
|
let idx = 0 |
|
|
let idx = 0 |
|
|
layerCounts.forEach((count, layer) => { |
|
|
layerCounts.forEach((count, layer) => { |
|
|
for (let i = 0; i < count; i++) { |
|
|
for (let i = 0; i < count; i++) { |
|
|
const col = i % 6 |
|
|
const col = i % 7 |
|
|
const row = Math.floor(i / 6) |
|
|
const row = Math.floor(i / 7) |
|
|
const dx = Math.floor(rand() * 22) |
|
|
const dx = Math.floor(rand() * 18) |
|
|
const dy = Math.floor(rand() * 18) |
|
|
const dy = Math.floor(rand() * 14) |
|
|
const card = { |
|
|
const card = { |
|
|
id: 'c' + idx, |
|
|
id: 'c' + idx, |
|
|
icon: '', |
|
|
icon: '', |
|
|
layer, |
|
|
layer, |
|
|
x: 16 + col * 80 + (layer * 20) + ((row % 2) * 12) + dx, |
|
|
x: 12 + col * 70 + (layer * 16) + ((row % 2) * 10) + dx, |
|
|
y: 18 + row * 70 + (layer * 42) + dy, |
|
|
y: 16 + row * 62 + (layer * 34) + dy, |
|
|
style: '', |
|
|
style: '', |
|
|
removed: false, |
|
|
removed: false, |
|
|
selected: false, |
|
|
selected: false, |
|
|
@ -353,7 +354,7 @@ |
|
|
}) |
|
|
}) |
|
|
}, |
|
|
}, |
|
|
isOverlap(a, b) { |
|
|
isOverlap(a, b) { |
|
|
return Math.abs(a.x - b.x) < 72 && Math.abs(a.y - b.y) < 68 |
|
|
return Math.abs(a.x - b.x) < 66 && Math.abs(a.y - b.y) < 58 |
|
|
}, |
|
|
}, |
|
|
pickCard(card) { |
|
|
pickCard(card) { |
|
|
if (this.cleared) { |
|
|
if (this.cleared) { |
|
|
@ -365,14 +366,14 @@ |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
if (card.removed || card.selected || this.isLocked(card)) return |
|
|
if (card.removed || card.selected || this.isLocked(card)) return |
|
|
if (this.slots.length >= 7) return |
|
|
if (this.slots.length >= this.slotLimit) return |
|
|
card.selected = true |
|
|
card.selected = true |
|
|
this.slots.push(card) |
|
|
this.slots.push(card) |
|
|
this.moveCount++ |
|
|
this.moveCount++ |
|
|
this.tryClear(card.icon) |
|
|
this.tryClear(card.icon) |
|
|
if (this.cards.every(item => item.removed || item.selected)) { |
|
|
if (this.cards.every(item => item.removed || item.selected)) { |
|
|
this.finishClear() |
|
|
this.finishClear() |
|
|
} else if (this.slots.length >= 7) { |
|
|
} else if (this.slots.length >= this.slotLimit) { |
|
|
this.failLevel() |
|
|
this.failLevel() |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
|