简易贪吃蛇

<!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">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

 

        body {
            overflow: hidden;
        }

 

        .board {
            width: 600px;
            height: 600px;
            background: silver;
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);
        }

 

        .snake div {
            width: 30px;
            height: 30px;
            background: black;
            border-radius: 5px;
            position: absolute;
        }

 

        .snake .head {
            background: green;
            left: 90px;
            z-index: 2;
        }

 

        .snake div:nth-of-type(2) {
            left: 60px;
        }

 

        .snake div:nth-of-type(3) {
            left: 30px;
        }

 

        .snake div:nth-of-type(4) {
            left: 0px;
        }

 

        .food {
            width: 30px;
            height: 30px;
            background-image: url(shit.jpg);
            background-size: 100%;
            position: absolute;
        }
    </style>
</head>

 

<body>
    <button>快的</button>
    <button>慢的</button>
    <!-- <div class="food"></div> -->
    <div class="board">
        <div class="snake">
            <div class="head"></div>
            <div class="body"></div>
            <div class="body"></div>
            <div class="body"></div>
        </div>
    </div>
    <script>
        var moveId;
        var head = document.querySelector('.head');
        var speed = 30;
        var move_dir = 'down';
        var key_dir = 'down';
        function move(interval) {
            clearInterval(moveId)
            moveId = setInterval(function () {

 

                //移动蛇身体
                var body = document.querySelectorAll('.snake div');
                for (var i = body.length - 1; i > 0; i--) {
                    body[i].style.left = body[i - 1].offsetLeft + 'px'
                    body[i].style.top = body[i - 1].offsetTop + 'px'
                }
                if (key_dir === 'left' && move_dir === 'right' ||
                    key_dir === 'up' && move_dir === 'down' ||
                    key_dir === 'right' && move_dir === 'left' ||
                    key_dir === 'down' && move_dir === 'up'
                ) {
                    //do nothing
                } else {
                    move_dir = key_dir;
                }

 

                //移动蛇头
                var currentX = head.offsetLeft;
                var currentY = head.offsetTop;

 

                //有一个分支,来决定蛇的移动方向
                if (move_dir === 'right') {
                    head.style.left = currentX + speed + 'px'
                } else if (move_dir === 'left') {
                    head.style.left = currentX - speed + 'px'
                } else if (move_dir === 'up') {
                    head.style.top = currentY - speed + 'px'
                } else {
                    //down
                    head.style.top = currentY + speed + 'px'
                }

 

                die();
                eat();

 

            }, interval)
        }

 

        move(500)
        createFood();

 

        var KEY_CODE = {
            KEY_LEFT: 37,
            KEY_UP: 38,
            KEY_RIGHT: 39,
            KEY_DOWN: 40,
            KEY_W: 87
        }
        window.onkeydown = function (evt) {
            //evt.keyCode
            console.log(evt.which)
            switch (evt.which) {
                case KEY_CODE.KEY_LEFT:
                    // if (move_dir === 'right') {
                    //     return;
                    // }
                    key_dir = 'left'
                    break;
                case KEY_CODE.KEY_RIGHT:
                    // if (move_dir === 'left') {
                    //     return;
                    // }
                    key_dir = 'right'
                    break;
                case KEY_CODE.KEY_UP:
                case KEY_CODE.KEY_W:
                    // if (move_dir === 'down') {
                    //     return;
                    // }
                    key_dir = 'up'
                    break;
                case KEY_CODE.KEY_DOWN:
                    // if (move_dir === 'up') {
                    //     return;
                    // }
                    key_dir = 'down'
                    break;
                default:
                    break;
            }
        }

 

        function createFood() {
            var food = document.createElement('div');
            food.className = 'food'
            var types = ['poison', 'poison', 'poison', 'normal']
            var type = types[Math.floor(Math.random() * types.length)]
            // console.log(type)
            food.setAttribute('type', type)
            //食物的位置范围为:0-570
            var x = Math.floor(Math.random() * 571);
            var y = Math.floor(Math.random() * 571);

 

            //保证x,y是30的整数倍
            x = Math.floor(x / 30) * 30
            y = Math.floor(y / 30) * 30

 

            //TODO:保证食的位置不在蛇的身体上

 

            food.style.left = x + 'px'
            food.style.top = y + 'px'
            document.querySelector('.board').appendChild(food)
        }

 

        function eat() {
            var head = document.querySelector('.head');
            var food = document.querySelector('.food');
            if (head.offsetLeft === food.offsetLeft && head.offsetTop === food.offsetTop) {
                //吃。
                // food.style.backgroundColor = 'green';
                document.querySelector('.snake').appendChild(food);
                food.className = 'body';
                if (food.getAttribute('type') === 'poison') {
                    move(100);
                    setTimeout(function () {
                        move(500)
                    }, 5 * 1000)
                }
                createFood();
            }
        }

 

        function die() {

 

            var head = document.querySelector('.snake .head');
            var body = document.querySelectorAll('.snake .body');
            for(var i=0; i<body.length; i++) {
                if(head.offsetLeft === body[i].offsetLeft && head.offsetTop === body[i].offsetTop) {
                     location.reload();
                }
            }
        }
    </script>
</body>

 

</html>
posted @ 2019-10-20 15:49  美小琪  阅读(161)  评论(1编辑  收藏  举报