关于Js实现贪吃蛇的移动的一些感想

基本思路;身体随着头的移动而移动。当头部移动时,生成一个新头,添加到snake身体的第一位,然后弹出最后一个元素(即尾部),就这样不断的进行变化,就实现了蛇的移动

代码如下:(只给出移动部分的代码)

/**
     * 蛇的移动,主要的功能
     */
    self.move = function () {
        var head = self.body[0];
        // var t = parseInt(Math.random() * 3);
        // var tColor = color[t];
        var newHead = null;
        if (self.dir == UP){
            newHead = {
                x : head.x,
                y : head.y - 1
            };
        } else if (self.dir == DOWN){
            newHead = {
                x : head.x,
                y : head.y + 1
            };
        } else if (self.dir == LEFT){
            newHead = {
                x : head.x - 1,
                y : head.y
            };
        } else if (self.dir == RIGHT){
            newHead = {
                x : head.x + 1,
                y : head.y
            };
        }
        // console.log(head.x, head.y, food.x, food.y);
        if (newHead != null){
            self.body.unshift(newHead); //添加新头

            //当吃到食物时,只添加新头,不删除尾部,相当于添加一节身体
            if (head.x == food.x && head.y == food.y){
                self.snakeLength = self.body.length;
                //当蛇的长度达达到10时,速度提升50%
                if (self.snakeLength == 10){
                    self.speed = self.speed  + parseInt(self.speed * 0.5);
                    self._move();
                }
                //当蛇的长度达达到25时,速度再次提升50%
                else if (self.snakeLength == 25) {
                    self.speed = self.speed  + parseInt(self.speed * 0.5);
                    self._move();
                }
                //当蛇的长度达达到55时,速度再次提升50%
                else if (self.snakeLength == 55) {
                    self.speed = self.speed  + parseInt(self.speed * 0.5);
                    self._move();
                }
                //当蛇的长度达达到100时,速度再次提升50%
                else if (self.snakeLength == 100) {
                    self.speed = self.speed  + parseInt(self.speed * 0.5);
                    self._move();
                } else if (self.snakeLength == 4){
                    map.mapLevel[0][1] = 0;
                    map.drawTile();
                }
                //清除食物层
                food.layer.clearRect(0, 0, WSCREEN, HSCREEN);
                //重新生成一个食物
                food.init();
            } else {//当没吃到食物时,既添加新头,又删除尾部,相当于向前移动一节身体
                self.body.pop(); //删除尾部
            }

            if (self.isHit()){
                clearInterval(self.timer);
            }
        }
    };

完整代码:https://github.com/ytbLib/Greedy_Snake

最新回复(0)
/jishuQyBCxtq99g77E46m9WcRUj4JuPB_2B_2BxtwlZvGmzEDp0w_3D3088148
8 简首页