Удаление лишнего кода

Я пытаюсь сделать игру в OpenGL и хочу переместить камеру. Я сделал это с помощью этого кода:

t.calculations(&t1, 5.54, 1.54, 10, 10, 1);
t.calculations(&t2, 5.54, 1.54, 10, 10, 1);
t.calculations(&t3, 5.54, 1.54, 10, 10, 1);
t.calculations(&t4, 5.54, 1.54, 10, 10, 1);
t.calculations(&t5, 5.54, 1.54, 10, 10, 1);
t.calculations(&t6, 5.54, 1.54, 10, 10, 1);
t.calculations(&t7, 5.54, 1.54, 10, 10, 1);

t.calculations(&t8, 5.54, 1.54, 10, 10, 1);
t.calculations(&t9, 5.54, 1.54, 10, 10, 1);
t.calculations(&t10, 5.54, 1.54, 10, 10 ,1);
t.calculations(&t11, 5.54, 1.54, 10, 10, 1);
t.calculations(&t12, 5.54, 1.54, 10, 10, 1);
t.calculations(&t13, 5.54, 1.54, 10, 10, 1);
t.calculations(&t14, 5.54, 1.54, 10, 10, 1);
t.calculations(&t15, 5.54, 1.54, 10, 10, 1);
t.calculations(&t16, 5.54, 1.54, 10, 10, 1);
t.calculations(&t17, 5.54, 1.54, 10, 10, 1);
t.calculations(&t18, 5.54, 1.54, 10, 10, 1);

Но, как вы можете видеть, это выглядит как чрезмерное повторение кода. Я пытался использовать следующий метод вместо вышеуказанного метода:

for (int i = 1; i < 19; i++) {
   t.calculations(&t+i, 5.54, 1.54, 10, 10, 1);
}

Но это не работает. Может кто-нибудь сказать мне альтернативное решение?

1 ответ

Решение

Предполагая, что все переменные ti имеют одинаковый тип и тип double:

// The following sentence declares an array initialized with the 18 t variables
// think of this array as a slot container of values, the following is just syntax
// to declare and initialize the array 
// IMPORTANT: Once the array is initialized, you can't modify its structure, you can 
// replace the content of every cell, but, you can add neither remove elements from it
double t[] = { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18 };

// Then, you can read every cell of the array using the [] operator like this:
// (Another important hint, arrays starts from '0')
for (int 0 = 1; i < 18; i++) {
   // You take the address of every ti variable stored in each "cell" of the array 
   t.calculations(&t[i], 5.54, 1.54, 10, 10, 1);
}

В качестве альтернативы, используя менее подробный синтаксис (но довольно сложный), приведенный выше код можно выразить так:

for (int i = 0; i < 18; i++) {
   t.calculations(t + i, 5.54, 1.54, 10, 10, 1);
}

Для получения дополнительной информации, проверьте онлайн документацию и учебные пособия для массивов в c/ C++. Подобный синтаксис широко используется в других языках

Другие вопросы по тегам