JS小球游戏

小球游戏

描述:

小球最开始会停在红色div中间

点一下红色div任意位置小球开始移动

可以用键盘的方向键控制红色板子移动

如果小球没有落在红色板子上则弹出 游戏失败

实现代码

css代码

		*{
            margin: 0;
            padding: 0;
        }
        #console-output {
            position: fixed;
            top: 0;
            right: 0;
            width: 200px;
            height: 50%;
            background-color: #f1f1f1;
            overflow-y: scroll;
            padding: 10px;
        }

        .f {
            width: 1200px;
            height: 800px;
            border: 1px solid red;
            position: relative;
        }

        .z {
            width: 100px;
            height: 100px;
            border-radius: 50%;
            background-color: aqua;
            position: absolute;
            left: 550px;
            top: 350px;
        }

        #tanban {
            background-color: red;
            width: 200px;
            height: 50px;
            position: absolute;
            bottom: 0px;
        }

html代码

	<!-- 红色大div框框 -->
	<div class="f" onclick="startGame()">
        <!-- 移动小球 -->
        <div id="ball" class="z"></div>
    </div>
	<!-- 可移动的红色板子 -->
    <div id="tanban" style="left:0px;top: 800px;"></div>

js代码

	//生成0-1200的随机整数
    let r = Math.floor(Math.random() * 1200)
    console.log(r)
    //随机点的坐标是(r,50)
    //小球球心的坐标
    let x = 600, y = 400
    //计算x和y之间运动距离的倍数关系
    let x_y = (x - r) / (y - 50)
    let dy = -1 //表示 单位时间 沿着y轴向上移动
    let dx = x_y * dy

    //获取小球的dom对象
    let ball = document.getElementById('ball')

    //点击父元素任意位置 开始游戏
    function startGame() {
        setInterval(() => {
            // console.log(x,y)
            //检测下面有没有板子
            if (y > 750) {
                if(x>parseInt(box.style.left)+200 || x<parseInt(box.style.left)){
                    alert("游戏失败")
                }
            }
            //上下碰撞 这里 50 和 750 都是把小球的半径算了进去 因为小球移动的是球心
            //所以圆形点里边框还有50px距离 也就是球的边边碰到了框框尽头开始反弹 
            if (y <= 50 || y > 750) {
                dy = -dy
            }
            //左右碰撞
            if (x <= 50 || x >= 1150) {
                dx = -dx
            }
            //
            x += dx
            y += dy
            //把坐标作用到实际的位置上
            ball.style.left = x - 50 + 'px';
            ball.style.top = y - 50 + 'px';

            
        }, 5);
    }


	//控制板子移动
    var box = document.getElementById("tanban")
    document.onkeydown = function (event) {
        switch (event.keyCode) {
            case 39:
                if (parseInt(box.style.left) == 1020) {
                    break
                }
                //找到当前元素的left值
                var left = box.style.left
                var x = parseInt(left)
                //console.log(x)
                var result = x + 30
                box.style.left = result + "px"
                break
            case 37:
                if (parseInt(box.style.left) == 0) {
                    break
                }
                var left = parseInt(box.style.left)
                box.style.left = left - 30 + "px"
                break
        }
    }

效果图

动画.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值