vue3开发打砖块游戏代码怎么写
完整代码
template>button@click="stop"> 停止/button>
button@click="start"> 游戏开始/button>
divstyle="color:red; text-align:center; font-size:25px"> score:{ { scroce} } /div>
divclass="box":style="{ width:boxWidth+"px",height:boxHeight+"px"} ">
divclass="str"> { { str} } /div>
divclass="kuaiBox">
divclass="kuai"v-for="(item,index)inarr":key="index":style="{ opacity:item.active?"0":"1"} "> /div>
/div>
divclass="ball":style="{ left:x+"px",top:y+"px",width:ball+"px",height:ball+"px"} "> /div>
divclass="bottomMove"
:style="{ left:mx+"px",top:my+"px",width:moveBottomW+"px",height:moveBottomH+"px"} "> /div>
/div>
/template>
scriptsetup>
import{ onMounted,onUnmounted,reactive,toRefs} from"vue"
constboxWidth=500,//场景宽度
boxHeight=300,//场景高度
ball=10,//小球的宽高
moveBottomH=5,//移动方块高度
moveBottomW=100//移动方块快读
conststrArr="恭喜你,挑战成功!!"
//用reactive保存一些可观察信息
conststate=reactive({
x:boxWidth/2-ball/2,//小球x轴位置信息计算默认位置在中间
y:boxHeight-ball-moveBottomH,//小球Y轴的位置信息计算默认位置在中间
mx:boxWidth/2-moveBottomW/2,//移动方块的位置信息计算默认位置在中间
my:boxHeight-moveBottomH,//移动方块y轴的的位置信息计算默认位置在中间
//被打击方块的数组
arr:Array.from({ length:50} ,(_,index)=> {
return{
index,
active:false
}
} ),
str:"",//返回挑战成功字眼
scroce:0//分数
} )
//用toRefs将观察对象的信息解构出来供模板使用
const{ x,y,mx,my,arr,str,scroce} =toRefs(state)
lettimer=null,//小球定时器
speed=3,//小球速度
map={ x:10,y:10} ,
timer2=null,//挑战成功字眼显示定时器
index=0//挑战成功字眼续个显示的索引值
//挑战成功字眼续个显示的方法
conststrFun=()=> {
if(strArr.length===index)clearInterval(timer2)
state.str+=strArr.substr(index,1)
index++
}
//移动小球的方法
//1.这里同过变量map对象来记录坐标信息,确定小球碰到左右上及移动方块是否回弹
//2.循环砖块检测小球碰撞到砖块消失
constmoveBall=()=> {
const{ offsetTop,offsetHeight,offsetLeft,offsetWidth} =document.querySelector(".bottomMove")
if(state.x=0){
map.x=speed
} elseif(state.x> boxWidth-ball){
map.x=-speed
}
if(state.y=0){
map.y=speed
}
if(state.y> =offsetTop-offsetHeight& &
state.y=offsetTop+offsetHeight& &
state.x> =offsetLeft& &
state.xoffsetLeft+offsetWidth){
map.y=-speed
}
if(state.y> boxHeight){
clearInterval(timer)
alert("gameover")
window.location.reload()
}
Array.from(state.arr).forEach((item,index)=> {
const{
offsetLeft,
offsetTop,
offsetWidth,
offsetHeight
} =document.querySelectorAll(".kuai")[index]
if(state.x> offsetLeft
& & state.xoffsetLeft+offsetWidth
& & state.y> offsetTop
& & state.yoffsetTop+offsetHeight){
if(!state.arr[index].active){
state.scroce+=100
}
state.arr[index].active=true
}
} )
if(Array.from(state.arr).every(item=> item.active)){
clearInterval(timer)
timer2=setInterval(strFun,1000)
}
state.x=state.x+=map.x
state.y=state.y+=map.y
}
//移动方块左右移动方法,接住小球
constbottomMove=ev=> {
if(ev.code==="Space")clearInterval(timer)
switch(ev.key){
case"ArrowRight":
state.mx+=100
break
case"ArrowLeft":
state.mx-=100
break
}
state.mx=state.mx0?0:state.mx
state.mx=state.mx> boxWidth-moveBottomW?boxWidth-moveBottomW:state.mx
}
//暂停游戏
conststop=()=> {
clearInterval(timer)
}
//开始游戏
conststart=()=> {
timer=setInterval(moveBall,20)
}
//绑定移动方块事件
onMounted(()=> {
document.addEventListener("keyup",bottomMove)
} )
//移动出移动方块事件
onUnmounted(()=> {
clearInterval(timer)
} )
/script>
style>
.bottomMove{
width:100px;
height:10px;
background:red;
position:absolute;
transition-duration:100ms;
transition-timing-function:ease-out;
}
.ball{
width:20px;
height:20px;
background-color:red;
border-radius:50%;
position:absolute;
}
.kuaiBox{
display:flex;
flex-wrap:wrap;
}
.kuai{
width:30px;
height:10px;
background:red;
margin:10px;
transition-duration:100ms;
transition-timing-function:ease-in;
}
.str{
text-align:center;
font-size:50px;
color:red;
}
.box{
justify-content:center;
width:500px;
height:500px;
margin:0auto;
position:relative;
border:5pxsolidred;
overflow:hidden;
}
.picker{
width:50px;
height:50px;
}
/style>
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: vue3开发打砖块游戏代码怎么写
本文地址: https://pptw.com/jishu/500722.html