отчет по лабораторной 3
.pdfНИУ МЭИ
Лабораторная работа №3
по курсу «теория игр и исследование операций». «Моделирование с помощью системы интеллектуального имитационного моделирования РДО»
Выполнила Студентка А-13-09 Шорникова Дарья
Преподаватели Еремеев А.П.
Гречкина П. В.
Москва, 2013 г.
Оглавление |
|
Постановка задачи ........................................................................................................................ |
2 |
Описание предметной области .................................................................................................... |
2 |
Описание имитационной модели................................................................................................ |
3 |
Выполнение ................................................................................................................................... |
6 |
Приложение................................................................................................................................... |
7 |
Образцы операций ........................................................................................................................ |
7 |
Кадры анимации ......................................................................................................................... |
11 |
Функции и последовательности................................................................................................. |
14 |
Заключение.................................................................................................................................. |
15 |
1
Постановка задачи
С помощью имитационного моделирования РДО реализовать модель перемещения искателя приключений, собирающего монеты, по разрушающемуся лабиринту. Задействовать клавиатурные операции для управления искателем приключений.
Описание предметной области
В реализуемой модели игрок может перемещаться на одну клетку вправо, влево, вверх или вниз за ход. Искатель приключений, попавший на клетку с монеткой, забирает ее. Когда игрок уходит с целой клетки, она начинает разрушаться. Треснувшая клетка после посещения ее игроком исчезает.
Цель игры: собрать все монетки и не попасть на белое поле. Игрок проигрывает, если наступает на белое поле.
Для выхода из игры нужно нажать клавишу Esc
целая клетка. Можно наступить на нее дважды
треснувшая клетка. Можно наступить на нее один раз.
Управлять искателем приключений можно с помощью клавиш со стрелками.
(0;0) – левый верхний угол игрового поля. Координаты игрока и объектов вычисляются в пикселях. Ось X – горизонтальная, ось Y – вертикальная. Начальная позиция игрока и состояние клеток лабиринта.
2
Описание имитационной модели
Типы ресурсов
В игре используется 3 вида ресурсов: Герой, Плитка, Игра.
Герой: описывает состояние игрока и положение на карте. $Resource_type Герой : permanent
$Parameters
X : integer = 0 //координата по оси X Y : integer = 0 //координата по оси Y
Собрано : integer [0..10] = 0 //счетчик собранных монет Жив : integer[0..1] = 1 // 1 – Жив, 0 - Мертв
$End
Плитка: описывает состояние блоков $Resource_type Плитка : permanent $Parameters
X : integer = 0 //координата по оси X Y : integer = 0 //координата по оси Y Number : integer //номер плитки
Состояние : integer [-1..2]=1 //Состояние плитки: уничтожен разрушен блок
Handle : integer [0..2]=0 //Наличие объекта на плитке: пусто монетка игрок
$End
Игра: описывает состояние игры $Resource_type Игра : permanent $Parameters
Stat : integer [0..4] = 0 //Статус игры: ожидание, начата, победа, поражение, завершена
$End
Ресурсы
Используется 28 ресурсов: Игра, Игрок, 10 плиток и 16 пустых полей вокруг плиток.
$Resources
_Игра : Игра * _Герой : Герой 200 350 * *
Плитка0 : Плитка 200 200 0 1 * Плитка1 : Плитка 250 200 1 2 * Плитка2 : Плитка 300 200 2 1 1 Плитка3 : Плитка 200 250 3 1 1 Плитка4 : Плитка 250 250 4 2 1 Плитка5 : Плитка 200 300 5 1 * Плитка6 : Плитка 250 300 6 1 *
3
Плитка7 : Плитка 300 300 7 2 1 Плитка8 : Плитка 200 350 8 2 2
Плитка9 : Плитка trace 250 350 9 1 1
Пусто0 : Плитка 150 150 20 0 *
Пусто1 : Плитка 200 150 21 0 *
Пусто2 : Плитка 250 150 22 0 * Пусто3 : Плитка 300 150 23 0 * Пусто4 : Плитка 150 200 24 0 * Пусто5 : Плитка 350 200 25 0 * Пусто6 : Плитка 150 250 26 0 * Пусто7 : Плитка 300 250 27 0 * Пусто8 : Плитка 150 300 28 0 *
Пусто9 : Плитка 350 300 29 0 *
Пусто10 : Плитка 150 350 30 0 * Пусто11 : Плитка 350 300 31 0 * Пусто12 : Плитка 150 400 32 0 * Пусто13 : Плитка 200 400 33 0 * Пусто14 : Плитка 250 400 34 0 * Пусто15 : Плитка 300 400 35 0 *
$End
Операции
В модели реализовано 8 операций на основе 8 образцов
$Operations
НачатьИгру : ОбразецНачатьИгру 'SPACE' КонецИгры : ОбразецВыйти 'ESCAPE'
Вверх : Up 'UP' Вправо : Right 'RIGHT' Влево : Left 'LEFT' Вниз : Down 'DOWN'
Победа : Победить РегулярнаяОперация : TicTac
$End
Интерфейс
В модели используется один кадр анимации. Игра происходит на разлинованном белом поле, справа в сером поле показывается информация об игре и подсказки.
Для создания анимации использованы 7 изображений: монетка, находящаяся на целом или треснувшем блоке, игрок, находящийся на пустом поле, треснувшем или целом блоке, пустые треснувший и целый блок.
4
Одно из состояний игры – игрок перемещается
Игрок наступил на белое поле и проиграл
5
Игрок собрал все монетки и выиграл
Выполнение
Объект прогона
Model_name |
= greedy |
Resource_file |
= greedy |
OprIev_file |
= greedy |
Statistic_file |
= greedy |
Results_file |
= greedy |
Trace_file |
= greedy |
Frame_file |
= greedy |
Frame_number |
= 1 |
Show_mode |
= Animation |
Show_rate |
= 1000.0 |
Terminate_if _Игра.Stat = 4
Статистика
В игре вычисляется статистика собранных искателем приключений монет и конечной позиции игрока.
$Results
ГеройX : get_value _Герой.X ГеройY : get_value _Герой.Y
Монеток : get_value _Герой.Собрано $End
6
Приложение
Образцы операций
$Pattern ОбразецНачатьИгру : keyboard $Relevant_resources
Игра1 : _Игра Keep Keep $Time = 0.0
$Body
Игра1
Choice from _Игра.Stat = 0
Convert_begin |
Stat set 1 |
$End |
|
$Pattern ОбразецВыйти : keyboard $Relevant_resources
Игра1 : _Игра Keep Keep
$Time = 0.0 |
|
$Body |
|
Игра1 |
|
Choice NoCheck |
|
Convert_begin |
Stat set 4 |
$End |
|
$Pattern Alive : operation |
|
$Relevant_resources |
|
Время1 : _Время |
Keep Keep |
$Time = 1 |
|
$Body |
|
Время1 |
|
Choice NoCheck |
|
Convert_begin |
Вр set _Время.Вр + 1 |
$End |
|
$Pattern Left : keyboard $Relevant_resources BrickOld : Плитка Keep Keep BrickNew : Плитка Keep Keep Герой1 : _Герой Keep Keep Br1 : Плитка Keep Keep Игра1 : _Игра Keep Keep $Time = 0.0
$Body BrickOld Choice from
BrickOld.X=Герой1.X and BrickOld.Y=Герой1.Y and _Игра.Stat=1 Convert_begin
Handle set 0
7
Состояние set BrickOld.Состояние - 1 |
|
BrickNew |
|
Choice from |
|
BrickNew.X=Герой1.X - 50 |
and BrickNew.Y=Герой1.Y and |
_Игра.Stat=1 |
|
Convert_begin |
|
Герой1 |
|
Choice from |
|
Герой1.X > 50 and Герой1.Жив = 1and _Игра.Stat=1 Convert_begin
X set Герой1.X - 50
Жив set Живой(BrickNew.Состояние)
Собрано set Герой1.Собрано + Взять(BrickNew.Handle)
Br1
Choice from
Br1.X=Герой1.X - 50 and Br1.Y=Герой1.Y and _Игра.Stat=1 Convert_begin
Handle set 2
Игра1
Choice NoCheck
Convert_begin
Stat set Win(_Герой.Собрано)
$End
$Pattern Right : keyboard $Relevant_resources BrickOld : Плитка Keep Keep BrickNew : Плитка Keep Keep Герой1 : _Герой Keep Keep Br1 : Плитка Keep Keep Игра1 : _Игра Keep Keep $Time = 0.0
$Body BrickOld Choice from
BrickOld.X=Герой1.X and BrickOld.Y=Герой1.Y and _Игра.Stat=1
Convert_begin |
|
Handle set 0 |
|
Состояние set BrickOld.Состояние - 1 |
|
BrickNew |
|
Choice from |
|
BrickNew.X=Герой1.X + 50 |
and BrickNew.Y=Герой1.Y and |
_Игра.Stat=1 |
|
Convert_begin |
|
Герой1 |
|
Choice from |
|
Герой1.X < 550 and Герой1.Жив = 1 and _Игра.Stat=1 Convert_begin
X set Герой1.X + 50
Жив set Живой(BrickNew.Состояние)
8
Собрано set Герой1.Собрано + Взять(BrickNew.Handle)
Br1
Choice from
Br1.X=Герой1.X + 50 and Br1.Y=Герой1.Y and _Игра.Stat=1 Convert_begin
Handle set 2
Игра1
Choice NoCheck
Convert_begin
Stat set Win(_Герой.Собрано)
$End
$Pattern Up : keyboard $Relevant_resources BrickOld : Плитка Keep Keep BrickNew : Плитка Keep Keep Герой1 : _Герой Keep Keep Br1 : Плитка Keep Keep Игра1 : _Игра Keep Keep $Time = 0.0
$Body BrickOld
Choice from BrickOld.X=Герой1.X and BrickOld.Y=Герой1.Y and _Игра.Stat=1
Convert_begin Handle set 0
Состояние set BrickOld.Состояние - 1 BrickNew
Choice from
BrickNew.X=Герой1.X and BrickNew.Y=Герой1.Y - 50 and _Игра.Stat=1
Convert_begin
Герой1 Choice from
Герой1.Y > 50 and Герой1.Жив = 1 and _Игра.Stat=1 Convert_begin
Y set Герой1.Y - 50
Жив set Живой(BrickNew.Состояние)
Собрано set Герой1.Собрано + Взять(BrickNew.Handle)
Br1
Choice from
Br1.X=Герой1.X and Br1.Y=Герой1.Y - 50 and _Игра.Stat=1 Convert_begin
Handle set 2
Игра1
Choice NoCheck
Convert_begin
Stat set Win(_Герой.Собрано)
$End
9