关于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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值