Promised Land #01
31 декабря 2000

Програмерство - Basic Rulez! Создание карточный игры на Бейсике.

<b>Програмерство</b> - Basic Rulez! Создание карточный игры на Бейсике.
        
   ╔══════════════════════════════════╗
   ║                                  ║░░
   ║          ПРОГРАММЕРСТВО          ║░░
   ║                                  ║░░
   ╚══════════════════════════════════╝░░
      ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

               BASIC RULES!

  Сразу предупреждаю: вышенацарапанное  не
следует принимать серьезно! И предназначе-
но это для тех, кто  пока  ассемблером  не
владеет, но, тем не менее,  желает  писать
что-то для себя и для других,  пусть  даже
на Бейсике...

  За годы общения со Спектрум-совместимыми
компьютерами я успел  поработать  в  самых
разных направлениях, однако главным всегда
было создание игр. Как и все, я начинал  с
Бейсика - ведь именно на нем так просто  и
быстро можно реализовать очень многие  за-
мыслы.
  Поднабравшись опыта, я начал предъявлять
к своим программам серьезные требования по
части дизайна. Именно тогда и появился МЕ-
НЕДЖЕР. Но вскоре я понял,  что  на  стан-
дартных  Бейсиковских  приемах  далеко  не
уехать.
  Лет пять назад я увидел  на  IBM  весьма
интересную  версию  STRIP-покера.  Сначала
мне показалось, что это обычный стриппокер
вроде тех, что любой из вас видел на Спек-
труме не один раз. Но потом я  понял,  что
ошибся.
  Основной принцип игры, в общем, тот  же,
вот только против вас играют до ТРЕХ впол-
не симпатичных девчонок. И я понял, что не
имею права пройти мимо такой идеи.
  Разработка игры пошла довольно медленно.
Основная проблема была не в самой програм-
ме, а в графике. По идее, экран разделялся
на 6 частей следующим образом:

   ╔════════════════╤════════════════╗
   ║== Девчонка   ==│== Девчонка   ==║
   ║== номер раз  ==│== номер два  ==║
   ╠════════════════╪════════════════╣
   ║      Мои       │== Девчонка   ==║
   ║     карты      │== номер три  ==║
   ╠════════════════╪════════════════╣
   ╟     Окно       │Размер капитала ║
   ║   сообщений    │каждой из сторон║
   ╚════════════════╧════════════════╝

  Сейчас нас интересуют  только  окошки  с
изображением девиц (в остальных информация
выводится в обычном текстовом виде).
  Получить необходимые картинки не  соста-
вило труда: берутся картинки из PEEP SHOW,
сжимаются вчетверо, дорисовывается одежда!
Но ведь их еще и на экран как-то надо  вы-
водить...
  Сначала я хотел подключить для этого ас-
семблер, но с моим тогдашним  его  знанием
из этой затеи ровным счетом ничерта не вы-
шло. И тут мне попадается книжица "Как на-
писать игру на Бейсике".  Даже  тогда  для
меня в ней все было до примитивного просто
и понятно. Тем не менее,  одну  совершенно
неожиданную идейку я оттуда выкопал...
  В главе, посвященной спрайтам, была  из-
ложена техника создания НЕБОЛЬШИХ графиче-
ских изображений при помощи символьных на-
боров и такой себе системной переменной по
кличке CHARS. И тут меня как током  удари-
ло: "Черт подери, почему же только неболь-
ших???"
  Все оказалось не так и сложно: на каждую
из 6 девчонок получилось  по  три  рисунка
размером 8х16, или 8х16х8=1024 байт, а это
лишь чуть-чуть больше полного  символьного
набора... Единственное, что меня беспокои-
ло - быстродействие такой процедуры. Впро-
чем, мне было суждено убедиться,  что  мои
опасения оказались напрасными: даже на та-
ком тормозе, как "Оризон",  шуршало  очень
даже здорово!
  Чтобы получить изображение, готовое  для
вывода из BASICа,  можно  воспользоваться,
например, Art Studio: выделите окно (Defi-
ne Window), задействуйте опцию Font Editor
в меню Text, затем Misc  -  Capture  Font.
Если, как в нашем случае,  длина  превысит
768 байт (т.е. 96 знакомест), придется вы-
полнить несколько заходов, а затем обьеди-
нить полученные файлы в один.
  Загрузив такой файл по некоторому адресу
в памяти, вы теперь можете адресовать  его
при помощи системной переменной CHARS, или
23606/23607.
  Итак, в результате  получилась  одна  из
тех игр, которыми я горжусь до сих пор. Но
оставалась еще маленькая  деталь,  которая
не давала мне покоя: картинки в  игре  до-
вольно откровенны, и  внезапное  появление
нежелательных персон вблизи поля боя (это,
конечно, в первую очередь Father & Mother)
заставляла жать RESET, как говорится,  "на
самом интересном месте"!
  Поразмыслив, я решил  реализовать  нечто
такое, что позволило бы В ЛЮБОЙ МОМЕНТ за-
вуалировать графику, а потом  восстановить
ее - конечно, в соответствии с изменившим-
ся положением в игре). Само собой, это  ни
в коей мере не должно мешать самой игре. И
выяснилось, что единственный способ реали-
зации такой  возможности  -  второй  режим
прерываний. И пусть  начинающих  юзеров  и
программеров не пугает такое кошмарное на-
звание; на самом деле оно обозначает очень
простую и полезную вещь.
  50 раз в секунду в компьютере происходит
