Version 1 (modified by whitequark, 5 years ago) (diff) |
---|
Техническое задание
Целью данной работы является проектирование и реализация симулятора взаимодействия нескольких моделей в двумерном пространстве с заданными ограничениями, причем поведение этих моделей может задаваться пользовательской программой.
Симуляция проводится фиксированными шагами (tick), во время каждого из которых изменение физических параметров моделей не может быть больше определенной величины. Для простоты реализации, симуляция происходит на поле фиксированного размера, имеющего границы, непроницаемые для каких-либо объектов.
Условия симуляции
В качестве модели выбран упрощенный танк: модель состоит из платформы (body) и башни (turret), и подчиняется следующим законам:
- Платформа способна поворачиваться относительно мировой системы отсчета. При этом считается, что поворот происходит безинерциально, однако не более, чем на определенный угол в течение шага симуляции.
- Платформа может двигаться вперед и назад, при этом направление движения задается углом поворота платформы. Платформа может двигаться не более, чем с определенной скоростью, и ускоряться не более, чем на определенную величину за шаг.
- Башня может поворачиваться относительно платформы, и изменение угла поворота также ограничено.
- Танк может стрелять один раз за шаг симуляции. При этом снаряд появляется сразу перед башней стреляющего танка, и движется равномерно и прямолинейно в направлении, в котором была направлена башня в момент выстрела относительно мировой системы отсчета.
- Танк имеет запас прочности, который может уменьшаться в результате различных событий. При достижении нуля считается, что танк вышел из строя, и он исключается из симуляции.
- При столкновении снаряда с танком снаряд исчезает, а запас прочности танка уменьшается на 1.
Танк способен получать информацию о некоторой области симуляции, которая его окружает, в частности положения и скорости движения окружающих его снарядов и танков (но не углы поворота различных частей танка). Считается, что эту информацию танк получает при помощи радара, что и накладывает указанные огранчиения. Область видимости может совпадать со всем пространством симуляции или быть кругом фиксированного радиуса, центрированным на танке.
Для расчетов столкновений принимается, что танк имеет форму круга, равного длине башни. В частности, при выстреле снаряд появляется сразу же за соответствующей точкой круга.
При движении танки не могут перекрываться друг с другом. При возникновении такой ситуации во время обработки шага будет уменьшена скорость того танка, для которого такое изменение приведет к ликвидации столкновения на этом шаге.
Изначальные условия для всех танков идентичны. Их расположение на поле, а так же углы поворота платформ определяются генератором случайных чисел. Угол поворота башни и скорость равны нулю.
Управление
Структура симулятора должна подразумевать возможность двойственного управления поведением танков: каждый конкретный танк может управляться либо программно, в случае чего пользователь не может никак на него воздействовать, либо вручную, в случае чего пользователь полностью управляет танком.
Реализация может включать в себя один или оба способа такого управления, причем при наличии ручного управления в интерфейсе должна учитываться область видимости и ограниченность известной танку информации об окружении.
Интерфейс пользователя
Интерфейс программы должен состоять из нескольких окон.
- Окно конфигурации. В этом окне можно настроить параметры симуляции, задать количество и тип управления для танков, и запустить симуляцию.
Настраиваемые параметры:
- Максимальная скорость и ускорение платформы.
- Максимальная скорость поворота платформы и башни.
- Изначальный запас прочности.
- Обзорное окно. Это окно показывает симуляцию в целом, отображая полную информацию о всех объектах симуляции, в том числе углы поворота и запас прочности. Так же данное окно получает события клавиатуры в случае ручного управления.
- Окна ручного управления. В тех случаях, когда для одного или нескольких (если реализовано) танков выбран ручной режим управления, для каждого из них порождается подобное окно, отображающее только информацию, доступную танку, со всеми ограничениями.
В двух последних окнах нет элементов управления, а есть только отрисованная симуляция (или ее часть).
Должна быть возможность скрыть изображение в обзорном окне для того, чтобы не предоставлять лишнюю информацию в случае ручного управления.
Интерфейс программирования
TODO