打砖块小游戏

打砖块

这是用原生js来写的一个打砖块小游戏,平时太闲了,没事就写了一个小游戏。感兴趣的小伙伴可以直接复制到自己电脑上玩一下

这里有一个浏览器兼容问题,在谷歌浏览器上结束的时候点击确定不能够重新开始,在火狐浏览器上是没有问题的。

下面直接上代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #slider {
            width: 600px;
            height: 600px;
            border: 1px solid #000000;
            margin: 50px auto;
            position: relative;
        }

        #ball {
            width: 20px;
            height: 20px;
            background: red;
            border-radius: 50%;
            position: absolute;
            bottom: 30px;
            left: 290px;

        }

        #hk {
            width: 100px;
            height: 30px;
            position: absolute;
            background: blue;
            bottom: 0;
            left: 250px;
        }

        #brik div {
            width: 98px;
            height: 18px;
            border: 1px solid #000000;
            float: left;
        }
    </style>
</head>

<body>
    <div id="slider">
        <div id="ball"></div>
        <div id="hk"></div>
        <div id="brik">
            <!-- <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div> -->
        </div>

    </div>

    <script>

        var oSlider = document.getElementById("slider");
        var oBall = document.getElementById("ball");
        var speedX = parseInt(Math.random() * 4) + 3;
        var speedY = -(parseInt(Math.random() * 3) + 5);
        setInterval(function () {

            oBall.style.left = oBall.offsetLeft + speedX + "px";
            oBall.style.top = oBall.offsetTop + speedY + "px";
            if (oBall.offsetLeft >= 580 || oBall.offsetLeft <= 0) {
                speedX *= -1;
            }
            if (oBall.offsetTop <= 0) {
                speedY *= -1;
            }
            if (oBall.offsetTop >= 580) {
                alert("GAME OVER");
                window.location.reload();
            }
            //测试小球和拍子的碰撞
            if (knoke(oBall, oHk)) {
                speedY *= -1;
            }
            //测试小球和砖块的碰撞
            for (var i = 0; i < oBriks.length; i++) {
                if (knoke(oBriks[i], oBall)) {
                    speedY *= -1;
                    oBrik.removeChild(oBriks[i]);
                    break;
                }
            }
        }, 20)

        var oHk = document.getElementById("hk");
        oHk.onmousedown = function (e) {
            // console.log("a")
            var evt = e || event;
            var offsetX = e.clientX - oHk.offsetLeft;
            document.onmousemove = function (e) {
                var evt = e || event;
                var l = e.clientX - offsetX;
                if (l <= 0) {
                    l = 0;
                }
                if (l >= 500) {
                    l = 500
                }
                oHk.style.left = l + "px";
            }
            document.onmouseup = function () {
                document.onmousemove = null;
            }
        }

        var oBrik = document.getElementById("brik");
        for (var i = 0; i < 60; i++) {
            var node = document.createElement("div");
            oBrik.appendChild(node);
            var str = "rgba(" + parseInt(Math.random() * 256) + "," + parseInt(Math.random() * 256) + "," + parseInt(Math.random() * 256) + ")"
            node.style.background = str;
        }
        //文档流转换定位
        var oBrik = document.getElementById("brik");
            var oBriks = oBrik.children;
            for (var i = 0; i < oBriks.length; i++) {
                oBriks[i].style.left = oBriks[i].offsetLeft + "px";
                oBriks[i].style.top = oBriks[i].offsetTop + "px";
            }
            for (var i = 0; i < oBriks.length; i++) {
                oBriks[i].style.position = "absolute";

            }






            //碰撞检测的封装
        function knoke(node1, node2) {
            l1 = node1.offsetLeft;
            r1 = node1.offsetLeft + node1.offsetWidth;
            t1 = node1.offsetTop;
            b1 = node1.offsetTop + node1.offsetHeight;

            l2 = node2.offsetLeft;
            r2 = node2.offsetLeft + node2.offsetWidth;
            t2 = node2.offsetTop;
            b2 = node2.offsetTop + node2.offsetHeight;

            if (l2 > r1 || r2 < l1 || t2 > b1 || b2 < t1) {
                return false;
            } else {
                return true;
            }
        }
    </script>
</body>

</html>

在这里需要注意的是一个碰撞检测,需要封装一个碰撞检测的函数,用到的地方直接来调用该函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值