C значения регистра переключателя не могут быть изменены внутри переключателя (не постоянны) - PullRequest
3 голосов
/ 17 марта 2020

Я пытаюсь создать динамику отказов в игре, которую я программирую на Arduino Uno.
Я могу создать серию вложенных if, но я слышал, что переключение происходит быстрее.
Я знаю, что значения case указаны как константы, но мне любопытно, можно ли заставить этот код работать ?

// player and ball are both byte arrays
    switch(ball[0]) { // bounce off edges x-axis
        case (player[0]-1):
            ball[3] -= 2;
            break;
        case player[0]:
            ball[3] -= 1;
            break;
        case (player[0]+3):
            ball[3] += 1;
            break;
        case (player[0]+4): // At this line the compiler says: the value of 'player' is not usable in a constant expression
            ball[3] += 2;
            break;
    }

Я почти уверен, что ответ либо нет, либо что обходной путь помещения переменных в константы будет намного медленнее и больше, чем просто уступка вложенному if, но это не так. Больно спрашивать.

1 Ответ

2 голосов
/ 17 марта 2020

Ави Бергер представил фантастическое решение c, которое я смог приспособить и заставить работать:

// player and ball are both byte arrays
    switch(ball[0] - player[0]) { // bounce off edges x-axis
    case 1:
        ball[3] -= 2;
        break;
    case 0:
        ball[3] -= 1;
        break;
    case -3:
        ball[3] += 1;
        break;
    case -4:
        ball[3] += 2;
        break;
    }
...