js实现贪吃蛇小游戏

                                               js实现贪吃蛇小游戏

用js写的一个贪吃蛇小游戏,依赖jquery,用键盘上下左右键控制方向,撞到边界或者撞到自身游戏结束。先上个效果图。

css代码如下:

<style>
    *{
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    .table{
        width: 600px;
        height: 600px;
        margin: 50px auto;
        background: url("../img/table.jpg") no-repeat center center /cover;
    }

    .table div{
        width:30px;
        height: 30px;
        border: 1px solid #000;
        float: left;
    }
    .snake{
        background: purple;
    }
    .food{
        background: #00F7DE!important;
    }
</style>

样式中表格有一张背景图片,不过没有也不影响,可能就是简陋一点。

html代码如下:

<body>
   <div class="table">

   </div>
</body>

js代码如下:

<script type="text/javascript">
    var snake = {
        posArr :[{x:0,y:0},{x:0,y:1},{x:0,y:2}],
        directive:'right',
        interval:'',
        food:{x:0,y:0},
        /**
         * 启动函数
         */
        init:function () {
            this.initTable();
            this.run();
            this.getFood();
        },
        /**
         * 画表格
         */
        initTable:function () {
            for(var i=0;i<20;i++){
                for(var j=0;j<20;j++){
                    $('<div id="'+i+'_'+j+'"></div>').appendTo($('.table'));
                }
            }
        },
        /**
         * 小蛇每次移动触发渲染函数
         * @returns {*}
         */
        render:function () {

            var x = snake.posArr[snake.posArr.length - 1]['x'];
            var y = snake.posArr[snake.posArr.length - 1]['y'];
            if(snake.directive === 'right'){
                y += 1;
            }
            else if(snake.directive === 'left'){
                y += -1;
            }
            else if(snake.directive === 'bottom'){
                x += 1;
            }
            else if(snake.directive === 'top'){
                x += -1;
            }
            snake.posArr.push({x :x,y:y});

            //判断撞墙或者身体碰撞
            if(($('#' + snake.posArr[snake.posArr.length - 1]['x'] + '_' + snake.posArr[snake.posArr.length - 1]['y']).length < 1) || this.crash(x,y)){
                snake.posArr.pop();
                return snake.die();
            }
            for(var i=0;i<snake.posArr.length;i++){
                $('#' + snake.posArr[i]['x'] + '_' + snake.posArr[i]['y']).addClass('snake');
            }
            //判断吃到食物
            if(snake.posArr[snake.posArr.length - 1]['x'] === snake.food['x'] && snake.posArr[snake.posArr.length - 1]['y'] === snake.food['y']){
                $('#'+snake.food['x'] + '_' + snake.food['y']).removeClass('food');
                this.getFood();
            }
            //没有吃到食物就去掉尾巴
            else {
                var tail = snake.posArr.shift();
                $('#' + tail['x'] + '_' + tail['y']).removeClass('snake');
            }
        },
        /**
         * 获取实物
         * @returns {*}
         */
        getFood:function(){
            var x = Math.floor(Math.random()*20);
            var y = Math.floor(Math.random()*20);

            for(var i=0;i<snake.posArr.length;i++){
                if(snake.posArr[i]['x'] == x && snake.posArr[i]['y'] == y){
                    return arguments.callee.call();
                }
            }
            snake.food['x'] = x;
            snake.food['y'] = y;
            $('#'+ x + '_' + y).addClass('food');
        },
        /**
         * 控制小蛇走动
         */
        run:function () {
            snake.interval = setInterval(function () {
                snake.render();
            },300);
        },
        /**
         * 判断是否撞到自己
         * @param x
         * @param y
         */
        crash:function (x,y) {
            for(var i=0;i<snake.posArr.length -1;i++){
                if(x === snake.posArr[i]['x'] && y === snake.posArr[i]['y'] ){
                    this.die();
                }
            }
        },
        /**
         * 游戏结束
         */
        die:function () {
            clearInterval(snake.interval);
            document.onkeydown = null;
            return alert('游戏结束');
        }
    };

    snake.init();
    document.onkeydown = function (e) {
        var e = e || window.event;
        var nub = e.keyCode;
        if (nub === 37) {
            if (snake.directive === "right") {
                return
            }
            snake.directive = "left";
            snake.render();
        }
        else if (nub === 38) {
            if (snake.directive === "bottom") {
                return
            }
            snake.directive = "top";
            snake.render();
        }
        else if (nub === 39) {
            if (snake.directive === "left") {
                return
            }
            snake.directive = "right";
            snake.render();
        }
        else if (nub === 40) {
            if (snake.directive === "top") {
                return
            }
            snake.directive = "bottom";
            snake.render();
        }
    }
</script>

以上就是小游戏完整代码,样式还可以美化一下,给蛇头弄个图片,还可以设置一下游戏难度,把run函数的间隔时间弄成可以配置的,难度高就间隔短一点,感兴趣的小伙伴可以试一下。\(^o^)/~

猜你喜欢

转载自blog.csdn.net/qq_39771254/article/details/81098200