Перечисление класса и объявление массива - PullRequest
0 голосов
/ 05 марта 2020

Я занимаюсь обучением C ++, которое учит языку в процессе разработки игр. В этом уроке есть фрагмент кода, который я не понимаю, как он работает.

Сначала объявляется класс enum и инициализируется массив:

enum class side {LEFT,RIGHT, NONE};
side branchPositions[NUM_BRANCHES]; / which is a const variable and has the value of 6

В основной функции у меня есть этот код:

        for (int i = 0; i < NUM_BRANCHES; i++)
        {
            float height = i * 150;

            if (branchPositions[i] == side::LEFT)
            {
                branches[i].setPosition(610, height);
                branches[i].setRotation(180);
            }
            else if (branchPositions[i] == side::RIGHT)
            {
                branches[i].setPosition(1330, height);
                branches[i].setRotation(0);
            }
            else
            {
                branches[i].setPosition(3000, height);
            }
        }

Что он делает, обновляет положение ветвей спрайтов.

При выполнении кода я получаю следующий результат: example 1

После добавления следующей функции и вызова

void updateBranches(int seed)
{
for (int j = NUM_BRANCHES - 1; j > 0; j--)
{
branchPositions[j] = branchPositions[j - 1];
}

srand((int)time(0) + seed);
int r = (rand() % 2);

switch (r)
{
case 0:
branchPositions[0] = side::LEFT;
break;
case 1:
branchPositions[0] = side::RIGHT;
break;
default:
branchPositions[0] = side::NONE;
break;
}

}

ветки распределяются случайным образом, например так: enter image description here

Теперь я не понимаю, почему это так. Я понимаю, почему ветвь в позиции 0 либо слева, справа или не видна из-за оператора switch. Но я не понимаю, как for l oop в функции взаимодействует с массивом и почему это приводит к поведению, показанному на рисунке 2.

Я также не понимаю, какие значения хранятся в массиве и какова связь с классом enum.

Может кто-нибудь уточнить? Спасибо

1 Ответ

1 голос
/ 05 марта 2020

Первое для l oop в updateBranches будет перемещать ветви вверх по массиву, так что ветвь, которая была в branch[4], будет сохранена в branch[5], вплоть до сохранения branch[0] в branch[1]. Затем branch[0] заменяется новой случайно выбранной веткой. За исключением того, что srand следует вызывать только один раз, а не каждый раз, когда вызывается функция. И он должен использовать % 3, а не % 2, поскольку % 2 даст вам только значения 0 или 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...