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

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

Московский Энергетический Институт (Технический Университет)













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











Выполнил: студент группы

А-13-05

Фролов Евгений













14.05.09

Оглавление

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

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

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

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

Ресурсы ___________________________________4

Операции__________________________________5

Интерфейс ________________________________9

Выполнение_______________________________10

Статистика______________________________10

Приложение____________________________________11



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

Разработать игру «кошки-мышки». Управление мышкой осуществляет пользователь, кошкой управляет компьютер.



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

В данной модели на квадратном поле 700х700 кошка «гоняется» за мышкой. Цель кошки – съесть мышку. Для этого кошке необходимо приблизиться к мышке на расстояние, меньшее чем 30 единиц (в графическом представлении одна единица равна одному пикселю). Цель мышки – не дать себя съесть.

Передвижения объектов (и кошки, и мышки) осуществляется по вертикали или по горизонтали. Кошкой управляет компьютер, анализируя пространственное положение мышки. Мышкой управляет пользователь, используя клавиатуру для перемещения «вверх», «вниз», «влево», «вправо».

Клавиши управления мышкой:

I’ – передвижение вверх на одну единицу

J’ – передвижение влево

K’ – передвижение вниз

L’ – передвижение вправо

A’ – «запуск» кошки. При нажатии на эту клавишу включается логика поведения для кошки.



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

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

Используется один тип ресурсов «животное» для одновременного описания и кошки, и мышки.

Животное может находиться в каком-либо месте на поле, обладает типом (кошка, мышка), и свойством, описывающим состояние животного (передвигается ‘E’, стоит на месте ‘N’)

Пример описания:

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

$Resource_type Catomouse : permanent { Ресурсы будут постоянными }

$Parameters

{

<имя_параметра_1> : <тип_параметра> [ = <значение_по_умолчанию> ]

}

x : integer [0 .. 700]

y : integer [0 .. 700]

type : (C, M)

go : (N, E)

$End



Ресурсы

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

Пример описания:

// Здесь определяются все постоянные ресурсы

$Resources

{

<имя_ресурса_1> : <имя_типа_ресурса> [ <признак_трассировки> ] <начальные_значения_параметров>

}

Cat : Catomouse 300 400 C N

Mouse : Catomouse 400 300 M N



$End



Операции

Реализованы клавиатурные операции управления и операция, поддерживающая логику кошки.

Пример описания:

//Типы операций:

//Запуск кошки

//Меняем состояние кошки на «ходить» («Е»)

$Pattern CatStart : keyboard

$Relevant_resources

cat : Cat keep NoChange

$Time = 0.1

$Body

cat

Choice NoCheck

Convert_begin

go set E

$End



//Ход мышки влево

//Вычитаем единицу из координаты Х

$Pattern MouseLeft : keyboard

$Relevant_resources

mouse : Mouse keep NoChange

$Time = 0.10

$Body

mouse

Choice NoCheck

Convert_begin

x set mouse.x - 1

$End



//Ход мышки вверх

//Из-за особенностей нумерации ячеек поля в РДО

//необходимо вычесть единицу из координаты Y

$Pattern MouseUp : keyboard

$Relevant_resources

mouse : Mouse keep NoChange

$Time = 0.1

$Body

mouse

Choice NoCheck

Convert_begin

y set mouse.y - 1

$End



//Ход мышки вправо

//Прибавляем единицу к координате Х

$Pattern MouseRight : keyboard

$Relevant_resources

mouse : Mouse keep NoChange

$Time = 0.1

$Body

mouse

Choice NoCheck

Convert_begin

x set mouse.x + 1

$End



//Ход мышки ввниз

//Из-за особенностей нумерации ячеек поля в РДО

//необходимо прибавить единицу к координате Y

$Pattern MouseDown : keyboard

$Relevant_resources

mouse : Mouse keep NoChange

$Time = 0.1

$Body

mouse

Choice NoCheck

Convert_begin

y set mouse.y + 1

$End



//Необходимо создать постоянно выполняющееся действие

//Чтобы модель не завершалась сразу после запуска

$Pattern Go : irregular_event

$Relevant_resources

mouse : Mouse keep

$Time = 0.000001

$Body

mouse

Convert_event

y set mouse.y

$End





//Здесь происходит обработка поведения кошки

//Ведущую роль играет функции CatGoX() и CatGoY(),

//Рассчитывающие Приращение координат кошки исходя

//из наблюдаемого положения мышки

$Pattern CatLeftGo : operation

$Relevant_resources

cat : Cat keep keep

$Time = 0.000008

$Body

cat

Choice from cat.go = E

Convert_begin

go set N

x set cat.x + CatGoX()

y set cat.y + CatGoY()

Convert_end

go set E

$End



Пример используемых операций:

a : CatStart ‘A’

i : MouseUp ‘I’

j : MouseLeft ‘J’

k : MouseDown ‘K’

l : MouseRight ‘L’

go : Go

catStep : CatLeftGo



Интерфейс

Использован один кадр анимации, представляющий собой поле, на котором находятся мышка и кошка.

Мышка изображена зелёной буквой «М», а кошка – красной «С».

Пример описания:

// Кадры анимации позволяют отображать на экране текущие состояния ресурсов

$Frame A1

$Back_picture = <255 255 255> 700 700

Show { указанные после Show элементы будут отображаться всегда }

{

bitmap [ , , <имя_bmp-файла> ]

rect [ , , <ширина>, <высота>, <цвет_фона>, <цвет> ]

text [ , , <ширина>, <высота>, <цвет_фона>, <цвет>, "<сообщение>" ]

text [ , , <ширина>, <высота>, <цвет_фона>, <цвет>, <имя_ресурса>.<имя_параметра> ]

}

text [ Cat.x, Cat.y, 20, 80, <255 255 255>, <255 0 0>, 'C' ]

text [ Mouse.x, Mouse.y, 20, 80, <255 255 255>, <0 255 0>, 'M' ]



//Show_if { <условие_показа> }

// указанные после Show_if элементы будут отображаться, когда <условие_показа> истинно

$End



Выполнение

Условие завершения: расстояние между кошкой и мышкой меньше 30 единиц.

// Условие остановки модели. После Terminate_if можно указать любое логическое выражение

Terminate_if (Cat.x + 30 > Mouse.x) and (Cat.x - 30 < Mouse.x) and (Cat.y + 30 > Mouse.y) and (Cat.y - 30 < Mouse.y)



Статистика

$Results

CatX : watch_par Cat.x

MouseX : watch_par Mouse.x

CatY : watch_par Cat.y

MouseY : watch_par Mouse.y



$End

Приложение

Функции, определяющие направление перемещения кошки. Используются в CatLeftGo при выполнении хода кошки. Оценивают местоположение мышки и выдают необходимое направление для сближения с мышкой. Функции отдельно используются для координат X и Y.

// Функция алгоритмического типа

$Function CatGoX : integer

$Type = algorithmic

$Parameters

$Body

Calculate_if Cat.x > Mouse.x CatGoX = -1

Calculate_if Cat.x < Mouse.x CatGoX = 1

Calculate_if Cat.x = Mouse.x CatGoX = 0

$End



// Функция алгоритмического типа

$Function CatGoY : integer

$Type = algorithmic

$Parameters

$Body

Calculate_if Cat.y > Mouse.y CatGoY = -1

Calculate_if Cat.y < Mouse.y CatGoY = 1

Calculate_if Cat.y = Mouse.y CatGoY = 0

$End


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

Файл
27549-1.rtf
15385-1.rtf
13949-1.rtf
104440.rtf
14321.rtf




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