Лабораторные работы (2009) (Отчет)

Посмотреть архив целиком

Московский Энергетический Институт

Технический Университет










Лабораторная работа №3

Проектирование с помощью системы интеллектуального имитационного моделирования РДО
















Кузнецов Алексей

А-13-05









Москва, 2009 г.

Оглавление

Постановка задачи. 3

Описание предметной области 4

Описание имитационной модели 5

Типы ресурсов 5

Ресурсы 5

Операции 6

Интерфейс 7

Выполнение 7

Приложение 8

Функции 8

Последовательность 9





































Постановка задачи.


Спроектировать модель с помощью системы интеллектуального имитационного моделирования РДО.

Должна быть реализована возможность графически отображать состояние моделируемой системы в реальном времени.

Объект моделирования – симулятор стрельбы из лука BowMaster.

В модели присутствуют объекты 4 типов:

- Мишень (1),

- Лук (2),

- Стрела (3),

-Ветер (4).

Модель рассчитана на участие игрока – человека (ЛПР).

В начале прогона модели в запасе игрока 10 стрел.

Игрок выпускает стрелы из лука по одной в интерактивном режиме (по нажатию кнопки на клавиатуре).

Каждый полет стрелы характеризуется набором параметров (подробнее в описании предметной области ниже).

При попадании стрелы в мишень, игрок набирает очки (подробнее в п.о.).

Цель игрока – набрать максимальное число очков.

Описание предметной области


Игрой назовём один прогон модели.

В начале игры у игрока в запасе 10 стрел. Мишень движется с постоянной скоростью в вертикальном направлении на малом расстоянии от лука. В случае если мишень достигает верхней или нижней границы игрового поля, она начинает двигаться в противоположном направлении. В верхнем левом углу игрового поля отображается подробная статистика о состоянии системы в текущий момент. Правее расположена информация о кнопках управления моделью. Игрок выпускает стрелы из лука с помощью кнопки A. Каждый выстрел характеризуется набором параметров:

  • Начальным углом наклона по отношению к нижней границе игрового поля (кнопки UP DOWN).

  • Начальной скоростью (кнопки LEFT RIGHT).

  • Позицией выстрела (вертикальное позиционирование лука, кнопки W S)

Эти параметры выбираются до выстрела с помощью кнопок клавиатуры и значения отражаются в статистике.

После выстрела стрела летит по баллистической траектории. На её полет начинает влиять ветер (точнее он изменяет горизонтальную составляющую скорости стрелы). Мощность ветра есть случайная величина, распределённая по равномерному закону распределения. Её можно видеть в статистике модели, а также внизу игрового поля в виде меняющей длину и направление синей контурной стрелки.

Стрела может завершить полет в 2-х типах случаев. Первый: стрела долетела до одной из границ игрового поля (левая, правая, нижняя, верхняя). В этом случае она просто исчезнет и можно стрелять снова.

Второй: стрела попадает в мишень, тогда игроку добавляются очки в зависимости от положения мишени. Мишень может находиться в одном из трёх положений: близко – 1 очко за попадание, средне – 2 очка, далеко – 3 очка. Положение мишени регулирует игрок кнопками 1-3 на клавиатуре. После попадания в мишень стрела исчезает и снова можно стрелять.

Если в запасе игрока нет стрел, отображается окно с сообщением о конце моделирования и количеством набранных игроком очков. Прогон завершается через 7 секунд.




Описание имитационной модели

Типы ресурсов


Типы ресурсов используются для описания структур объектов моделируемой системы.

В модели 1 тип ресурсов, описывающий всю моделируемую ситуацию. Ресурс постоянный.


$Resource_type Игровая_Ситуация : permanent

$Parameters

Где_Мишень : (f, s, t) = f Позиция мишени в 1 из 3-х

У_Мишени : integer [-10..210] = 0 Вертикальная позиция мишени

У_Лука : integer [0..200] = 50 Вертикальная позиция лука

Стрел_Осталось : integer [-10..50] = 10 Сколько стрел в запасе у игрока

Летит : (нет, да) = нет Находится ли стрела в полете

Х_Скорость : real [-40.0..40.0] = 0.0 Горизонтальная составляющая скорости

У_Скорость : real [-40.0..40.0] = 0.0 Вертикальная составляющая скорости

Х_Позиция : real [-50.0..900.0] = 1.0 Горизонтальная координата

