zoukankan      html  css  js  c++  java
  • 简易贪吃蛇

    <!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 {
                 600px;
                height: 600px;
                background: silver;
                position: absolute;
                left: 50%;
                top: 50%;
                transform: translate(-50%, -50%);
            }
            .snake div {
                 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 {
                 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>
  • 相关阅读:
    Arrays类
    异常
    Java日志第53天 2020.8.29
    Java日志第52天 2020.8.28
    Java日志第55天 2020.8.31
    Java日志第54天 2020.8.30
    测试:ATM
    dear mother
    Spring
    People like me
  • 原文地址:https://www.cnblogs.com/plmmq/p/11707818.html
Copyright © 2011-2022 走看看