Создание игровой программы "WP-Billiards"
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
±удет заведомо лучше двухмерной. На самом деле, когда речь идет о всяческих симуляторах и боевиках, так оно и есть. Этот факт является настолько очевидным, что не нуждается ни в каком доказательстве. Оценим теперь необходимость трехмерности в игре в бильярд.
В некотором роде, трехмерная игра в бильярд дает большую свободу для творчества: помимо бильярдного стола на сцене можно будет разместить предметы интерьера бильярдной комнаты. Однако при этом следует помнить, что все интересующие нас действия должны происходить на бильярдном столе, то есть в плоскости (за очень редким исключением подскакивания шаров при ударе, возможность которого можно не учитывать из-за большой степени случайности такого явления). Иными словами, для того, чтобы отобразить нужные действия, достаточно двух измерений, а третье, в случае его использования, будет носить исключительно декоративный характер. Кроме того, использование третьего измерения, как правило, подразумевает возможность смотреть на стол под произвольным углом, что может привести к таким нежелательным эффектам, как неправильное восприятие расстояния между игровыми объектами и т.д.
Рассмотрим также такой момент как реализация искусственного интеллекта противника. Как уже говорилось ранее, одним из преимуществ компьютерных игр (за исключением сетевых) является то, что играть в них можно, не имея рядом партнера по игре. Однако это не означает, что любая игра, в том числе и рассматриваемая должна обязательно иметь встроенный искусственный интеллект противника. Конечно, в некоторых случаях такое крайне желательно, например в карточных играх. Представим, что мы реализовали игру в бильярд с классическими правилами, тогда вся игра будет представлена в виде следующей цепочки ход человека - ход компьютера, в которой человеку придется ожидать время, пока компьютер не сделает ход, и все шары не остановятся. При этом переход хода будет осуществляться далеко не всегда, а только когда одним из противников не будет забито ни одного шара. Иными словами, при полной и продуманной реализации искусственного интеллекта противника, человек, передав один раз ход компьютеру, сможет откинуться на спинку кресла и безмолвно наблюдать за тем, как компьютер загоняет в лузы шар за шаром. Естественно от такой игры трудно получить много удовольствия. В качестве выхода из данной ситуации можно предложить изменение правил игры в сторону одноигроковости. Суть такого изменения состоит в следующем: цель игрока - забить все шары, кроме бьющего, в лузы. В случае, если он забивает в лузу бьющий шар, теряется одна попытка. Всего попыток четыре. Когда игрок забивает все шары в лузы, он переходит на другой уровень, где все повторяется. При переходе на каждый третий уровень добавляется одна попытка.
Интересным также является вопрос о начислении очков. Естественным будет, если количество очков будет зависеть от сложности удара и текущего уровня. Предлагается следующая схема:
) При столкновении бьющего шара с любым другим - 1 очко;
) При забивании шара в лузу, количество начисляемых очков вычисляется по формуле:
,
где I - порядковый номер шара, в котором он забивается в течении этого хода, L - номер уровня. Таким образом, выгодно в течение одного хода забивать сразу несколько шаров.
) При переходе на следующий уровень количество очков будет начисляться по формуле .
) При окончании 99-го уровня, уровень переключится в значение 01, а пользователь получит 10000 очков дополнительно.
1.2 Математические модели, используемые в программе
Другим важнейшим компонентов подобных игр является физико-математический аппарат. Применительно к бильярду следует выделить такие требующие особого внимания моменты: определение начальной скорости шара (когда его только что ударили кием), определение направления шара при столкновении со стенкой и с другими шарами, определение такого столкновения.
Начальная скорость бьющего шарика должна вычисляться на основе следующих данных: вектор, проведенный из центра шара к указателю, сила удара. Начальная скорость находится решением следующей системы уравнений:
.
При столкновении со стенкой соответствующая составляющая должна менять знак.
При столкновении шаров их скорости перерасчитываются по следующему алгоритму:
impactx=ball[j].vx-ball[i].vx;=ball[j].vy-ball[i].vy;=RasstTT (ball[i].x, ball[i].y, ball[j].x, ball[j].y); // Расстояние от точки до точки=(ball[j].x-ball[i].x)/r;=(ball[j].y-ball[i].y)/r;=impactx*impulsex+impacty*impulsey;*=ImpactSpeed*ball[i].m*ball[j].m;*=ImpactSpeed*ball[i].m*ball[j].m;[i].vx+=impulsex/ball[i].m;[i].vy+=impulsey/ball[i].m;[j].vx-=impulsex/ball[j].m;[j].vy-=impulsey/ball[j].m;
1.3 Анализ предметной области, выяснение требований к программному продукту
Итогом исследования предметной области программного продукта должно являться выявление требований к функциональным возможностям проекта. Добавив сюда общепринятые, понятные без доказательств и комментариев требования, получаем следующий набор:
) Программа должна реализовывать игру в бильярд в двухмерном исполнении;
) Подсчет очков должен осуществляться с учетом сложности хода и номера уровня;
) Расчет скоростей шаров должен пересчитываться, исходя из приведенных законов физики;
) Программа должна иметь таблицу лучших результатов по очкам, сохраняемую на диске;
) Ввод имени игрока должен вводиться один раз перед игрой, чтобы не запрашивать имя при каждом попадании в таблицу рекордов;
) Программа должна иметь начальное меню, с помощью которо?/p>