Передовица » Software » Игры » Fighter

Fighter

Скачать архив с диском. АГАТ-7. НГМД 140.

Автор: Новоселов.И.В. ака IgorV. Свердловск 1988 год.

Управляя космолётом, надо за как можно меньшее количество выстрелов сбивать вражеские летающие тарелки. Игра происходит на двух типах чередующихся уровней, с постепенно увеличивающейся скоростью врагов и затейливостью их траекторий.

  • При каждом выстреле отнимается 2 очка.
  • За сбитую тарелку начисляется 10 очков.
  • После каждых 100 очков - прибавляется жизнь.
  • После каждых 1000 очков - переход на следующий уровень.
  • Через каждые два уровня пополняется запас топлива.

Управление

"f4" - влево
"f6" - вправо
"f5" - зафиксировать
"Я" - выстрел

От автора

В СРТТ ИМ. А.С.Попова был целый класс ПК АГАТ-7. При нем были лаборанты и так, любители, которым информатика была не пустым звуком. И да! Мы конечно же играли! Но игр было очень мало, потому и хотелось что-то создать.

Мы пописывали разные игрушки, соревновались, кто сделает заданный алгоритм быстрее: Даже было такое соревнование в одной и той же программе пишем по очереди по несколько строк. Один пишет управление ракетой, другой - уворачивающимся от неё объектом.

Как-то раз увидел игрушку, где летающая тарелка летит между двух столбов не помню уже смысла, только она была на IBM совместимых ПК.

Идея понравилась. Взялся её перенести на АГАТ, но не один в один. Нарисовал на миллиметровке космический самолетик, вид сзади, повернул набок и, при помощи стекла и лампы перечертил её снова, подрихтовал, потом зеркально получил. Набил картинку в виде данных, сместил каждый вариант по 1 биту (в той графике 8 точек в байте) Можно было заметить, что все эти 24 фазы (3 положения по 8 сдвигов спрайта) самолётика присутствуют в самой программе в самом её начале. Вычислять сдвиги во время игры времени нет.

Сначала самолётик была чуть по красивее, по шире. Попробовал его погонять по экрану вправо - влево - показалось слишком уж медленно и нет эффекта инерции. Попробовал по 2 пикселя за раз смещать, при остановке переходить на попиксельный шаг - движение более похоже на инерционное, но понадобилось убавить ширину картинки, чтобы от неё не оставались куски при смещении влево. Спрайт картинки укладывается целиком в 4 байта шириной, при смещениях вправо занимает дополнительно ещё 1 байт в ширину. Стирание картинки перед смещением спрайта не делается в целях экономии времени, его и так катастрофически мало.

Горы - формируются целиком случайно, алгоритм не мой. Выходцев Владимир придумал. Он придумал, как из случайного числа получить случайные склоны, а далее закрасить до самого низа случайными пикселями. Мне осталось вылизать алгоритм.

В то время, когда как будто идет заправка, на самом деле рисуются горы. Они потом готовые построчно появляются из-за горизонта.

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

Вражеские тарелки нескольких типов, и случайно выбирается на какой скорости она летит, на одинарной или удвоенной. Алгоритм движения тарелок в принципе одинаковый, т.е. тарелка наводится к точке в самом низу экрана. Разница в типах только в том, что точка наведения:
1. Случайная и не движется.
2. Случайная, но после вылета тарелки точка наведения движется из края в край имитируя синусоиду.
3. Точка наведения совпадает по x с координатой самолётика.
Тарелки могут быть одиночные или «очередями».

Космос - проел весь мозг, никак не летелось, долго стереометрию разводил с проекцией на экране. Ну как то на компромиссе оставил. Не очень был доволен.

Надпись FIGHTER готикой - нарисована Кошелевым Евгением, сейчас он живет во Флориде. Верхние буквы - мои.

Эти картинки слишком много места занимали, пришлось выдумывать алгоритм сжатия картинок. На тот момент картинки никак не сжимались, пробовал из литературы по Хаффману - слабое сжатие. Пришел к сжатию «что и сколько раз» .

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

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

Поискав ссылки на эту игрушку наткнулся на комментарии. Один из них, зачем то автор делает какие-то переброски памяти туда - сюда*. Вообще все очень просто: писалось под АГАТ7 - других не было. диск 140кБ ДОС. писалось на АСМе из под бейсика. И вдруг в один далеко не прекрасный момент текст программы на бейсике столкнулся с самой программой после компиляции. Т.е. наступил передел. Пришлось передвинуть картинки по памяти на попозже. С другой стороны, после того как программка собиралась и запускалась очень бесило, что каждый раз приходится заново бейсик с ДОСом загружать. Было решено всю рабочую область памяти ДОСа и бэйсика с нулевых адресов копировать в банк памяти под ДОС, (в неиспользуемую страницу памяти которая прикрывается ДОСом). Во время игры очень активно используется база короткой адресации.

* Текст это комментария (написан авторами сайта до переписки с автором игры):
Похоже, изначально писалась именно для агат-7. Оригинальная версия вылетает в ДОС на девятки при потере всех жизней или при УПР-СБР.
Перемещение: 5100..5FFF -> 8000. Но это не весь его код! Он читается так: часть1 + часть2, а потом часть1 копирует за часть2, получается в памяти часть2+часть1. Не знаю зачем это надо было...

По окончании игры или по сбросу тот кусок сохраненных данных кидается обратно. Т.е. поиграв ничего перезагружать не нужно, можно снова делать правки в программе. Но эта система рухнула под ДОСом для диска 840кБ. Там, куда я временно прятал данные, у него тоже программа лежит.

Вспомниая, как и что делал, теперь становится очень странно, почему я не пользовался прерываниями. Приходилось делать ветви в программе для временной заглушки, на случай если объектов нет, чтобы скорость движения всего остального была бы неизменной. Это же такое разбазаривание времени CPU! Возможно это было вызвано тем что прерывания в АГАТе были всего лишь двух типов 15625Гц маскируемые и 50Гц немаскируемые (ЕМНИП). Да наверное можно было бы приспособить какие то. Ну, что было - то было.

Почему-то в юности казалось, что я буду писать ещё и ещё игры. Придумал лэйбачок - 2 сцепленные буквы бетта. Но как оказалось игр, которые бы «ушли в люди» я больше не написал.

...А потом вернувшись с каникул, мне сказали: «а про твою игру забыли, потому что привезли диски с уймой новых игр» . И тогда LodeRunner было наше любимое! И беготня от червяка по лабиринтам тоже. Тетрис опять же и ещё много чего...

То, что написал позже, уже были не игры. Например, ОС для сети компьютерного класса для г. Ноябрьска 1989-1990гг. В те годы сетевые соединения ПК АГАТ в одну сеть только - только проклёвывались. И тогда же написал первый сетевой вирус под свою же сеть. Вирус оправлял себя на случайно выбранный ПК - чем удалял программу на Бейсике. И уже с того ПК отправлялся дальше

Если класс детей что-то пишет, и запустить этот вирус на любом ПК, то минуты через две они все сидят уже хмурые ☺ . А можно было сразу всем его послать. И тогда же был сделан первый же барьер от этого - можно было запретить принимать некоторые типы данных по сети.

Использование материалов проекта agatcomp без получения предварительного письменного разрешения agatcomp запрещено.


Почта для обратной связи: mail@agatcomp.ru


Живое общение по теме Агата: Telegram группа Agatcomp.


Накопленные знания и проекты: тематический ФОРУМ.


© 2004-2024 agatcomp.su / agatcomp.ru

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *