You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于网格的Snake游戏:计分功能与碰撞检测故障求助

问题解决:贪吃蛇计分功能修复

核心问题分析

  • 计分不生效:碰撞检测内重新声明了局部变量score,导致全局计分变量未被更新;返回score的操作毫无意义,因为movement函数不需要返回值。
  • 分数文本重叠:每次调用scoreFunc都会创建新的Text对象并添加到画布,旧的文本未被移除,导致叠加显示。

修复后的完整代码

// 定义全局变量,确保计分和分数文本能被全局访问
let score = 0;
let scoreText;

function scoreFunc() {
    // 如果已有分数文本,先移除旧的避免重叠
    if (scoreText) {
        remove(scoreText);
    }
    // 创建或更新分数文本
    scoreText = new Text(score.toString());
    scoreText.setPosition(H_G_SIZE, getHeight() - H_G_SIZE);
    add(scoreText);
}

function movement(e) {
    // 蛇的移动逻辑
    if (e.keyCode == Keyboard.LEFT) {
        snake.move(-MOVE_XDISTANCE, 0);
    }
    if (e.keyCode == Keyboard.RIGHT) {
        snake.move(MOVE_XDISTANCE, 0);
    }
    if (e.keyCode == Keyboard.UP) {
        snake.move(0, -MOVE_YDISTANCE);
    }
    if (e.keyCode == Keyboard.DOWN) {
        snake.move(0, MOVE_YDISTANCE);
    }

    // 碰撞检测逻辑
    if (snake.getX() < apple.getX() + apple.getWidth() &&
        snake.getX() + snake.getWidth() > apple.getX() &&
        snake.getY() < apple.getY() + apple.getHeight() &&
        snake.getY() + snake.getHeight() > apple.getY()) {
        remove(apple);
        // 直接更新全局计分变量
        score++;
        // 更新分数显示
        scoreFunc();
        // 后续可在此添加生成新苹果的逻辑
    }
}

function start() {
    snake = new Rectangle(SNAKE_XSIZE, SNAKE_YSIZE);
    snake.setPosition(MARGIN_GAP + GUIDELINE_SIZE, MARGIN_GAP + GUIDELINE_SIZE);
    snake.setColor("#19801d");
    add(snake);
    keyDownMethod(movement);
    // 初始化分数显示
    scoreFunc();
}

关键修改点说明

  1. 全局变量声明:将score和scoreText声明为全局变量,确保在所有函数中都能访问和更新。
  2. 分数文本更新逻辑:在scoreFunc中先判断是否存在旧的scoreText,如果有则移除,避免文本重叠;然后创建新的文本并添加到画布。
  3. 碰撞计分修正:删除碰撞检测内的局部score声明,直接对全局score进行自增,调用scoreFunc更新显示,移除无意义的return score语句。
  4. 初始化优化:start函数中仅需调用一次scoreFunc初始化分数显示,无需定时器(因为只有吃到苹果时才需要更新分数)。

内容的提问来源于stack exchange,提问作者Brady Buckley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:17:36