Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет по лабораторной 3

.pdf
Скачиваний:
8
Добавлен:
31.03.2015
Размер:
777.57 Кб
Скачать

НИУ МЭИ

Лабораторная работа №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