IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Игра "Бильярд" на Pascal'е
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Захотелось написать игру на Паскале. Раньше никогда не пробовал, но вот решил начать с не очень лёгкого варианта - бильярда.
В принципе, начало уже есть: шарик толкается, отскакивает от бортов. Пришлось перепробывать кучу формул, пока удалось подобрать подходящую для движения шара. Остановился на логарифмической зависимости... А вот как научить шар "взаимодействовать" с другими шарами - это вопрос... И желательно, чтобы это выглядело более или менее реалистично.

Управление:
влево, вправо - поворот кия;
пробел - удар (справа на экране есть индикатор силы удара);
ESC - выход.

Вообщем, кому интересно - посмотрите, прокоментируйте! Буду рад, если кого-то заинтересую smile.gif


Прикрепленные файлы
Прикрепленный файл  BILLIARD.PAS ( 4.76 килобайт ) Кол-во скачиваний: 517
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(Jorik @ 11.08.2006 21:37)
Захотелось написать игру на Паскале. Раньше никогда не пробовал, но вот решил начать с не очень лёгкого варианта - бильярда.

Ну, смотри... Для первой попытки - очень неплохо. Если тебя интересуют замечания:

Цитата(Jorik @ 11.08.2006 21:37)
Остановился на логарифмической зависимости...

Зря остановился... Шар очень быстро тормозится. Просто нереально быстро.

Цитата(Jorik @ 11.08.2006 21:37)
А вот как научить шар "взаимодействовать" с другими шарами - это вопрос...
А вот с этим - возникает встречный вопрос: тебе "шашечки" или ехать? smile.gif Если "ехать" (в смысле, если хочешь написать программу, которую легко будет сопровождать, добавлять в нее что-то, причем делать это с наименьшими затратами времени, сил и нервов) - то скажи, я набросаю тебе "скелет" программы, в которую ты уже сможешь добавлять свои фишки (извини, я забыл уточнить, это будет происходить с использованием ООП, но не пугайся сразу - это не так страшно, как кажется)...

Если же тебе надо сдать эту программу и про нее забыть - то здесь я тебе ничем помочь не смогу, скорее всего ООП в таком случае запрещено, и придется извращаться с записями, массивами... Нудно и неинтересно...

Тогда, может кто-нибудь другой подскажет?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Андрей

Репутация: -  0  +


Цитата(volvo @ 11.08.2006 22:43) *


Если же тебе надо сдать эту программу и про нее забыть - то здесь я тебе ничем помочь не смогу...


Да это для себя я, для себя! Здавать её мне не надо. А вот про скелет попрошу подробнее... smile.gif За одно попрактикуюсь немного в ООП (надеюсь) %)

И ещё: по какой формуле посоветуешь шарик двигать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Jorik @ 12.08.2006 0:04) *

И ещё: по какой формуле посоветуешь шарик двигать?

А чем тебе не угодили настоящие физические формулы? Решаешь несложную механическую задачу, то есть по сути интегрируешь уравнения движения (с интегралами знаком? или хотя бы с производными?). Этот подход хорош тем, что можно смоделировать движение на практически любом уровне детализации. Ты не пугайся сразу - ты увидишь, что это упрощение, а не усложнение. Почему? да потому, что можно идти постепенно: снчала реализуй их взаимодействие, как материальных точек без трения, а потом сможешь добавлять трение, вращение, коеффициент потерь при ударе... И, кстати, тут ООП будет весьма кстати.
На самом деле, реальный биллиард совсем не так прост, как может показаться на первый взгляд. Известный физик Кориолис (которого "сила" smile.gif ) посвятил изучению движения шаров чуть ли не всю жизнь, и достиг важных результатов. Но это было в 19-м веке, если не ошибаюсь, а сейчас можно поступить проще, смоделировав все на компе..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Чтобы не быть голословным, приведу формулу движения тела под действием силы трения с выводом.
Исходим из закона Ньютона,
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
Здесь А - это угол наклона скорости к оси Х.
Уравнения, как видишь, простые. Не забудь только прекратить расчет, когда скорость достигнет нуля.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Jorik, я так думаю, тебе будет небезинтересно посмотреть на исходники вот этой программы:
Модель соударения двух бильярдных шаров

(попробуй запустить сначала EXE-файл, а потом, если тебя заинтересует, посмотри исходник). Программа хоть и на Дельфи, но в ней из визуальных компонентов - только TImage, для рисования на канве, поэтому, тебе будет очень легко в ней разобраться. В принципе, можно эту же программу практически один в один перенести на Турбо-Паскаль...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 20.09.2017 7:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"