Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ Игра "Бильярд" на Pascal'е

Автор: Jorik 12.08.2006 1:37

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

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

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



Прикрепленные файлы
Прикрепленный файл  BILLIARD.PAS ( 4.76 килобайт ) Кол-во скачиваний: 712

Автор: volvo 12.08.2006 2:43

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

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

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

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

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

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

Тогда, может кто-нибудь другой подскажет?

Автор: Jorik 12.08.2006 3:04

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


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


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

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

Автор: lapp 12.08.2006 7:36

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

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

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

Автор: lapp 12.08.2006 8:44

Чтобы не быть голословным, приведу формулу движения тела под действием силы трения с выводом.
Исходим из закона Ньютона,
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 13.08.2006 0:11

Jorik, я так думаю, тебе будет небезинтересно посмотреть на исходники вот этой программы:
http://www.delphikingdom.com/asp/viewitem.asp?UrlItem=/mastering/poligon/billiard.htm

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