Лабораторные работы (2010) (lab3_RDO)

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

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

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











Лабораторная работа №3 по курсу

«Теория игр и исследование операций»











Выполнила:

Маслова Анастасия

Группа А-13-06

Проверила:

Гречкина Полина Викторовна











Москва, 6.05.10 г.

Оглавление

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

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

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

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

Ресурсы 4

Операции 4

Объекты операций 7

Функции 7

Интерфейс 10

Выполнение 11

Статистика 11























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

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

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

Есть поле 800х600. В начале игры в левом нижнем углу находится Собака, в правом нижнем углу находится Кошка. Помимо них на поле находятся 6 Рыбок с фиксированными местоположениями, не меняющимися в течение игры. Размеры Собаки, Кошки и каждой Рыбки 40х40.

Как только игра началась, Собака начинает двигаться по направлению к Кошке. Цель Собаки – догнать Кошку (сократить расстояние между ними меньше чем на 40*). Цель Кошки собрать всех Рыбок с поля (подойти к каждой Рыбке на расстояние меньше 40*) и не попасться Собаке.

Передвигаются Собака и Кошка по вертикали и по горизонтали. Движением Собаки управляет компьютер, анализирую местонахождение Кошки. Кошка перемещается вниз, вверх, вправо, влево под управлением пользователя (с помощью клавиатуры). Взятие Рыбки происходит автоматически при приближении на расстояние меньше 40*. Собранная Рыбка исчезает.

Для управления Кошкой используются клавиши:

 – передвинуть влево на 5

 – передвинуть вправо на 5

 – передвинуть вверх на 5

 – передвинуть вниз на 5

Игра заканчивается в двух случаях: если Собака догнала Кошку, или если Кошка собрала всех Рыбок.

*Такое расстояние выбрано исходя из размеров Собаки, Кошки и Рыбок – 40х40.

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

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

Используются два типа ресурсов: Animal для описания Собаки и Кошки, Fish для описания каждой Рыбки.

Animal обладает координатами X и Y на поле, видом (DOG, CAT) и параметром, в котором хранится количество уже собранных в течение данной игры Рыбок (для Собаки всегда 0).

Fish обладает координатами X и Y на поле и параметром, в котором хранится статус Рыбки: Рыбку уже «собрали» (Y), ещё «не собрали» (N).

$Resource_type Animal : permanent

$Parameters

x : integer [0 .. 750]

y : integer [0 .. 550]

KindOfAnimal : (DOG, CAT)

FishCount : integer [0 .. 6]

$End


$Resource_type Fish : permanent

$Parameters

x : integer [0 .. 750]

y : integer [0 .. 550]

get : (Y, N)

$End

Ресурсы

Используются 8 ресурсов: Собака(Dog), Кошка(Cat) – Animal, 6 Рыбок (Fish_1 … Fish_6) Fish.

$Resources

Dog : Animal 0 550 DOG 0

Cat : Animal 750 550 CAT 0

Fish_1 : Fish 80 150 N

Fish_2 : Fish 150 70 N

Fish_3 : Fish 500 250 N

Fish_4 : Fish 650 350 N

Fish_5 : Fish 200 400 N

Fish_6 : Fish 550 100 N

$End

Операции

Реализованы клавиатурные операции для управления движением Кошки и собиранием ей Рыбок и операция, управляющая движением Собаки.

$Pattern CatMoveLeft : keyboard

$Relevant_resources

cat : Cat keep NoChange

fish1 : Fish_1 keep NoChange

fish2 : Fish_2 keep NoChange

fish3 : Fish_3 keep NoChange

fish4 : Fish_4 keep NoChange

fish5 : Fish_5 keep NoChange

fish6 : Fish_6 keep NoChange

$Time = 0.10

$Body

cat

Choice from cat.x - 5 > 0

Convert_begin

x set cat.x - 5

FishCount set cat.FishCount + getFish()

fish1

Choice NoCheck

Convert_begin

get set Get1()

fish2

Choice NoCheck

Convert_begin

get set Get2()

fish3

Choice NoCheck

Convert_begin

get set Get3()

fish4

Choice NoCheck

Convert_begin

get set Get4()

fish5

Choice NoCheck

Convert_begin

get set Get5()

fish6

Choice NoCheck

Convert_begin

get set Get6()

$End


$Pattern CatMoveUp : keyboard

$Relevant_resources

cat : Cat keep NoChange

fish1 : Fish_1 keep NoChange

fish2 : Fish_2 keep NoChange

fish3 : Fish_3 keep NoChange

fish4 : Fish_4 keep NoChange

fish5 : Fish_5 keep NoChange

fish6 : Fish_6 keep NoChange

$Time = 0.1

$Body

cat

Choice from cat.y - 5 > 0

Convert_begin

y set cat.y - 5

FishCount set cat.FishCount + getFish()

fish1

Choice NoCheck

Convert_begin

get set Get1()

fish2

Choice NoCheck

Convert_begin

get set Get2()

fish3

Choice NoCheck

Convert_begin

get set Get3()

fish4

Choice NoCheck

Convert_begin

get set Get4()

fish5

Choice NoCheck

Convert_begin

get set Get5()

fish6

Choice NoCheck

Convert_begin

get set Get6()

$End


$Pattern CatMoveRight : keyboard

$Relevant_resources

cat : Cat keep NoChange

fish1 : Fish_1 keep NoChange

fish2 : Fish_2 keep NoChange

fish3 : Fish_3 keep NoChange

fish4 : Fish_4 keep NoChange

fish5 : Fish_5 keep NoChange

fish6 : Fish_6 keep NoChange

$Time = 0.1

$Body

cat

