Игровая программа
Попробуем использовать операторы и графические переменные Laser Basic в простенькой игре, которую назовем БЕГА МЫШЕЙ. Как и ранее, спрайты возьмем из спрайт-файла SPRITES2B. Если же вам захочется создать собственный набор картинок для новой игры, следует сначала воспользоваться одним из генераторов спрайтов: SPTGEN или SPRITER. Обе программы предназначены для создания наборов собственных спрайтов которые можно будет использовать в Laser Basic. При этом, если SPTGEN ориентирован на создание изображений по точкам, то SPRITER позволяет использовать готовые картинки, нарисованные в любом графическом редакторе для ZX Spectrum (Art Studio, The Artist II и др.), или даже позаимствовать объекты из фирменных заставок. Последнее обстоятельство открывает богатейшие возможности для творчества. О том, как работать со спрайт-генераторами, подробно рассказано в книге [2].
А мы вернемся к нашей игре и для начала скажем несколько слов о ее сюжете.
Игровое пространство представляет собой горизонтальные цветные полосы, по которым слева направо двигаются 6 мышек (рис. 8.3). Скорость их движения задается генератором случайных чисел, поэтому предсказать заранее, какая из мышей первой придет к финишу, очень трудно. Но все же придется на какую-то из них сделать ставку, причем в полновесной валюте - таковы правила игры.
Программа 31. БЕГА МЫШЕЙ.
10 RANDOMIZE USR 58841: GO TO 20 20 RANDOMIZE: LET D=300
30 REM ------------------
40 DIM X(6)
50 PAPER 0: INK 0: BORDER 0: CLS 60 PAPER 3:.HGT=3:.LEN=13 70 FOR N=0 TO 5
80 PAPER 7-N:.ROW=N:.COL=N*2:.CLSV:.SETV
90 PLOT N*16+1,174-(N*8): DRAW 101,0: DRAW 0,-21:DRAW -101,0: DRAW 0,21
100 PAUSE 5: NEXT N
110 PRINT AT 6,11;"BEGA MYSHEJ"
120 PAPER 0: INK 3
130 PRINT AT 19,0; INK 6;"U WAS ";D;"$"
140 PRINT AT 21,0; INK 6;"SKOLKO $ POSTAVITE?"
150 INPUT "-->";ST
160 IF ST<1 OR ST>D THEN GO TO 150
170 LET D=D-ST 180 BEEP .1,0
190 REM ------------------
200.ROW=15:.COL=0:.HGT=8:.LEN=32:.CLSV
210 PRINT AT 21,0; INK 6;"NA KAKUIU MYSH POSTAVITE?"
220 INPUT "No:";MY
230 IF MY<1 OR MY>6 THEN GO TO 220
240 BEEP .1,0
250 REM ------------------
260 CLS
270 PRINT AT 0,11;"BEGA MYSHEJ" 280 INK 0:.COL=0:.HGT=2:.LEN=32 290 FOR N=1 TO 6 300 PRINT AT 2+(N*2),31;N 310 PAPER N:. ROW=2+N*2:. SETV 320 NEXT N
330 PLOT 240,45: DRAW 0,100
340.SPN=2:.COL=0
350.ATOF
360 FOR N=1 TO 6 370.ROW=2+N*2:.PTBL 380 NEXT N 390.ATON
400 REM --------
410.ROW=0:.COL=10:.HGT=2:.LEN=13:.NPX=1:.WCRV
420.COL=0:.HGT=2:.LEN=30
430 LET R=INT (RND*6+1)
440 LET X(R)=X(R)+4
450.ROW=R*2+2:.SR4V
460 IF X(R)>205 THEN GO TO 500
470 GO TO 400
500 REM --------
510 INK 5: PAPER 0
520 PRINT AT 18,7;"POBEDILA MYSH No ";R
530 IF MY<>N THEN GO TO 590
540 FOR N=D TO D+ST*4
550 PRINT AT 20,0;"U WAS STALO: ";N;"$"
560 BEEP .002,50
570 NEXT N
580 LET D=D+ST*4
590 PAUSE 300
600 GO TO 40
10 - инициализация интерпретатора Laser Basic;
20 - восстановление генератора случайных чисел и задание начального капитала играющего;
40 - задание массива, определяющего горизонтальные координаты мышей; 50 - установка атрибутов экрана;
60 - задание размеров окна для вывода названия игры;
70... 100 - на экране появляются 6 разноцветных окошек заданного размера, расположенные по диагонали как бы одно поверх другого;
110 - вывод в последнее появившееся окошко названия игры; 120...150 - информация о том, сколько у вас осталось денег и ввод суммы ставки; 160 - проверка размера ставки: она должна быть больше I, но не превышать размеров наличного капитала;
170 - после того, как ставка сделана, она вычитается из ваших денег; 180 - звуковой сигнал;
200...240 - ввод в программу новых данных;
200 - очистка нижней части экрана;
210 - вывод вопроса: «На какую мышь поставите?»
220 - ход игрока: ввод номера дорожки, по которой побежит «ваша» мышка;
230 - проверка условия, находится ли номер выбранной дорожки в пределах от 1 до 6;
240 - звуковой сигнал;
250- - начало формирования игрового пространства;
260 - очистка экрана;
270 - вывод названия игры;
280 - задание окна, охватывающего одну дорожку;
290...320 - вывод на экран шести дорожек разного цвета, в конце которых ставятся их номера;
330 - вычерчивание линии финиша;
340 - задается спрайт мыши (номер 2) и начальная позиция по горизонтали;
350 - запрет переноса атрибутов;
360...380 - вывод спрайтов мышек в начале каждой из шести дорожек;
390 - разрешение переноса атрибутов;
400 - начало «бегов»;
410 - задается окно, вмещающее название игры и осуществляется его вертикальный циклический скроллинг оператором .WCRV. Циклический -означает, что уходящее за пределы окна изображение появляется с другой его стороны. Величина скроллинга (в пикселях) задается графической переменной .NPX. При положительном значении этой переменной окно движется вверх, а при отрицательном - вниз;
420 - задание окна, охватывающего одну дорожку;
430 - генерация случайного числа в пределах от 1 до 6 и присваивание его значения переменной R. Предполагается, что мышь с номером, выбранным в этой строке, будет в данный момент времени двигаться вперед;
440 - координата X выбранной случайным образом мыши увеличивается на 4, так как дальше ее изображение должно сдвигаться на 4 пикселя вправо;
450 - задание переменной .ROW в соответствии с положением на экране дорожки, по которой побежит выбранная мышь, и сдвиг окна с мышью на 4 пикселя вправо;
460 - проверяется, не дошла ли мышь до финишной линии. Если нет, то происходит переход на начало цикла «бегов». Если же мышь достигла финиша, то программа переходит на строку 510, начиная с которой выводятся на экран результаты игры: «Победила мышь N...», и в случае, если этот номер совпал с заданным вами, то ваш капиталу увеличивается на 4 ставки (строки 540...580) и игра начинается заново.
То, о чем мы рассказали в этой главе, иллюстрирует лишь малую часть возможностей Laser Basic. Добавим, что перемещать спрайты можно пятью способами. Интересные результаты при разработке игр дает наложение спрайтов, различные виды их преобразований, а также операции с пейзажем. С помощью Laser Basic легко решается одна из непростых задач при создании динамических игр - определение факта «столкновения» спрайтов. Для этого достаточно вставить в вашу программу одну из функций ?SCV или ?SCM.
Будем надеяться, что мы сумели заинтересовать вас этим замечательным диалектом Бейсика, который может оказать неоценимую помощь в создании игровых программ.