Заставка из нескольких кадров
В солидных игровых программах заставки обычно делаются из нескольких кадров, поскольку перед началом игры на экране должно появиться большое количество информации и «впихнуть» ее в один кадр практически невозможно.
Рассмотрим пример подобной многокадровой заставки. В ней три кадра: первый выводит на экран название игры (строки 10...470), во втором представлено меню (500...690), а в третьем (700...830) - таблица результатов. Кроме того, показано, как из меню можно попасть еще в три кадра, причем их число может быть увеличено по вашему желанию.
Программа 6. МНОГОКАДРОВАЯ ЗАСТАВКА.
10 REM ** kadr 1 (zastawka) **
20 BORDER 0: PAPER 0: CLS
30 LET x=7: LET c=6
40 LET a$="SANKT - PETERBURG"
50 GO SUB 300
60 FOR n=0 TO 13
70 PRINT AT 13,n;" 19"
80 PRINT AT 13,29-n;"93 "
90 PAUSE 6
100 NEXT n
110 BEEP .005,0
120 INK 3
130 PRINT AT 20,4;"Press any key to continue"
140 LET c1=0
150 LET c=INT (RND*7+1)
160 IF c=c1 THEN GO TO 150
170 INK c
180 PRINT AT 1 0;"********************************" 190 PRINT AT 2,0;"*nnnnn*nnnn*nnnnn*nnn**nnn**nnn*" 200 PRINT AT 3 0;"*** *** ****** *** ** ** ** ****" 210 PRINT AT 4 0;"*** ***nnn**** *** ** ** ***nn**" 220 PRINT AT 5 0;"*** *** ****** ***nnn*** ***** *" 230 PRINT AT 6 0;"*** *** ****** *** * *** ** ** *" 240 PRINT AT 7,0;"*** ***nnnn*** *** ** *nnn**nn**" 250 PRINT AT 8 0^********************************" 260 LET c1=c 270 PAUSE 10
280 IF INKEY$="" THEN GO TO 150 290 GO TO 500
300 REM --podprogramma 1-310 LET b$="": LET c$="" 320 LET d=LEN a$ 330 FOR n=1 TO d-1 STEP 2 340 LET b$=b$+a$(n)+" " 350 LET c$=c$+" "+a$(n+1) 360 NEXT n 370 OVER 1: INK c 380 FOR n=1 TO 10 390 PRINT AT n,x; INK 0;b$ 400 PRINT AT n+1,x;b$
410 PRINT AT 22-n,x; INK 0;c$ 420 PRINT AT 21-n,x;c$ 430 PAUSE 6 440 NEXT n 450 BEEP
.003,0 460 OVER 0 470 RETURN
500 REM ** kadr 2 (menu) **
510 BEEP .05,55
520 CLS
530 INK 5
540 PRINT AT 7,9;"1 - START GAME" 550 PRINT AT 9,9;"2 - REDEFINE KEYS"
560 PRINT AT 11,9;"3 - LEVEL" 570 PRINT AT 13,9;"4 - END GAME" 580 INK 4
590 PRINT AT 20,7;"Press keyПП(1 - 4)" 600 LET f=0 610 INK c
620 PRINT AT 3,13;"TETRIS" 630 LET c=c+1: IF c>7 THEN LET c=1 640 LET f=f+1; IF f>200 THEN GO TO 700 650 IF INKEY$="1" THEN GO TO 2000 660 IF INKEY$="2" THEN GO TO 1000 670 IF INKEY$="3" THEN GO TO 3000 680 IF INKEY$="4" THEN STOP 690 GO TO 610
700 REM ** kadr 3 (score) **
710 BEEP .05,55
720 CLS
730 INK 6
740 FOR n=1 TO 9
750 PRINT AT n*2+1,7;"N";n;" ........ПП0"
760 NEXT n 770 LET f=0:
780 LET c=c+1: IF c>7 THEN LET c=1 790 LET f=f+1
800 IF f>200 OR INKEY$<>"" THEN GO TO 500 810 INK c
820 PRINT AT 1,11;"HI SCORE" 830 GO TO 780
999 REM
1000 REM ==== REDEFINE KEYS ====
1001 REM
2000 REM ==== START GAME ====
2001 REM
3000 REM ==== LEVEL ====
3001 REM
10 - начало фрагмента программы, описывающего первый кадр заставки. Мы дадим ему условное имя - НАЗВАНИЕ ИГРЫ; 20 - установка атрибутов экрана;
30 - задание переменных, определяющих позицию печати по горизонтали (х) и цвет букв (с);
40 - переменная а$ содержит текст, выводимый на экран подпрограммой, начинающейся со строки 300;
50 - обращение к подпрограмме, разделяющей символы слова из переменной а$ на две последовательности, в одну из которых входят знаки, занимающие в слове нечетные позиции, а в другую - символы с четными позициями, после чего две половинки слова двигаются сверху и снизу навстречу друг другу;
60...100 - слово «1993» также разбито на две части, которые двигаются в цикле слева и справа к средней части экрана. Чтобы за строками «19» и «93» не тянулся след, перед «19» и после «93» печатаем по одному пробелу, стирающему предыдущее изображение;
110 - звук, имитирующий удар при соприкосновении символов «19» и «93»; 120, 130 - установка фиолетовых «чернил» и печать в 20-й строке и 4-й позиции слов Press any key to continue (для продолжения нажмите любую клавишу);
140 - задание в переменной с1 цвета, который будем называть предшествующим текущему;
150 - вычисление кода цвета, в который будет окрашено название игры, как
случайного числа от 1 до 7 (черный цвет исключается) и присваивание полученного результата переменной с. Будем называть этот цвет текущим;
160 - здесь мы снова сталкиваемся с оператором IF.. .THEN, который носит название условного и переводится как ЕСЛИ. . . ТОГДА. Проверяемое условие ставится сразу же за IF (например, Х>3, А<18, R$ = "AA"). Если оно соответствует действительности, то выполняются операторы, стоящие за THEN, в противном случае управление передается на следующую строку программы. Содержание строки 160 можно перевести на русский язык как «если текущий цвет такой же, как и предшествующий, то перейти на строку 150». Такая строка введена для того, чтобы цвета не повторялись;
170 - установка текущего цвета в соответствии с переменной с;
180...250 - печать названия игры (TETRIS) с помощью звездочек;
260 - текущий цвет становится предшествующим и запоминается в переменной
с1;
270 - пауза 1/5 секунды;
280 - оператор условного перехода. Если не нажата никакая клавиша, то на экране будет напечатано название новым цветом (переход на строку 150). Если же какая-нибудь клавиша окажется нажатой, то происходит переход к следующей строке программы (290);
290 - отсюда программа переходит на следующий кадр - его мы назовем МЕНЮ, - часть программы которого начинается со строки 500;
300 - начало подпрограммы вывода слов SANKT- PETERSBURG;
310 - двум строковым переменным присваивается значение пустой строки. В данном случае это сделано просто для инициализации переменных, чтобы впоследствии не появилось сообщение об ошибке Variable not found (переменная не определена);
320 - вычисляется количество букв в строковой переменной а$ и полученное значение присваивается переменной d;
330...360 - цикл, в котором исходная фраза, содержащаяся в переменной а$, разбивается на две части, и буквы с нечетными позициями заносятся в b$, а с четными - в с$;
370 - устанавливается объединяющий режим наложения изображений на экране. Делается это для того, чтобы в момент сближения двух слов b$ и с$ пробелы одного не стерли буквы другого. Оператор OVER устанавливает режим наложения изображений на экране, причем если аргумент равен:
1 - изображение накладывается на уже существующее, не стирая
его; точки пересечения принимают окраску фона; 0 - новое изображение стирает уже имеющееся на экране;
380...440 - в цикле печатаются две половинки исходного слова, помещенного в переменную а$, которые сходятся друг к другу сверху и снизу;
390, 410 - символы, помещенные в переменные b$ и с$ выводятся цветом фона (PAPER), что равнозначно их стиранию. При этом переменная n во всех строках цикла играет роль координаты у;
400, 420 - вывод символов, помещенных в переменные b$ и с$ на новое место. Цвет, которым будет выводиться текст, установлен ранее в строке 370;
430 - чтобы продвижение слов не было слишком быстрым, внутри цикла устанавливается пауза;
450 - звуковой сигнал;
460 - установка нормального режима наложения информации (без объединения);
470 - возврат из подпрограммы к строке, следующей после оператора GO SUB 300, то есть к строке 60;
500, 510 - начало нового кадра заставки - МЕНЮ. Его появлению предшествует звуковой сигнал;
520, 530 - очистка экрана, задание цвета букв в тексте;
540...570 - вывод на экран четырех пунктов меню;
580 - установка нового цвета символов;
590 - вывод на экран фразы, которая по-русски означает «нажмите клавиши 14»;
600 - присваивание переменной f, выполняющей в дальнейшем роль счетчика (смотрите строку 640), значения 0;
610 - установка текущего цвета символов;
620 - печать названия игры;
630 - увеличение номера текущего цвета на единицу, но так, чтобы он не превышал число 7. Если он станет больше 7, то переменная с примет значение 1;
640 - в этой строке изменяется значение счетчика, контролирующего количество выполняемых циклов. Счетчик применяется в тех случаях,
когда по каким-либо причинам невозможно или затруднено использование оператора FOR...NEXT. Как только в счетчике окажется число, большее 200, произойдет переход на строку 700, начинающую вывод на экран третьего кадра, который мы назовем РЕЗУЛЬТАТЫ;
650...680 - очень важный блок операторов условного перехода, с помощью которого можно из меню попасть на другие кадры заставки или к разным частям игровой программы. Для этого необходимо нажать одну из клавиш 1, 2, 3 или 4;
650 - если нажать клавишу 1, то программа перейдет на строку 2000, с которой должна начинаться игровая часть программы;
660 - нажатие клавиши 2 вызывает переход на строку 1000, с которой предполагается начинать подпрограмму 4-го кадра, который назовем ПЕРЕНАЗНАЧЕНИЕ КЛАВИШ Такая часть имеется в игре МАКСИТ, представленной в Приложении 1;
670 - при нажатии клавиши 3 начинается подпрограмма выбора уровня игры (строка 3000). Это может быть изменение каких-то переменных, либо создание нового лабиринта, как, к примеру, в игре СОКОБАН;
680 - если нажать клавишу 4, выполнится один из самых простых операторов Бейсика - STOP, который остановит выполнение программы. В служебном окне экрана появится сообщение
STOP statement;
690 - если будет нажата клавиша, отличная от 1...4, или не будет нажата никакая клавиша, то программа возвратится к строке 610 и, начиная с нее, повторится;
700 - начало нового кадра заставки - РЕЗУЛЬТАТЫ;
710 - звуковой сигнал;
720, 730 - очистка экрана и установка цвета символов;
740...760 - печать таблицы из 9 строк, в каждой из которых указан ее номер, затем точками отмечено место, куда потом будет заноситься имя игрока и наконец, набранные очки;
770 - еще один счетчик, необходимый для того, чтобы таблица «держалась» на экране определенное время. Оператор PAUSE ни здесь, ни в меню не может быть использован, так как надпись HI SCORE (строка 820), расположенная над таблицей, должна переливаться разными цветами;
780 - эта строка работает так же, как и строка 630;
790 - увеличение счетчика на единицу;
800 - если число в счетчике станет больше 200, или будет нажата какая-либо клавиша, то произойдет переход к строке 500. Таким образом, строки 640 и 800 выполняют автоматическое переключение с меню на таблицу результатов и наоборот.
Здесь нужно сказать вот о чем. Когда при выполнении одного из нескольких условий должны следовать одинаковые действия компьютера, то обычно строки с этими условиями записываются как одна, а сами условия соединяются ключевым словом OR - «или». Таким образом, два условия объединены в одной строке: 800 IF f>200 OR INKEY$<>"" THEN GO TO 500
Это позволяет не только сократить текст программы, но и несколько увеличить ее быстродействие. Надо добавить еще, что в операторе IF...THEN при необходимости подобным образом можно проверять не два, а сколько угодно условий;
810, 820 - установка текущего цвета и печать в строке 1 и позиции 11 слов HI SCORE (максимальный счет);
830 - безусловный переход на строку 780, где изменяется цвет надписи HI SCORE;
1000 - начало подпрограммы переназначения клавиш. Ее, если потребуется, вы сможете написать самостоятельно;
2000 - с этой строки должна начинаться игровая часть программы;
3000 - начало подпрограммы установки уровня игры.
Делаем картинку-заставку с помощью Art Studio
Выше мы рассмотрели программы-заставки, написанные на Бейсике, в которых использованы различные интересные эффекты. Но, как известно, первым кадром в фирменных заставках почти всегда идет яркая картинка, которую средствами Бейсика сделать практически невозможно. Для этого больше подходят специальные графические редакторы, с одним из которых - пожалуй, наиболее мощным - мы сейчас познакомимся.
Применение редактора Art Studio позволит вам создавать красочные картинки, которые по качеству не уступят фирменным. Предел совершенству может положить только отсутствие фантазии и трудолюбия. Подробное описание Art Studio имеется в книге [1], но не у всех она есть, поэтому мы сочли необходимым поместить в Приложении 3 краткую сводку команд редактора. Здесь же мы расскажем о том, как использовать эту программу для конкретных целей - создания картинки-заставки и как после записи экранного файла на ленту встраивать его в конкретную игру.
После загрузки Art Studio в компьютер, в верхней части экрана появится главное меню, а ниже - стрелка курсора. Управление стрелкой может осуществляться как джойстиком, так и с помощью клавиатуры: клавиши Q, А, О и Р двигают стрелку соответственно вверх, вниз, влево и вправо. Если нажать сразу две клавиши, например, Q и О, то стрелка будет двигаться по диагонали. Ввод в действие выбранной функции выполняет клавиша М или кнопка Огонь джойстика.
Рассмотрим последовательность действий при создании экранной картинки.
Начнем работу с установки стрелки на функцию ATTRIBUTES (выбор палитры). Нажав клавишу М (или Огонь), вы увидите в прямоугольной рамке еще одно меню, в котором легко узнать встречавшиеся ранее слова INK, PAPER, BORDER и другие. Если же действие какой-то функции вам не совсем понятно - загляните в Приложение 3 или в книгу [1].
Если вы случайно попали не в то меню, достаточно отвести стрелку в область, не занятую меню, и нажать М.
Предположим, что выбрана функция SET INK (установка цвета тона - INK). На экране сразу появится цветовая палитра, в которой с помощью стрелки выбирается нужный цвет. То же самое можно проделать для PAPER и BORDER. А вообще, не бойтесь экспериментировать, проверьте действие всех функций этого меню и подберите комбинацию цветов для создания своей первой картинки.
Следующий шаг - выбор инструмента, с помощью которого вы будете создавать свое произведение. Для этого установите стрелку в главном меню на функцию PAINT (рисование кистью, пером, распылителем) и нажмите М. В появившемся новом меню выберите для качала PEN (рисование пером), а затем - одно из 18 перьев (в каждом из 18 появившихся квадратиков показано, какова будет толщина линий по горизонтали, вертикали и диагонали).
Техника рисования очень проста: нажатие клавиши М опускает перо на «бумагу», а клавиши Q, А, О и Р перемещают его в разных направлениях. Выполните рисунок из линий, причем таким образом, чтобы в нем было несколько замкнутых областей (рис. 2.4), назначение которых станет понятно вам позднее.
Если в какой-то момент у вас дрогнула рука и линия получилась не такой ровной, как хотелось бы, установите стрелку на функцию UNDO главного меню и нажмите М. Экран примет тот вид, который он имел до выполнения последнего действия. Таким образом функция UNDO позволяет исправить практически любую ошибку
Попробуйте теперь улучшить свой рисунок при помощи распылителя. Для этого необходимо вернуться стрелкой к пункту PAINT и выбрать в нем функцию SPRAY CAN (рисование распылителем) Плотность распыления можно установить выбором одного из 8 квадратиков. Попрактикуйтесь немного в малярном ремесле (рис. 2.5), после чего можно переходить к работе кисточкой.
Этот режим устанавливается в пункте BRUSH главного меню. Выберите одну из 16 появившихся кисточек, например, «рожицу», и проведите несколько линий (рис. 2.6). Думается, что это занятие доставит вам удовольствие.
Графический редактор Art Studio позволяет не только рисовать линии, но и закрашивать замкнутые области различными фактурами. Поставьте стрелку в главном меню на функцию FILL (закрашивание объекта)
и нажмите клавишу М. В появившемся новом меню выберите пункт SOLID FILL (полное закрашивание объекта) и передвиньте валик, заменивший в этом режиме стрелку-курсор, на одну из замкнутых областей вашего рисунка. После нажатия клавиши М эта область должна закраситься цветом, установленным ранее функцией SET INK пункта ATTRIBUTES. Если вам захочется закрасить новую область другим цветом, обратитесь к пункту ATTRIBUTES и после появления меню выберите SET INK и далее желаемый цвет. Теперь опять перейдите к пункту FILL и установите новый режим - TEXTURED FILL (заполнение объекта фактурой). Какой только фактуры нет в этих 32 квадратиках - на любой вкус! Выберите «кирпичи» и заполните ими одну область, затем подберите какой-нибудь «текстиль» и заполните другую, и так далее, для всех областей (рис. 2.7).
Если в качестве фактуры взять, к примеру, вертикальные полоски, а валик установить за пределами всех замкнутых областей, то после нажатия М вся внешняя часть рисунка заполнится этой фактурой, а рисунок тем самым выделится и станет еще лучше.
И, наконец, последний штрих в создании рисунка. Программа Art Studio работает не только с изображениями, но и с текстом. Установите стрелку на пункт TEXT главного меню (работа с текстом) и задайте высоту (...HEIGHT) и ширину (...WIDTH) букв. Теперь выберите функцию LEFT TO RIGHT (печать текста слева направо). Стрелка заменится курсором, размер которого зависит от высоты и ширины букв. Поместите курсор в то место экрана, откуда должен начинаться
текст, нажмите М и набирайте текст (рис. 2.8). Для редактирования можно использовать
курсорные клавиши и клавишу DELETE (Caps Shift и 0). Ввод надписи завершается нажатием клавиши Enter.
Для печати текста сверху вниз нужно выбрать в меню DOWNWARDS. О других способах вывода текста на экран можно узнать в Приложении 3.
С помощью графического редактора можно строить геометрические фигуры (функция SHAPES), редактировать мелкие детали изображений в увеличенных масштабах (функция MAGNIFY) и т, д. Некоторые из этих функций Art Studio мы рассмотрим в других главах.
Итак, вы нарисовали свою первую компьютерную картину, и теперь хорошо было бы записать се на магнитную ленту. Для этого в редакторе предусмотрен пункт главного меню FILE, с помощью которого можно не только записать картинку на магнитный носитель, но загрузить и подправить рисунок от другой игровой программы, проверить правильность записи и многое другое. Поскольку в данный момент нас интересует запись, то выберите функцию SAVE FILE (запись экранного файла). На экране появится запрос: Filename? (имя файла?). Теперь с клавиатуры нужно ввести имя, под которым будет записан экранный файл, например, SCREEN$ Нажав клавишу Enter, вы увидите на экране знакомое сообщение: Start tape, then press any key (включите магнитофон на запись и нажмите любую клавишу). Начнется запись на ленту экранного файла длиной 6912 байт. Когда файл будет записан на экране вновь появится главное меню.
В заключение покажем, как можно использовать получившийся экранный файл на конкретном примере - игровой программе МАКСИТ, представленной в Приложении 1. Запишите на ленту маленькую программу-загрузчик: 10 LOAD "SCREEN$"CODE 16384 20 LOAD "MAXIT"
В этой программе строка 10 загружает в экранную область памяти компьютера (с адреса 16384) созданный вами файл. А после того, как картинка полностью появится на экране, строка 20 обеспечит загрузку бейсик-программы игры МАКСИТ.