SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › list и iterator
В этой теме 4 ответа, 2 участника, последнее обновление Raf_Tank 6 года/лет, 9 мес. назад.
-
АвторСообщения
-
Всем доброго времени суток. Как понятно из названия вопрос будет по спискам. Я уже знаю как работать с одним списком, например:
C++123456789101112131415161718int main(){list<chisla*> CH;list<chisla*>::iterator it1;//начало бесконечного циклаfor (it1 = CH.begin(); it1 != CH.end();){chisla *c = *it1;c->setRand();;if (c->randomedcount==0) { it1 = CH.erase(it1); delete c; }else it1++;}//конец бесконечного циклаreturn 0;}т.е. в коде выше я создаю список CH , который включает в себя объекты класса chisla, и указатель (итератор) к этому листу. Далее в цикле прохожусь по всем объектам списка и реализую для них функцию getRand, которая генерирует рандомное число и присваивает его переменной randomedcount. И если у какого-то элемента списка это число равно нулю, то этот элемент удаляется.
Но как работать одновременно с двумя списками? Например я прохожусь по всем элементам списка1 и сравниваю его с ПЕРВЫМ элементом списка2, если совпадений нет, то начинаю опять сравнивать ВСЕ элемента списка1 со ВТОРЫМ элементом списка2, если есть совпадение, то например вывожу на экран: the same и так далее пока не кончатся элементы списка2. Пробовал цикл в цикле, но либо не работает, либо вообще вылетает. Нужна помощь…
Посмотрите на этот код, может поможет, здесь я привёл с совпадением чисел int из двух списков
C++12345678910111213list <int> lst1, lst2;list <int>::iterator it1, it2;for (it1 = lst1.begin(); it1 != lst1.end(); it1++){for (it2 = lst2.begin(); it2 != lst2.end(); it2++){if (*it1 == *it2){std::cout << "Что-то совпало\n";}}}не работает (
Тогда, пожалуйста, весь код скиньте
Сам код, немного другой, нежели я писал в теме. В теме я писал для более простого восприятия. На самом деле у меня есть 2 класса enemy и bullet. К каждому из них есть список, и итератор. Далее код :
C++123456789101112131415161718192021222324252627int main(){std::list<bullet*> bul;std::list<bullet*>::iterator it2;std::list<enemy*> en;std::list<enemy*>::iterator it3;.......while (window.isOpen) {for (it2 = bul.begin(); it2 != bul.end();){ //p.s. создание пуль происходит в другом местеbullet *b = *it2;b->move(game_time);if (b->is_alive == 0) { it2 = bul.erase(it2); delete b; }else it2++;}for (it3 = en.begin(); it3 != en.end();){enemy *e = *it3;e->move(game_time);if (e->is_alive == 0) { it3 = en.erase(it3); delete e; }else it3++;}}return 0;}Этими двумя циклами я реализую функцию move для каждого объекта классов, а также удаляю их. Теперь сама проблема. В каждом классе есть переменная bounds, это прямоугольники пуль и врагов, и когда они пересекаются, то пуля должна умирать, а враг терять здоровье, т.е. такое условие(если как-то совместить эти циклы): if (b->bounds.intersects(e->bounds)) { b->is_alive=0; e->hp-=1; }
Собственно вот такая вот проблемка
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.