Choice from cat.x + 5 < 750

Convert_begin

x set cat.x + 5

FishCount set cat.FishCount + getFish()

fish1

Choice NoCheck

Convert_begin

get set Get1()

fish2

Choice NoCheck

Convert_begin

get set Get2()

fish3

Choice NoCheck

Convert_begin

get set Get3()

fish4

Choice NoCheck

Convert_begin

get set Get4()

fish5

Choice NoCheck

Convert_begin

get set Get5()

fish6

Choice NoCheck

Convert_begin

get set Get6()

$End


$Pattern CatMoveDown : keyboard

$Relevant_resources

cat : Cat keep NoChange

fish1 : Fish_1 keep NoChange

fish2 : Fish_2 keep NoChange

fish3 : Fish_3 keep NoChange

fish4 : Fish_4 keep NoChange

fish5 : Fish_5 keep NoChange

fish6 : Fish_6 keep NoChange

$Time = 0.1

$Body

cat

Choice from cat.y + 5 < 550

Convert_begin

y set cat.y + 5

FishCount set cat.FishCount + getFish()

fish1

Choice NoCheck

Convert_begin

get set Get1()

fish2

Choice NoCheck

Convert_begin

get set Get2()

fish3

Choice NoCheck

Convert_begin

get set Get3()

fish4

Choice NoCheck

Convert_begin

get set Get4()

fish5

Choice NoCheck

Convert_begin

get set Get5()

fish6

Choice NoCheck

Convert_begin

get set Get6()

$End


$Pattern DogMove : operation

$Relevant_resources

dog : Dog keep NoChange

$Time = 0.000008

$Body

dog

Choice NoCheck

Convert_begin

x set dog.x + DogMoveX()

y set dog.y + DogMoveY()

$End

Объекты операций


$Operations

left : CatMoveLeft 'LEFT'

up : CatMoveUp 'UP'

right : CatMoveRight 'RIGHT'

down : CatMoveDown 'DOWN'

dogmove : DogMove

$End


Функции

Реализованы 2 функции (отдельно для x, отдельно для y) для определения направления движения Собаки.

$Function DogMoveX : integer = 0

$Type = algorithmic

$Parameters

$Body

Calculate_if Dog.x > Cat.x DogMoveX = -1

Calculate_if Dog.x < Cat.x DogMoveX = 1

Calculate_if Dog.x = Cat.x DogMoveX = 0

$End


$Function DogMoveY : integer = 0

$Type = algorithmic

$Parameters

$Body

Calculate_if Dog.y > Cat.y DogMoveY = -1

Calculate_if Dog.y < Cat.y DogMoveY = 1

Calculate_if Dog.y = Cat.y DogMoveY = 0

$End

Реализована функция, с помощью которой определяется, подбирает Кошка какую-нибудь Рыбку или нет.

$Function getFish : integer = 0

$Type = algorithmic

$Parameters

$Body

Calculate_if (Fish_1.get = N) and (Cat.x + 40 > Fish_1.x) and (Cat.x - 40 < Fish_1.x) and (Cat.y + 40 > Fish_1.y) and (Cat.y - 40 < Fish_1.y) getFish = 1

Calculate_if (Fish_2.get = N) and (Cat.x + 40 > Fish_2.x) and (Cat.x - 40 < Fish_2.x) and (Cat.y + 40 > Fish_2.y) and (Cat.y - 40 < Fish_2.y) getFish = 1

Calculate_if (Fish_3.get = N) and (Cat.x + 40 > Fish_3.x) and (Cat.x - 40 < Fish_3.x) and (Cat.y + 40 > Fish_3.y) and (Cat.y - 40 < Fish_3.y) getFish = 1

Calculate_if (Fish_4.get = N) and (Cat.x + 40 > Fish_4.x) and (Cat.x - 40 < Fish_4.x) and (Cat.y + 40 > Fish_4.y) and (Cat.y - 40 < Fish_4.y) getFish = 1

Calculate_if (Fish_5.get = N) and (Cat.x + 40 > Fish_5.x) and (Cat.x - 40 < Fish_5.x) and (Cat.y + 40 > Fish_5.y) and (Cat.y - 40 < Fish_5.y) getFish = 1

Calculate_if (Fish_6.get = N) and (Cat.x + 40 > Fish_6.x) and (Cat.x - 40 < Fish_6.x) and (Cat.y + 40 > Fish_6.y) and (Cat.y - 40 < Fish_6.y) getFish = 1

$End

Реализованы 6 функций проверки для каждой Рыбки, подобрала ли Кошка её.

$Function Get1 : such_as Fish.get = N

$Type = algorithmic

$Parameters

$Body

Calculate_if (Cat.x + 40 > Fish_1.x) and (Cat.x - 40 < Fish_1.x) and (Cat.y + 40 > Fish_1.y) and (Cat.y - 40 < Fish_1.y) Get1 = Y

Calculate_if (Fish_1.get = Y) Get1 = Y

$End


$Function Get2 : such_as Fish.get = N

$Type = algorithmic

$Parameters

$Body

Calculate_if (Cat.x + 40 > Fish_2.x) and (Cat.x - 40 < Fish_2.x) and (Cat.y + 40 > Fish_2.y) and (Cat.y - 40 < Fish_2.y) Get2 = Y

Calculate_if (Fish_2.get = Y) Get2 = Y

$End


$Function Get3 : such_as Fish.get = N

$Type = algorithmic

$Parameters

$Body

Calculate_if (Cat.x + 40 > Fish_3.x) and (Cat.x - 40 < Fish_3.x) and (Cat.y + 40 > Fish_3.y) and (Cat.y - 40 < Fish_3.y) Get3 = Y






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