Лабораторные работы (2008) (КузнецовАГ-СтрашныйСонСотрудникаМилиции)

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








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

РДО




















Кузнецов Андрей Геннадьевич

А-16-05





Москва 2008


Содержание:


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

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

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

3.1) Типы ресурсов ............................................................................................................... 4

3.2) Ресурсы .......................................................................................................................... 4

3.3) Операции ........................................................................................................................5

3.4) Анимация ....................................................................................................................... 5

3.5) Рисунки использованные в программе ........................................................................7

4) Приложени (функции и константы) ............................................................................... 9

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


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

Я решил реализовать игру с условными “врагами”(два врага, ходят поочерёдно), которые на поле 10х10 клеток, имея возможность двигаться вправо,влево, вверх (начальная позиция “врагов” – нижняя часть доски, а игрока - верхняя). Игрок же имеет возможность двигаться во всех четырёх направлениях используя “стрелки” клавиатуры, его главной задачей является обойти “врагов” и дойти до нижней границы доски. В случае если “враги” пересекаются по координатам с игроком, игра устанавливается в начальное положение, за исключением счёта игрока – он изменяется. Игра останавливается по достижении игроком нижней границы поля (или достижения “врагами” верхней, что идеалогически равнозначно). По достижении финального состояния игрок получает сообщение в зависимости от того несколько хорошо он обошел “врагов”.


Название игры: “Кашмарный Сон Сотрудника Милиции”

Концепция игры: На поле 10х10 клеток в сторону сотрудника поочерёдно двигаются две взятки (визуально отличны друг от друга). Задача сотрудника милиции дойти от верхней до нижней границы поля, не “взяв” взятку. В случае если сотрудник взял взятку “сон” начинается с исходного положения, но при этом в счёт игрока плюсуется стоимость взятки. Хорошим окончанием игры считается нулевой счёт игрока. Плохим – положительный счёт.

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

  1. Типы ресурсов:

А) Сотрудник (игрок)

X,Y – координаты

Взятка: счёт игрока

Б) Взятка (тип взятки)

X,Y – координаты

Номер – одна из двух видов взяток

Очередь – состояние хода конкретной взятки

В) Игра (ход игры)

Состояние – какое действие/событие происходит

Ход – чей ход, игрока или взяток

Пропуск – пропускает ли активная сторона свой ход


Представление типов в коде программы:

$Resource_type Сотрудник : permanent

$Parameters

X : integer [1..10]

Y : integer [1..10]

Взятка2 : integer = 0

$End


$Resource_type Взятка : permanent

$Parameters

Номер : (Взятка, Взятка2)

Очередь : (ХОДИТ, ЖДЕТ)

X : integer [1..20]

Y : integer [1..20]

$End


$Resource_type Игра : permanent

$Parameters

Состояние : (ИГРА, Сотрудник_Взял_Взятку, Сотрудник_Удержался_От_Взяток,Взятки)

Ход : (Взятки, Сотрудник)

Пропуск : integer [0..2]

$End


  1. Ресурсы:

А) Экземпляр_Взятка – враг №1

Б) Экземпляр_Взятка2враг №2

В) Экземпляр_Сотрудник – игрок

Г) Экземпляр_Игра – ход игры


Представление ресурсов в коде программы:


$Resources

Экземпляр_Взятка : Взятка Взятка ХОДИТ 5 1

Экземпляр_Взятка2 : Взятка Взятка2 ЖДЕТ 7 1

Экземпляр_Сотрудник : Сотрудник 3 10 0

Экземпляр_Игра : Игра ИГРА Сотрудник 0

$End

  1. Операции

А)Образец_Сходить_Влево : keyboard, Образец_Сходить_Вправо : keyboard, Образец_Сходить_Вверх : keyboard, Образец_Сходить_Вниз : keyboard

- перемещение сотрудника милиции по полю, выполняются при активном ходе сотрудника и нажатии “стрелок на клавиатуре”


Б) Образец_Сотрудник_Взял_Взятку – выполняется в случае пересечения координат одной из взяток и сотрудника. Переводит игру в состояние перезапуска, добавляет цену взятки в счёт игрока.


В) Образец_Перезапуск – выполняет инициализационную настройку – расстановку игрока и взяток на поле.


Г) Образец_Сотрудник_Удержался_От_Взяток1,

Образец_Сотрудник_Удержался_От_Взяток11, Образец_Сотрудник_Удержался_От_Взяток2 – Три вида набора условий при которых игра переходин в завершенное состояние. Выполнятеся в случае а) игрок дошел до конца поля б) взякти дошли до конца поля в) Взятки пропускают ходы.


Д) Образец_Ход_Вправо, Образец_Ход, Образец_Обязательный_Ход, Образец_Пропуск_Хода – условия для выполнения активного хода активного противника.


  1. Анимация

Использован 1 кадр анимации.

Общая (не условная анимация) отображает игровое поле, игрока, противников, счёт игры, подсказку управления.



Код представления общей части кадра в программе:

s_bmp [0, 0, 500, 400, Board, BoardMask]

s_bmp [100+Экземпляр_Сотрудник.X * 40 - 40, 400 - Экземпляр_Сотрудник.Y * 40, 40, 40, Police, PoliceMask]

s_bmp [100+Экземпляр_Взятка.X * 40 - 40, 400 - Экземпляр_Взятка.Y * 40, 40, 40, Dollar, DollarMask]

s_bmp [100+Экземпляр_Взятка2.X * 40 - 40, 400 - Экземпляр_Взятка2.Y * 40, 40, 40, Coin, CoinMask]

text [7, 7, 160, 15, transparent, <255 255 255>, < 'Взяток:']

text [7, 21, 160, 15, transparent, <255 255 255>, < '$']

text [16, 21, 160, 15, transparent, <255 255 255>, < Экземпляр_Сотрудник.Взятка2]


Тут последовательно:

А) задник

Б) сотрудник

В) Взятка №1 (банкнота)

Г) Взятка №2 (монета)

Д) Три тексовых поля для отображения счёта игрока

Условная часть кадра:

(Сообщение отображается в зависимотси от счёта игрока)


Код для сообщения “Ужас! Вы не удрежались от взяток”


Show_if Экземпляр_Игра.Состояние = Сотрудник_Удержался_От_Взяток and Экземпляр_Сотрудник.Взятка2 > 0

s_bmp [180, 130, 197, 119, Message]

text [200, 180, 180, 15, transparent, <0 0 0>, < 'Ужас! вы не']

text [200, 195, 180, 15, transparent, <0 0 0>, < 'удержались от взяток']


Код для сообщения “Поздравляем, вы удержались от взяток”


Show_if Экземпляр_Игра.Состояние = Сотрудник_Удержался_От_Взяток and Экземпляр_Сотрудник.Взятка2 = 0

s_bmp [180, 130, 197, 119, Message]

text [200, 180, 180, 15, transparent, <0 0 0>, < 'Поздравляем, вы']

text [200, 195, 180, 15, transparent, <0 0 0>, < 'удержались от взяток']

Рисунки:

а) Поле