泉飒 2022-03-01 22:08 采纳率: 100%
浏览 51
已结题

改个js编写的贪吃蛇

想实现一个允许经过蛇身的贪吃蛇代码,在下面的代码上进行更改
#介绍,该代码思路,划出从左到右,从上到下400个20x20格子,通过不断画蛇头和判断涂黑蛇尾模拟移动.
#现在的问题在于蛇头经过蛇身时该如何更改,应该需要在下面注释的代码那里更改,emm,个人尝试了好多次总是出现bug.

    <canvas id="can" width="400" height="400" style="background-color: black;"></canvas>
    <script>
        var snake = [48, 47, 46, 45, 44, 43, 42, 41, 40],
            direction = 1,
            food = 49,
            n,
            nm = 0
        box = document.getElementById('can').getContext('2d');

        function randint(x, y) {
            return parseInt(Math.random() * (x - y + 1) + y);
        }
        function draw(seat, color) {
            box.fillStyle = color;
            box.fillRect(seat % 20 * 20 + 1, ~~(seat / 20) * 20 + 1, 18, 18);
        }
        document.onkeydown = function(evt) {
            direction = snake[1] - snake[0] == (n = [-1, -20, 1, 20][(evt || event).keyCode - 37] || direction) ? direction : n;
        };
        ! function() {
            snake.unshift(n = snake[0] + direction);
            if (n < 0 || n > 399 || direction == 1 && n % 20 == 0 || direction == -1 && n % 20 == 19) {
                nm -= 1
                return alert("GAME OVER!" + nm + "分");
            }
            draw(n, "lime");
            if (n == food) {
                while (snake.indexOf(food = randint(20, 380)) > 0);
                draw(food, "yellow");
                nm += 1
            } else {
               // var tem = snake[0];
               // if (snake.indexOf(tem) <= 1) {
               //     draw(snake.pop(), "black")
              //  }
            }
            setTimeout(arguments.callee, 88);
        }();
    </script>

  • 写回答

4条回答 默认 最新

  • 泉飒 2022-03-08 20:01
    关注

    已经解决,不是该判断思路,而是增加一个修补

    for (i in snake){
         if (snake[i]==tem){
              draw(tem,"lime");
              break;}
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 创建了问题 3月1日

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作