СЕКЦИЯ ИНФОРМАТИКИ

Использование динамических списков при создании системы реального времени

   

Цели создания программы

    При создании данной программы преследовались следующие цели:

    исследование механизма создания системы реального времени;

    отработка использования динамических списков при создании программного обеспечения;

    подготовка к переходу на объектно-ориентированное программирование.

    При создании программного обеспечения программисту приходится делать выбор между двумя режимами работы программы: интерактивным режимом и программой реального времени.

    Интерактивная программа находится в режиме ожидания наступления события. Простейший ее пример - музыкальный редактор. Если нажали кнопку, то издать звук, если опустили, то нет. Такие программы проще при реализации, но обладают серьезным недостатком - одновременно может обрабатываться только один процесс, программа становится "неживой", теряет наглядность.

    Системы реального времени обычно требуют одновременной обработки многочисленных процессов. Например, система реального времени для имитации военных действий нуждается в поддержании процесса в требуемом состоянии и в одновременном наблюдении за полетом снарядов, движением объектов, изображением происходящего на мониторе и тому подобное.

    Такая система хороша тем, что с ее помощью можно составить имитационную модель реальных действий (химической реакции, полета ракеты, танкового сражения и так далее). Но нельзя забывать о сложности составления real-time системы, так как обработка событий идет по мере их наступления, и осуществляется постоянная обработка существующих объектов.

    При написании такой системы обычно используется метод нисходящего проектирования, то есть составляется сценарий работы программы, затем общая задача разбивается на подзадачи, выделяются объекты, для каждого из них определяются свойства и методы их обработки, то есть процедуры, реализующие эти свойства. Затем объекты, обладающие схожими свойствами, объединяются в группы, определяется иерархия объектов

   

Представление различных объектов в программе

    В самой программе может быть огромное количество разнотипных объектов. Тогда встает проблема хранения всей информации о происходящих событиях. К примеру: каждый танк, пушка, снаряд, дом в моей программе - это запись, состоящая примерно из тридцати пяти полей. В полях записи хранится информация о типе объекта, его расе, а также энергия, координаты, признак активного задания и тому подобное. Если попытаться расположить такие записи в статическом списке (массиве), то Pascal едва ли позволит разместить там хотя бы сто таких записей, так как размер области, отведенной Pascal'ем под переменные - 64 килобайта. Значит, необходимым является использование динамических списков. При этом информация располагается непосредственно в оперативной памяти (объем данных ограничивается ее размером). Также это позволяет создавать объект в любой момент, удалять его, освобождая память для повторного использования. К преимуществам динамических списков относится простота работы с ними (перемещение объектов между списками, добавление, удаление элементов и тому подобное).

    После разработки иерархии объектов и их свойств начинается второй этап разработки программы - восходящее проектирование: разрабатываются базовые процедуры, на которые опирается вся программа. Весь процесс разработки программы можно сравнить с постройкой блочного дома: сначала разрабатывается проект здания, а строительство начинается с фундамента. После создания процедур нижнего уровня программа очень легко модифицируется, то есть можно элементарно добавлять новые возможности, свойства и так далее.

   

Система принятия решения

    Вторая проблема при создании системы реального времени - создание механизма принятия решения, так как действия компьютера должны быть, по крайней мере, адекватными действиям игрока. Для создания "интеллекта" я создал процедуру - "конечный автомат". У данной процедуры есть набор состояний, каждое состояние позволяет выполнять определенное действие. Работа начинается из некоторого нулевого положения, затем идет переключение на другой режим и так далее. Ниже приведена схема, по которой компьютер выполняет атаку, восстановление зданий и тому подобное.

    1.Компьютер ищет источник ресурсов, строит там завод по их добыче.

    2.Располагает свои пушки и танки защиты вокруг своих зданий.

    3.Если есть убитые защитники, то приказывает построить их;

    4.Если есть уничтоженные здания, то распоряжается строить их;

    При наличии разбитых пушек отдает приказ на их восстановление.

    Все действия расположены в порядке возрастания приоритетов.

    5.Если пушка готова, то поставить ее в месте, ближайшем к тому, где произошел взрыв (если оно занято). Если здание построено то расположить его таким же образом, как и пушки. Если танк собран, то послать его туда, где он был взорван.

    6.Создание группы атаки. Принимает решение: каких и сколько танков необходимо.

    7.Отдает приказ на их поочередную постройку. Определяет их цели по классовой принадлежности.

    8.Включает группу атаки в список воюющих танков.

    Следует заметить, что за одно выполнение основного цикла компьютер может выполнить лишь одно действие, и это действие - атака или подготовка к ней. Но если бы он только атаковал, то он обрекал бы себя на смерть, к тому же оборона - неотъемлемая часть любой войны. Поэтому решением проблемы выбора: "что оборонять?" было создание блока стратегии обороны, который также приемлем для обороны объектов пользователя. Он включает в себя:

    1.Если "мои" здания под атакой, то послать всех свободных защитников для обороны данного.

    2.Если танк или пушка не имеют задания, то они ищут цель в радиусе досягаемости своих орудий.

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

    4.Если любой танк атакует противник, то он наносит ответный удар.

    5.При подходе противника к базе, для каждой пушки осуществляется выбор более приоритетной цели.

   

Достоинства программы

    Данная программа написана на Паскале, языке высокого уровня. Вывод картинок осуществлен в 256-цветном режиме с разрешением 640X480 на двух видеостраницах (что исключает мигание). Для этого использовались процедуры: PutSprite, GetImage, PutPixel, Bar, Rectangle, Line, DrawWindow, DrawButton, а также мышка модуля VX, который был написан Михаилом Копачевым и Дмитрием Кормалевым.

    Следует отметить такие особенности программы:

    способность танков объезжать препятствия;

    возможность объединения танков в группу;

    наличие пушек;

    возможность продажи или ремонта здания, пушки;

    возможность отмены постройки объекта;

    возможность изменения скорости игры (для подстройки под быстродействие компьютера);

    скроллирующийся экран;

    наличие приятного и удобного интерфейса.

    Системные требования

    SVGA видеоадаптер с 1 мегабайтом видеопамяти и больше;

    SVGA монитор с разрешением 640Х480 и выше;

    процессор четвертого поколения и выше;

    манипулятор "мышь";

    500 килобайт на жестком диске;

    250 килобайт оперативной памяти.

   

Вывод

    В качестве вывода можно сказать о колоссальной работе, которая привела к созданию данной программы, с интеллектом, который способен на разумную атаку и оборону. Также отмечу успешные исследования в области разработки динамических структур данных и работы с ними. Нельзя не сказать о том, что данная программа была протестирована мной на "проходимость", причем сражение велось с переменным успехом.

© ярославский областной Центр Дистанционного Обучения школьников, 1999