У_Позиция : real [-100.0..600.0] = 0.0 Вертикальная координата

Очки : integer [0..150] = 0 Количество очков на счету игрока

Полет : (нет, да) = нет Исключение бесконечного вызова обработки полета

Sim : (нет, да) = нет Продолжать ли прогон модели

D : integer [-1..1] = 1 Направление движения мишени

W : real [-0.2..0.2] = 0.0 Мощность ветра

Wi : integer [-10..10] = 0 Преобразованный показатель мощности

WH : integer [0..60] = 0 Частота генерации скорости ветра

Показать_Итог : (нет, да) = нет

Конец : (нет, да) = нет

Сила_Выстрела : real [5.0..25.0] = 12.5 Регулирует начальную скорость стрелы

Угол_Выстрела : real [0.175..1.4] = 0.4 Регулирует начальный угол траектории

$End

Ресурсы


Единственный ресурс, собственно сама игровая ситуация


$Resources

Ситуация : Игровая_Ситуация * * * * * * * * * * * * * * * * * * * *

$End











Операции


Каждому образцу операции соответствует одна операция.


Список:


$Operations


// Изменяет положение и скорость стрелы

Оп_По : О_Полет


// Генерирует новое значение мощности ветра

Оп_В : WindH


// Переставляем мишень в каждую из 3-х позиций

Оп_П1 : О_Позиция_Мишени_1 '1'

Оп_П2 : О_Позиция_Мишени_2 '2'

Оп_П3 : О_Позиция_Мишени_3 '3'


// Перемещаем лук вверх или вниз

Оп_ЛВ : О_Лук_Вверх 'W'

Оп_ЛН : О_Лук_Вниз 'S'


// Совершить выстрел из лука

Оп_КФ : О_Выстрел 'A'


// Увеличение или уменьшение угла наклона выстрела

Op_AU : О_Угол_Вверх 'UP'

Op_AD : О_Угол_Вниз 'DOWN'


// Увеличение/уменьшение начальной скорости стрелы (сила выстрела)

Оп_СМ : О_СилаМ 'LEFT'

Оп_СП : О_СилаП 'RIGHT'


// Два типа завершения полета стрелы

Оп_ЕП1 : О_Конец_Полета1

Оп_ЕП2 : О_Конец_Полета2


// Продолжение прогона

Оп_Игра : Sim


// Инициализация терминации прогона

End : EndPoint


$End






Интерфейс

Интерфейс состоит из одного кадра анимации.

На нём отображается подробная статистика, лук, стрела, мишень, «ветрометр», информация по управляющим кнопкам, окно завершения прогона.


Выполнение

Объект прогона :


Model_name = mymodel

Resource_file = mymodel

OprIev_file = mymodel

Frame_file = mymodel

Frame_number = 1

Show_mode = Animation

Show_rate = 1.0

Terminate_if Ситуация.Конец = да Условие завершения прогона

Приложение

Функции


// Расчет координатной позиции мишени

$Function Pos : integer

$Type = algorithmic

$Parameters

_p : such_as Игровая_Ситуация.Где_Мишень

$Body

Calculate_if _p = f Pos = 300

Calculate_if _p = s Pos = 450

Calculate_if _p = t Pos = 600

$End


// Расчет очков за попадание

$Function Score : integer

$Type = algorithmic

$Parameters

_p : such_as Игровая_Ситуация.Где_Мишень

$Body

Calculate_if _p = f Score = 1

Calculate_if _p = s Score = 2

Calculate_if _p = t Score = 3

$End


// Направление перемещения мишени

$Function Val : integer

$Type = algorithmic

$Parameters

p : such_as Игровая_Ситуация.У_Мишени

l : such_as Игровая_Ситуация.D

$Body

Calculate_if p > 200 Val = -1

Calculate_if p < 0 Val = 1

Calculate_if p > -1 and p < 201 Val = l

$End


// Представление мощности ветра в наглядном виде

$Function iWind : integer

$Type = algorithmic

$Parameters

p : such_as Игровая_Ситуация.W

$Body

iWind = Round(p * 100)

$End


Последовательность


Случайная величина с распределением по равномерному закону


$Sequence Wind : real

$Type = uniform 1131113

$End


Случайные файлы

Файл
47685.rtf
103482.rtf
58157.rtf
8017-1.rtf
91941.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.