前端小游戏像素鸟的实现

像素鸟游戏

像素鸟游戏是一款简单的H5+JS+CSS就可以实现的小游戏。
图片大小有限制截图了一部分
图片大小有限制截图了一部分
下面为大家贴上代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <style>
        #box{
            width: 800px;
            height: 600px;
            background-image: url("./assets/images/sky.png");
            background-color: #000;
            overflow: hidden;
            position: relative;
            transition: 0.1s all;
        }
        #birds{
            width: 52px;
            height: 45px;
            overflow: hidden;
            top: 200px;
            position: absolute;
            background: url("./assets/images/birds.png") ;
        }
        #box img{
            width: 52px;
            height: 420px;
            position: absolute;
            /* transition: 0.1s all; */

        }
        #title{
            display: none;
            width: 400px;
            height: 300px;
            position: absolute;
            left: 180px;
            top: 150px;
            background: #fff;
            border: 5px solid #555;  
        }
        #title div{
            font-size: 50px;
            margin-top: 100px;
            margin-left: 80px;
        }
        #integral{
            position: absolute;
            right: 30px;
            top: 10px;
            font-size: 20px
        }
    </style>
    <title>Document</title>
</head>
<body>
    <div id="box">
        <div id="birds">
        </div>
            <img style="top: -100px;left :200px;" src="./assets/images/pipe2.png" width="52px" height="320px" alt="">
            <img style="top: 420px;left :200px;" src="./assets/images/pipe1.png" alt="">
            <img style="top: -150px;left :400px;"  src="./assets/images/pipe2.png" alt="">
            <img style="top: 370px;left :400px;" src="./assets/images/pipe1.png" alt="">
            <img style="top: -200px;left :600px;" src="./assets/images/pipe2.png" alt="">
            <img style="top: 320px;left :600px;" src="./assets/images/pipe1.png" alt="">
            <img style="top: -160px;left :800px;" src="./assets/images/pipe2.png" alt="">
            <img style="top: 360px;left :800px;" src="./assets/images/pipe1.png" alt="">    
            <div id="integral">
                    <span>积分</span>
                    <span id="num">0</span>
            </div>
    </div>
    
    <div id="title"> 
        <div>游戏结束</div> </div>
    <script>
        let box = document.getElementById("box")
        let birds = document.getElementById("birds")
        let barrier = box.getElementsByTagName("img")
        let integralCom = document.getElementById("num")
        //地图属性
        let integralNum = 0;
        let num = -4,Speed = 20
        //小鸟属性
        let bird = 200, birdSpeed = 10, power = 0, birdX = 0, birdBckgroundSpeed = 52;
        //管道属性
        let barrierSpeed = 10
        //设置暂停属性 
        let isStop = false
        function stop(){
            // 当游戏暂停 所有属性清空
                Speed = 0
                birdSpeed = 0
                power = 0
                birdBckgroundSpeed = 0
                barrierSpeed = 0
                let title = document.getElementById("title")
                title.style.display = "block"
        }
        setInterval(() => {
            //当达到底部 或者超越顶部 就停止游戏
            if(birds.offsetTop >= 560 || birds.offsetTop <= 3 || isStop){
                stop()
            }
            for(let i = 0; i < barrier.length; i++){
                //当前位置 = 原来位置 - 移动速度
                let left =  barrier[i].offsetLeft - barrierSpeed
                if(left >= -52){
                    if(barrier[i].style.transition == ""){
                        barrier[i].style.transition = "0.1s all"
                    }
                    //修改Left 实现移动
                    barrier[i].style.left = left + "px"
                }
                else{
                    barrier[i].style.transition = ""
                    //柱子到达左边 返回重新分配高度
                    barrier[i].style.left = 800 + "px"
                    //积分加1
                    integralNum +=1
                    integralCom.innerText = integralNum/2
                    if(i%2 == 0){
                        //上侧柱子的高度分配
                        let random = Math.random()*130 + 170
                        let top = random - barrier[i].offsetHeight 
                        barrier[i].style.top = top + "px"
                    }
                    else{
                        //下侧柱子的高度分配
                        let random = Math.random()*70 + 50
                        barrier[i].style.top = (barrier[i-1].offsetHeight + barrier[i-1].offsetTop +random) + "px"
                    }
                }
                // 判断小鸟是否和柱子碰撞
                if(i%2 == 0){
                    // 判断小鸟是否和上侧柱子碰撞
                    if( birds.offsetTop < barrier[i].offsetHeight + barrier[i].offsetTop - 11 && 
                    ((birds.offsetLeft + birds.offsetWidth - 8 < barrier[i].offsetLeft + barrier[i].offsetWidth &&
                        birds.offsetLeft + birds.offsetWidth + 8 > barrier[i].offsetLeft)||(
                        birds.offsetLeft - 8 < barrier[i].offsetLeft + barrier[i].offsetWidth &&
                        birds.offsetLeft + 8 > barrier[i].offsetLeft))
                        
                    )
                    {
                        isStop = true
                        stop()
                    }
                }
                else{
                    // 判断小鸟是否和上侧柱子碰撞
                    if( birds.offsetTop + birds.offsetHeight - 11 > barrier[i].offsetTop && 
                    ((birds.offsetLeft + birds.offsetWidth - 8 < barrier[i].offsetLeft + barrier[i].offsetWidth &&
                        birds.offsetLeft + birds.offsetWidth + 8 > barrier[i].offsetLeft)||(
                        birds.offsetLeft - 8  < barrier[i].offsetLeft + barrier[i].offsetWidth &&
                        birds.offsetLeft + 8 > barrier[i].offsetLeft))
                        
                    )
                    {
                        isStop = true
                        stop()
                    }
                }
            }
            //对小鸟的上飞速度进行逐减  模拟重力
            if( power > 0){
                power = power - 10
            }
            if(birdX == -156){
                birdX = 0
            }
            //对小鸟的图片进行替换 实现 小鸟振翅飞行
            birds.style.backgroundPositionX = birdX + "px"
            birdX -= birdBckgroundSpeed 
            num -= Speed
            bird = bird + birdSpeed - power
            //对背景图片进行移动 使得小鸟感觉是在向前飞 
            box.style.backgroundPositionX =  num + "px"
            birds.style.top = bird + "px"
        },100)
        //键盘的空格点击事件
        document.onkeydown = function(ev) {
            if( ev.keyCode == 32 && birds.offsetTop < 560 && birds.offsetTop > 3){
                power = 30
            }
        }
    </script>
</body>
</html>

以下贴出素材
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值