sheep/src/pages/GamePage.vue

156 lines
3.4 KiB
Vue
Raw Normal View History

2022-09-16 19:06:06 +08:00
<template>
<div id="gamePage">
<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-16 22:41:26 +08:00
</div>
</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>
</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
v-if="randomBlock.length > 0"
:data-id="randomBlock[0].id"
2022-09-16 19:06:06 +08:00
class="block"
@click="() => doClickBlock(randomBlock[0], index)"
2022-09-16 19:06:06 +08:00
>
{{ randomBlock[0].type }}
2022-09-16 19:06:06 +08:00
</div>
<!-- 隐藏 -->
<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>
</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>
</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";
const router = useRouter();
const {
gameStatus,
levelBlocksVal,
randomBlocksVal,
slotAreaVal,
widthUnit,
heightUnit,
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;
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>