![]() |
![]() |
VelarThind |
![]()
Сообщение
#1
|
Гость ![]() |
Решил тут я бильярд на паскале написать. Ну кий там, шарик ведущий сделал, всё пока работает(кий толкает шарик, он катиться, замедляет ход), но необходимо и другие шары в игру(какой же это будет бильярд с одним шариком), а вот соударение шариков друг с другом, что-то не осилил. Подскажите, пожалуйста!!!! Заранее спасибо.
|
![]() ![]() |
AlienEmperor |
![]()
Сообщение
#2
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 160 Пол: Мужской Реальное имя: Серый Репутация: ![]() ![]() ![]() |
Цитата Через такт движения они оба должны были бы оказаться в точке по центру. Но по правилам игры вместо этого должно произойти взаимное отталкивание. Какой должна быть последовательность проверок? На самом деле, в данном случае, придется немного попариться... Вообще решать данную проблему можно так: а) через матрицу (только единица матрицы по размерам должна быть МЕНЬШЕ размеров шара, т.е. шар включает в себя несколько единиц), если поле достаточно большое, то можно работать с битами, в результате чего размер матрицы сократится в 8 раз... Чем больше единиц будет в шаре, тем менее заметно будет вхождение друг в друга при столкновении... б) проверять координаты всех шаров, учитывая их радиус (или проще: вписать шары в квадрат, но при этом загрубление... (хотя можно сделать так: вписать шары в квадрат, а при проверке столкновений, в случае вхождения одного в другой проверять чем-нибудь вроде pixelcheck'а)). В данном случае лучше всего шары представлять в виде массива (как это сделано в примере). Мне вот другое интересно... Все это хорошо, я думаю, если посидеть немного, то можно сделать приемлемо... А вот хотел бы я на алгоритм Lemming'ов посмотреть... ![]() Ладно, пойду-ка я к лекции готовиться... P.S. Цитата Объект "1" движется вправо, объект "2" - влево. Через такт движения они оба должны были бы оказаться в точке по центру. Но по правилам игры вместо этого должно произойти взаимное отталкивание. Я вообще не понимаю, в чем проблема ? 000 102 000 Ну хорошо, предположим... Но шары-то двигаются НЕ ОДНОВРЕМЕННО - это же иллюзия... Тот шар, который в цикле имеет высший приоритет, просто запишет единицу в данную клетку ПЕРВЫМ, а второй, при проверке "свободна ли клетка дальше" получит -"нет" и, соответственно, должен будет оттолкнуться (а вот для того, чтобы и первый шар снизил скорость и поменял траекторию, надо чтобы второй "сообщил" ему об этом (я бы использовал массив указателей на шары, правда, при таком раскладе нужно еще идентифицировать нужный шар, но это тоже можно сделать). Вообще, такие штуки под DelphiX за пол-часа пишутся... ![]() ![]() -------------------- Все в жизни ботва... Кроме пчел!
|
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 19:00 |