Санкт-Петербургский государственный технический университет Кафедра "Компьютерные интеллектуальные технологии" К у р с о в о й п р о е к т по курсу "Диалоговые системы и машинная графика" Студенты Балагуров В.Е. Минц А.А. (группа 486) Преподаватель Курочкин М.А. - 1 9 9 4 - - 2 - О п и с а н и е п р о г р а м м ы Программа Battle City - игра, изображающая танковый бой в условиях города. Задача игрока (или игроков: можно играть вдвоем) - уничтожить танки противника и не допустить, чтобы они разрушили штаб. В начале игры у каждого игрока имеется по три жизни. Программа разрабатывалась для работы в условиях ограниченных ресурсов: компьютер PC XT (ЕС-1841) с видеоадаптером CGA. При этом должна обеспечиваться нормальная скорость работы программы и , в частности, высокая скорость графического ввода-вывода. В связи с этим программа была целиком написана на языке ассемблера, а вспомогательные утилиты - на Turbo Pascal 7.0. Программа имеет следующие особенности: - при разработке алгоритма управлении объектами-танками использовалось объектно - ориентированное программирование на ассемблере; - для быстрого и плавного перемещения спрайтов была разработана библиотека быстрой графики для видеорежима 4 адаптера CGA; процедура PutImage работает в несколько раз быстрее одноименной процедуры из библиотеки BGI; - был написан пакет программ для разработки изображений и подключения их к программе; - для того, чтобы программа работала с одинаковой скоростью и на 8086, и на 486DX-40, цикл перемещения спрайтов привязан к тикам таймера; поскольку 18.2 тика в секунду - слишком мало, то канал 0 таймера был перепрограммирован на более высокую частоту. - 3 - О с о б е н н о с т и р е а л и з а ц и и а л г о р и т м а Каждое отдельное законченное действие в программе выполняется отдельной независимой функцией (обработчиком). Можно выделить следующие основные действия: - создать танк; - переместить танк; - уничтожить танк; - выработать дальнейшую траекторию; - создать пулю; - переместить пулю; - уничтожить пулю. Адреса обработчиков помещаются в таблицу обработчиков, которая используется для реализации их циклической выборки по тактам таймера. Независимость обработчиков достигается тем, что по окончании выполнения им действия он сам изменяет свой адрес в таблице обработчиков на адрес следующего в цепочке действий обработчика. Например: <Создать танк> | V <Выработать дальнейшую траекторию> | V <Переместить танк> | V <Выработать дальнейшую траекторию> | V и т.д. - 4 - Г р а ф и к а Для реализации спрайтов был написан специальный пакет графических средств, включающий в себя: - графический битовый редактор спрайтов BE; - конвертер изображений в формате BE в ассемблерный текст; - графическая библиотека GRAPH4, включающая в себя процедуру для вывода спрайтов на экран. Для подключения спрайтов к программе используется следующая последовательность действий: - в редакторе BE создается 4-цветное (max в этом режиме) изображение, сохраняемое в файле .BE со специальным форматом; максимальные размеры изображения - 32 x 32 пикселя; - с помощью конвертера CONVERT файл .BE преобразуется в ассемблерный текст, готовый к компиляции; в файле CONVERT.INI могут быть заданы метка и атрибуты сегмента, в котором будет храниться изображение; - полученные ассемблерные файлы компилируются с помощью TASM и (поскольку их много) объединяются в библиотеку с помощью библиотекаря TLIB; - эта библиотека включается в файл проекта при сборке программы с помощью TLINK; таким образом, изображения спрайтов статически подключаются к программе; - чтобы изобразить спрайт на экране, используется процедура PutImage из библиотеки GRAPH4. - 5 - Для заставки и сообщения 'Game over' использовался другой метод: - в программе PaintBrush 2.0 рисовалось изображение (на весь экран) и сохранялось в файле .PCX; - была написана специальная утилита для преобразования файла .PCX в двоичный файл образа экрана; - с помощью программы BIN2OBJ двоичный файл преобразовывался в файл .OBJ и при линковке подключался к программе; - в программе с помощью команды REP MOVSW этот образ экрана копировался прямо в видеопамять. К л а в и ш и у п р а в л е н и я Выход из игры - Escape. Игрок 1 Игрок 2 Влево стрелка влево A Вправо стрелка вправо D Вниз стрелка вниз X Вверх стрелка вверх W Стрельба пробел S - 6 - Л и т е р а т у р а 1. Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера: Пер. с англ. - 2-е изд. - М.: Радио и связь, 1991. - 336 с.: ил. 2. Использование Turbo Assembler при разработке программ. - Киев: Диалектика, 1994. - 288 с.: ил. 3. Фролов А.В., Фролов Г.В. Программирование видеоадаптеров CGA, EGA, VGA. - М.: ДИАЛОГ-МИФИ, 1992. - 288 с. - (Библиотека системного программиста; Т. 3). 4. Романов В.Ю. Популярные форматы файлов для хранения графических изображений на IBM PC. - М.: Унитех, 1992. - 156 с.: ил. 5. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT: Пер. с. англ. - М.: Финансы и статистика, 1992. - 544 с.: ил. 6. Фролов А.В., Фролов Г.В. Аппаратное обеспечение IBM PC: В 2-х ч. Ч. 1. - М.: ДИАЛОГ-МИФИ, 1992. - 208 с. - (Библиотека системного программиста; Т. 2). 7. Чикин Д. Пристальный взгляд на компьютерные игры //Монитор. - 1993. - N 5. - 7 - П р и л о ж е н и е Simple Bitmap Editor - простой редактор битовых образов для видеорежима 4 (CGAC0 - 320 x 200, 4 цвета). Формат вызова: BE [имя_файла_изображения[.BE]] Команды: пробел - поставить точку текущим цветом в текущей позиции; Ins - поднять/опустить перо; 0, 1, 2, 3 - изменение текущего цвета; T - shifT - циклический сдвиг изображения по горизонтали/вертикали, Enter - выход с сохранением, Esc - без сохранения; R - Rotate - поворот изображения на 90 градусов по часовой стрелке; M - Mirror - зеркальное отображение относительно горизонтальной/ вертикальной оси; F - Fill - заполнение внутренне-определенной области текущим цветом; A - chAnge - изменение цвета всех точек, имеющих цвет точки под курсором, на текущий цвет; I - Insert - вставка строки/столбца в текущей позиции; D - Delete - удаление строки/столбца в текущей позиции; C - Clear - очистка всего изображения текущим цветом; L - Load - загрузка изображения из файла; S - Save - запись изображения в файл; X - maxX - увеличить (X) или уменьшить (Alt-X) размер изображения по горизонтали; Y - maxY - увеличить (Y) или уменьшить (Alt-Y) размер изображения по вертикали; B - Backgrnd - изменить цвет фона (0..15); P - Palette - изменить текущую палитру (C0..C3); E - rEset - восстановить цвет фона и палитру на те, что были при загрузке программы (при выходе из программы в файле be.ini запоминаются цвет фона, палитра и размеры изображения); Q - Quit - выход из программы; H - Help - подсказка по командам (be.hlp).