2022-09-16 19:06:06 +08:00
|
|
|
|
<template>
|
|
|
|
|
<div id="gamePage">
|
2022-09-17 23:32:26 +08:00
|
|
|
|
<a-row align="space-between">
|
|
|
|
|
<a-button style="margin-bottom: 8px" @click="doBack"> 返回</a-button>
|
|
|
|
|
<a-button>块数:{{ clearBlockNum }} / {{ totalBlockNum }}</a-button>
|
|
|
|
|
</a-row>
|
|
|
|
|
<!-- 胜利 -->
|
2022-09-16 19:06:06 +08:00
|
|
|
|
<a-row align="center">
|
2022-09-16 22:41:26 +08:00
|
|
|
|
<div v-if="gameStatus === 3" style="text-align: center">
|
|
|
|
|
<h2>恭喜,你赢啦!🎉</h2>
|
2022-09-17 12:09:46 +08:00
|
|
|
|
<img alt="程序员鱼皮" src="../assets/kunkun.png" />
|
2022-09-18 00:20:52 +08:00
|
|
|
|
<my-ad style="margin-top: 16px" />
|
2022-09-16 22:41:26 +08:00
|
|
|
|
</div>
|
2022-09-17 23:32:26 +08:00
|
|
|
|
</a-row>
|
|
|
|
|
<!-- 分层选块 -->
|
|
|
|
|
<a-row align="center">
|
2022-09-17 12:09:46 +08:00
|
|
|
|
<div v-show="gameStatus > 0" class="level-board">
|
|
|
|
|
<div v-for="(block, idx) in levelBlocksVal" :key="idx">
|
|
|
|
|
<div
|
|
|
|
|
v-if="block.status === 0"
|
|
|
|
|
class="block level-block"
|
|
|
|
|
:class="{ disabled: block.lowerThanBlocks.length > 0 }"
|
|
|
|
|
:data-id="block.id"
|
|
|
|
|
:style="{
|
|
|
|
|
zIndex: 100 + block.level,
|
|
|
|
|
left: block.x * widthUnit + 'px',
|
|
|
|
|
top: block.y * heightUnit + 'px',
|
|
|
|
|
}"
|
|
|
|
|
@click="() => doClickBlock(block)"
|
|
|
|
|
>
|
|
|
|
|
{{ block.type }}
|
|
|
|
|
</div>
|
2022-09-16 19:06:06 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2022-09-17 23:32:26 +08:00
|
|
|
|
</a-row>
|
|
|
|
|
<!-- 随机选块 -->
|
|
|
|
|
<a-row align="space-between" class="random-board">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(randomBlock, index) in randomBlocksVal"
|
|
|
|
|
:key="index"
|
|
|
|
|
class="random-area"
|
|
|
|
|
>
|
2022-09-16 19:06:06 +08:00
|
|
|
|
<div
|
2022-09-17 23:32:26 +08:00
|
|
|
|
v-if="randomBlock.length > 0"
|
|
|
|
|
:data-id="randomBlock[0].id"
|
2022-09-16 19:06:06 +08:00
|
|
|
|
class="block"
|
2022-09-17 23:32:26 +08:00
|
|
|
|
@click="() => doClickBlock(randomBlock[0], index)"
|
2022-09-16 19:06:06 +08:00
|
|
|
|
>
|
2022-09-17 23:32:26 +08:00
|
|
|
|
{{ randomBlock[0].type }}
|
2022-09-16 19:06:06 +08:00
|
|
|
|
</div>
|
2022-09-17 23:32:26 +08:00
|
|
|
|
<!-- 隐藏 -->
|
|
|
|
|
<div
|
|
|
|
|
v-for="num in Math.max(randomBlock.length - 1, 0)"
|
|
|
|
|
:key="num"
|
|
|
|
|
class="block disabled"
|
|
|
|
|
></div>
|
|
|
|
|
</div>
|
|
|
|
|
</a-row>
|
|
|
|
|
<!-- 槽位 -->
|
|
|
|
|
<a-row v-if="slotAreaVal.length > 0" align="center" class="slot-board">
|
|
|
|
|
<div v-for="(slotBlock, index) in slotAreaVal" :key="index" class="block">
|
|
|
|
|
{{ slotBlock?.type }}
|
2022-09-16 19:06:06 +08:00
|
|
|
|
</div>
|
2022-09-17 23:32:26 +08:00
|
|
|
|
</a-row>
|
|
|
|
|
<!-- 技能 -->
|
|
|
|
|
<div class="skill-board">
|
|
|
|
|
<a-space>
|
2022-09-17 12:09:46 +08:00
|
|
|
|
<a-button size="small" @click="doRevert">撤回</a-button>
|
|
|
|
|
<a-button size="small" @click="doRemove">移出</a-button>
|
|
|
|
|
<a-button size="small" @click="doShuffle">洗牌</a-button>
|
|
|
|
|
<a-button size="small" @click="doBroke">破坏</a-button>
|
|
|
|
|
</a-space>
|
2022-09-17 23:32:26 +08:00
|
|
|
|
</div>
|
2022-09-16 19:06:06 +08:00
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
|
|
import useGame from "../core/game";
|
|
|
|
|
import { onMounted } from "vue";
|
|
|
|
|
import { useRouter } from "vue-router";
|
2022-09-18 00:20:52 +08:00
|
|
|
|
import MyAd from "../components/MyAd.vue";
|
2022-09-16 19:06:06 +08:00
|
|
|
|
|
|
|
|
|
const router = useRouter();
|
|
|
|
|
|
|
|
|
|
const {
|
|
|
|
|
gameStatus,
|
|
|
|
|
levelBlocksVal,
|
|
|
|
|
randomBlocksVal,
|
|
|
|
|
slotAreaVal,
|
|
|
|
|
widthUnit,
|
|
|
|
|
heightUnit,
|
2022-09-17 23:32:26 +08:00
|
|
|
|
totalBlockNum,
|
|
|
|
|
clearBlockNum,
|
2022-09-16 19:06:06 +08:00
|
|
|
|
doClickBlock,
|
|
|
|
|
doStart,
|
2022-09-17 12:09:46 +08:00
|
|
|
|
doShuffle,
|
|
|
|
|
doBroke,
|
|
|
|
|
doRemove,
|
|
|
|
|
doRevert,
|
2022-09-16 19:06:06 +08:00
|
|
|
|
} = useGame();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 回上一页
|
|
|
|
|
*/
|
|
|
|
|
const doBack = () => {
|
|
|
|
|
router.back();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
doStart();
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
.level-board {
|
|
|
|
|
position: relative;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.level-block {
|
|
|
|
|
position: absolute;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.random-board {
|
|
|
|
|
margin-top: 8px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.random-area {
|
|
|
|
|
margin-top: 8px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.slot-board {
|
|
|
|
|
border: 10px solid saddlebrown;
|
2022-09-17 23:32:26 +08:00
|
|
|
|
margin: 16px auto;
|
|
|
|
|
width: fit-content;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.skill-board {
|
|
|
|
|
text-align: center;
|
2022-09-16 19:06:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.block {
|
|
|
|
|
font-size: 28px;
|
|
|
|
|
width: 42px;
|
|
|
|
|
height: 42px;
|
|
|
|
|
line-height: 42px;
|
|
|
|
|
border: 1px solid #eee;
|
|
|
|
|
background: white;
|
|
|
|
|
text-align: center;
|
|
|
|
|
vertical-align: top;
|
|
|
|
|
display: inline-block;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.disabled {
|
|
|
|
|
background: grey;
|
|
|
|
|
cursor: not-allowed;
|
|
|
|
|
}
|
|
|
|
|
</style>
|