прерывание, когда обычная  работа  системы
приостанавливается и выполняются некоторые
срочные действия: опрос клавиатуры, увели-
чение показаний системных часов и т.д.
  Так вот, имеется несложный механизм, при
помощи которого к списку этих срочных дей-
ствий можно "приписать" еще парочку своих.
Для этого лишь нужно организовать прерыва-
ния второго рода.
  Я не буду сейчас останавливаться на этой
технологии подробно;  в  конце-то  концов,
есть масса книг, детально освещающих  дан-
ный вопрос (например, трехтомник Инфоркома
по ассемблеру). Лично я пользовался  одним
из первых номеров "ZX-Ревю" за 1994-й год.
  Вкратце, наша задача сводится к  следую-
щему: где-то в  свободном  участке  памяти
надо разместить МАЛЮСЕНЬКУЮ программку  на
ассемблере, которая будет работать  парал-
лельно с основной программой, лишь изредка
вмешиваясь в ее работу. Вмешательство  со-
стоит вот в чем:
 1) проверяем, нажата ли специальная  ком-
бинация клавиш, запускающая сокрытие экра-
на;
 2) если нажата, тогда "прячем" экран.
 3) если не нажата -  выходим,  ничего  не
делая.
  Именно такой механизм, с мелкими наворо-
тами, реализован в Bedtime Poker.  Но  это
решение, пожалуй, подойдет лишь для более-
менее  опытных  программистов.  Посмотрим,
нельзя ли сделать чуть проще.
  Преимущество машинно-кодовой резидентной
процедуры в том, что, будучи  однажды  за-
пущеной, она сможет быть вызвана АБСОЛЮТНО
из ЛЮБОГО места Basic-программы.  В  нашем
случае это  действительно  необходимо,  но
часто можно избежать лишней головной боли.
  Допустим, что в разных местах вашей про-
граммы идет опрос клавиш по принципу:
 10 LET B$=INKEY$: IF B$="" THEN GO TO 10
  Все, что нужно сделать - создать где-ни-
будь в программе (лучше  ближе  к  началу)
общую подпрограмму и обращаться к ней  че-
рез GO SUB всякий раз,  когда  понадобится
считать код клавиши.
  Где-то в  этой  подпрограмме  (вероятнее
всего, в конце) вставьте:
 IF CODE INKEY$=7 THEN ... ,
далее следует список действий для  очистки
экрана по нажатии клавиши Edit (Caps+1).
  Теперь предположим, что вам надо  скрыть
некий, достаточно небольшой участок экрана
таким образом, чтобы его можно  было  вос-
становить. Это делается при помощи манипу-
ляций с атрибутами.
  Пусть участок  окрашен  PAPER=6,  INK=0.
Надеюсь, вы в курсе, что информация о цве-
те хранится в дисплейном файле  в  адресах
22528..23295  (длина=768).  Каждая  ячейка
памяти в этой  области  отвечает  за  одно
знакоместо. Если его координаты обозначить
X=0..23 и Y=0..31, то адрес вычисляется:
    A=22528+Y*32+X .
  Значения самих чисел  рассчитываются  по
достаточно хитрой формуле:
    B=INK+8*PAPER+64*BRIGHT+128*FLASH ;
результат функции ATTR выдается  именно  в
таком формате. Для случая PAPER 6 / INK 0,
получим B=6. А если изображение скрыто, то
получим PAPER 6 / INK 6 -> B=54; 54+6=60.
  В идеальном случае, надо  бы  совместить
процедуры скрытия и восстановления в одну.
Просто, для каждого знакоместа участка вы-
полните следующую конструкцию:
 Z=ATTR(X,Y): POKE 22528+Y*32+X, 60-Z ,
и все! В принципе,  можно  использовать  и
PRINT OVER; но POKE работает быстрее и мо-
жет обрабатывать все 24 строки экрана.

На этом пока все! Творческих успехов вам!



Другие статьи номера:

Приколы - подборка приколов.

Содержание - краткое описание материалов первого номера журнала.

Всякая всячина - описание программ и игр: Sea Quest "Морской Волк", Kool Eggs, Доман ОС, Brujeria, Windword 2.1, Power UP.

Эксперт советует - советы по игре "Черный Ворон".

Адвентюра - прохождение адвентюрной игры Sea Quest.

Немного о себе - Energy Group приветствует вас!

Програмерство - Basic Rulez! Создание карточный игры на Бейсике.

Информаторий - описание формата графических файлов PCX.

Да будет так - Компьютерная новелла по игре LASER SQUAD.

Читальный зал - пару отрывков из новейшей книги Виктора Суворова - "Самоубийство".

Две эротические историии - Мне почти тридцать лет, а моей подруге Юле девятнадцать...

Ярослав Велинский - рассказ "ЭПИДЕМИЯ".


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Сеть - Сетевые новости. Список BBS: ZX-Net 095, Независимые BBS.
Почтовый ящик - Как написать в газету.
Юмор - Анекдоты.

В этот день...   14 апреля