1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Это не совсем игра, но так написано в моем задании. Вот что мне надо постараться создать:
Моделируется движение планет в солнечной системе и прохождение комет через нее. В упрощенной модели не следует соблюдать реальные пропорции размеров планет, Солнца и расстояний между ними. В данной модели все планеты движутся вокруг Солнца в одной плоскости но с разной скоростью. У планет, Солнца и комет есть определенные размеры и масса, пропорциональная кубу линейного размера. В одном из углов "Солнечной системы" в случайные моменты времени генерируются кометы, летящие в произвольном направлении. Комета и планета престают существовать при столкновении. При столкновении кометы о Солнцем исчезает только комета. На кометы действуют силы притяжения планет и Солнца в соответствии с законом всемирного тяготения, что изменяет их траекторию. Комета вышедшая за пределы "Солнечной системы* исчезает на всегда. У комет есть хвост, направленный в сторону от Солнца, Управление моделью : при помощи клавиш: начать, закончить.
Итак, делаться будет на с++, с помощью псевдографики как в этой теме. Как изначально представляю себе это. Будет базовый класс фигура, который будет иметь такие показатели. как радиус планеты, масса, сила притяжения, радиус орбиты. Каждая планета наследник от этого класса. Не понял вот этого в задании
Цитата
масса, пропорциональная кубу линейного размера
Так же пока не представляю как в случайном какого-либо конца экрана запустить комету в каком то направлении, рисовать ей хвост(какми способом) от солнца, ну и физику притяжения с изменением траектории.
Как наверстаю начальный код по планетам выложу, далее нужна будет конечно помощь. Заранее благодарю всех кто откликнется, за советы и помощь.
Хм... Хитрый, да? Это не совсем правильное решение Объяснить? Объясняю... Вот этот код, который в Run, нужно будет слегка модифицировать, чтобы отслеживать взаимодействие объектов по схеме "каждое крупное небесное тело с каждой кометой". Для этого удобнее всего будет описать Солнце и планеты не как отдельные экземпляры, а как массив указателей на базовый класс, чтобы потом просто пройти по всему массиву и проверить, как очередной объект взаимодействует с кометой/кометами (если их будет больше одной на экране).
То, что ты сделал - выбивает объект класса Звезда из такой модели. То есть, ты не сможешь просто вызвать Update() в цикле для всех элементов массива КрупныеОбъекты, тебе придется исключать из этого процесса элемент массива, являющийся Солнцем, но проверять на взаимодействие придется со всеми... Опять лишние конструкции, опять if-ы, зачем тебе это? Нужно так модифицировать Star::Show(), чтобы при постоянном вызове Update() не происходило перерисовки объекта
Цитата
Вот только не пойму как еще сделать в данном коде разную скорость у планет.
Вот как переделаешь перемещение планеты через угол (только угол не делай целочисленным, сделай вещественным) - поймешь... Будешь задавать для каждой планеты разное приращение угла - будет разная скорость вращения...
Цитата
У меня не доходит до указанного перехода вылетает с Abnormal programm terminated
Это уже я только завтра/послезавтра смогу потестировать, ноут с Windows уже забрали. Если б тебе хотя бы удалось выяснить, где происходит ошибка - было бы проще...
class Planet : public Celestial { private: int R; const char *name; double Angle;//<----Изменения, естественно в конструкторе тип поменял protected: virtual void Recalc() {}
public: Planet(double px,double py, int psize, int pr, double pangle, const char *pname);
virtual void Show(int); };
Planet :: Planet(double px,double py, int psize, int pr, double pangle, const char *pname) : Celestial(px, py, psize), R(pr), Angle(pangle), name(pname) { #ifdef MSGS cout << "planet " << name << " created (" << R << " " << Angle << " )" << endl; #endif