![]() |
![]() |
Jorik |
![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Захотелось написать игру на Паскале. Раньше никогда не пробовал, но вот решил начать с не очень лёгкого варианта - бильярда.
В принципе, начало уже есть: шарик толкается, отскакивает от бортов. Пришлось перепробывать кучу формул, пока удалось подобрать подходящую для движения шара. Остановился на логарифмической зависимости... А вот как научить шар "взаимодействовать" с другими шарами - это вопрос... И желательно, чтобы это выглядело более или менее реалистично. Управление: влево, вправо - поворот кия; пробел - удар (справа на экране есть индикатор силы удара); ESC - выход. Вообщем, кому интересно - посмотрите, прокоментируйте! Буду рад, если кого-то заинтересую ![]() Прикрепленные файлы ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата(Jorik @ 11.08.2006 21:37) Захотелось написать игру на Паскале. Раньше никогда не пробовал, но вот решил начать с не очень лёгкого варианта - бильярда. Ну, смотри... Для первой попытки - очень неплохо. Если тебя интересуют замечания: Цитата(Jorik @ 11.08.2006 21:37) Остановился на логарифмической зависимости... Зря остановился... Шар очень быстро тормозится. Просто нереально быстро. Цитата(Jorik @ 11.08.2006 21:37) А вот как научить шар "взаимодействовать" с другими шарами - это вопрос... А вот с этим - возникает встречный вопрос: тебе "шашечки" или ехать? ![]() Если же тебе надо сдать эту программу и про нее забыть - то здесь я тебе ничем помочь не смогу, скорее всего ООП в таком случае запрещено, и придется извращаться с записями, массивами... Нудно и неинтересно... Тогда, может кто-нибудь другой подскажет? |
Jorik |
![]()
Сообщение
#3
|
![]() Группа: Пользователи Сообщений: 4 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Если же тебе надо сдать эту программу и про нее забыть - то здесь я тебе ничем помочь не смогу... Да это для себя я, для себя! Здавать её мне не надо. А вот про скелет попрошу подробнее... ![]() И ещё: по какой формуле посоветуешь шарик двигать? |
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
И ещё: по какой формуле посоветуешь шарик двигать? А чем тебе не угодили настоящие физические формулы? Решаешь несложную механическую задачу, то есть по сути интегрируешь уравнения движения (с интегралами знаком? или хотя бы с производными?). Этот подход хорош тем, что можно смоделировать движение на практически любом уровне детализации. Ты не пугайся сразу - ты увидишь, что это упрощение, а не усложнение. Почему? да потому, что можно идти постепенно: снчала реализуй их взаимодействие, как материальных точек без трения, а потом сможешь добавлять трение, вращение, коеффициент потерь при ударе... И, кстати, тут ООП будет весьма кстати. На самом деле, реальный биллиард совсем не так прост, как может показаться на первый взгляд. Известный физик Кориолис (которого "сила" ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#5
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Чтобы не быть голословным, приведу формулу движения тела под действием силы трения с выводом.
Исходим из закона Ньютона, F = m*a Сила трения: F = k*G = k*m*g Отсюда, a = F/m = (k*m*g)/m = k*g Ускорение - это вторая производная пути s'' = - k*g Минус учитывает тот факт, что сила направлена против движения. Интегрирование дает: s = s0 + V0*t - (k*g*t^2)/2 Или по координатам: x = x0 + Vx0*t - (k*g*cos(A)*t^2)/2 Здесь А - это угол наклона скорости к оси Х. Уравнения, как видишь, простые. Не забудь только прекратить расчет, когда скорость достигнет нуля. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Jorik, я так думаю, тебе будет небезинтересно посмотреть на исходники вот этой программы:
Модель соударения двух бильярдных шаров (попробуй запустить сначала EXE-файл, а потом, если тебя заинтересует, посмотри исходник). Программа хоть и на Дельфи, но в ней из визуальных компонентов - только TImage, для рисования на канве, поэтому, тебе будет очень легко в ней разобраться. В принципе, можно эту же программу практически один в один перенести на Турбо-Паскаль... |
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 10:25 |