JS小案例: 贪吃蛇

直接上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Canvas测试</title>
    <script type="application/javascript">
        window.onload = function () {
            //绘图对象
            var can = document.getElementById("m_canvas");
            //38为向上按键的值, 默认蛇向上走ml
            var kc = 38;//↑
            document.onkeydown = function (key) {
                if (Math.abs(kc - key.keyCode) != 2) {
                    kc = key.keyCode;
                }
            };
            var context = can.getContext("2d");
            var array = [{x: 200, y: 150}, {x: 200, y: 155}];
            var bean = null;//豆子
            //绘图方法, 循环调用绘制图形
            function draw() {
                //蛇头
                var point = {x: array[0].x, y:array[0].y};//point就是一个对象,
                switch (kc) {
                    case 37://←
                        point.x -= 5;
                        break;
                    case 38://↑
                        point.y -= 5;
                        break;
                    case 39://→
                        point.x += 5;
                        break;
                    case 40://↓
                        point.y += 5;
                        break;
                }
                if (bean == null) {
                    var x = Math.floor(Math.random() * 80) * 5;
                    var y = Math.floor(Math.random() * 60) * 5;
                    bean = {x: x, y: y};
                }

                //蛇头移动
                for (var i = array.length; i >= 0; i--) {
                    if (i == array.length) {
                        //判断一下蛇头跟豆子在不在同一个位置
                        if (point.x == bean.x && point.y == bean.y) {
                            array[i] = array[i - 1];
                            bean = null;
                        }
                    } else if (i > 0) {
                        array[i] = array[i - 1];
                    } else {
                        array[i] = point;
                    }
                }

                if (bean == null) {
                    var x = Math.floor(Math.random() * 80) * 5;
                    var y = Math.floor(Math.random() * 60) * 5;
                    bean = {x: x, y: y};
                }

                //画出矩形
                context.fillStyle = "#000000";
                context.fillRect(0, 0, 400, 300);
                //
                context.fillStyle = "#ff0000";

                for (var i= 0; i < array.length; i++) {
                    context.fillRect(array[i].x, array[i].y, 5, 5);
                }
                context.fillStyle = "#00ff00";
                context.fillRect(bean.x, bean.y, 5, 5);


                setTimeout(draw, 200);
            }

            setTimeout(draw, 200);

        }
    </script>
</head>
<body>


<!--单写canvas没有任何意义-->
<canvas id="m_canvas" width="400" height="300">天哪你怎么还不支持canvas</canvas>

</body>
</html>


执行效果

这里写图片描述

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值