蛇怎么会带着这些代码移动?

How come the snake moves with these codes?

我刚刚看了一个youtuber做的蛇游戏,我不明白这些代码是如何让蛇移动的。这里的 x[] 是 x 坐标,而 y[] 是 y 坐标。 youtube上并没有真正解释太多,所以我希望我能在这里得到答案。

for(int i=bodyParts;i>0;i--) {
        x[i]=x[i-1];
        y[i]=y[i-1];
    }
    switch(direction) {
        case 'U':
            y[0] = y[0]-UNIT_SIZE;
            break;
        case 'D':
            y[0] = y[0]+UNIT_SIZE;
            break;
        case 'L':
            x[0] = x[0]-UNIT_SIZE;
            break;
        case 'R':
            x[0] = x[0]+UNIT_SIZE;
            break;
        default:
            break;
    }

我们这里没有太多的上下文可以继续,但我会猜测 (x[0], y[0]) 是蛇头的坐标,并且 (x[i], y[i]) 蛇的每个剩余 body 部分的坐标。

switch语句的body根据移动的方向调整头部坐标,例如向下移动(case 'D'),y-coordinatey[0]y[0] = y[0]+UNIT_SIZE; 中增加了 UNIT_SIZE


for 循环遍历蛇的每个 body 部分,将其移动到下一个 body 部分之前所在的位置。例如,如果你的蛇是

  0 1 2 3
        4
        5 6

其中0是头,向左移动,蛇就会变成

0 1 2 3 4
        5
        6

其中 2 已移至 1 所在位置,3 已移至 2 所在位置,依此类推。这就是循环

的原因
for (int i = bodyParts; i > 0; i--) {
    x[i] = x[i-1];
    y[i] = y[i-1];
}

将第 i 个 body 部分移动到第 i-1 个 body 部分之前所在的位置。

for(int i=bodyParts;i>0;i--) {
        x[i]=x[i-1];
        y[i]=y[i-1];
    }

在此,蛇的body部分x[i]向后移动1space,表示蛇在移动。

    switch(direction) {
        case 'U':
            y[0] = y[0]-UNIT_SIZE;
            break;
        case 'D':
            y[0] = y[0]+UNIT_SIZE;
            break;
        case 'L':
            x[0] = x[0]-UNIT_SIZE;
            break;
        case 'R':
            x[0] = x[0]+UNIT_SIZE;
            break;
        default:
            break;
    }

你在这里没有提供很多上下文,但我假设当它的情况 'U' 时,蛇的第一个 body 部分将等于自身减去你给定的单位大小。 'D' 的情况反之亦然,左右类似。