ZX-Ревю 1993 №5-6 1992 г.

Сделайте сами - вниманию читателей, любящих осваивать компьютер в работе по набору игровых программ, сегодня мы предлагаем программу "BLOCK BUSTER".


СДЕЛАЙТЕ САМИ

BLOCK BUSTER

Вниманию читателей, любящих осваивать свой компьютер в практической работе по набору и отладке игровых программ, сегодня мы предлагаем программу английского программиста Адама Булла "BLOCK BUSTER". Программа нами переведена на русский язык и оттестирована.

Игра представляет собой одну из версий распространенных в свое время игр типа "TIME BOMB". Ваше игровое поле состоит из прямоугольных блоков и некоторых специальных полей (премиальные поля выглядят как флажки, а незадействованные бомбы изображаются черепом со скрещенными костями).

Время от времени одна из бомб включается и начинает мигать. Ваша задача поставить своего сапера на это поле до того, как истечет время горения запала.

Сапер перемещается с помощью курсорных клавиш. Блок, по которому он прошел один раз исчезает. Второй раз наступить на эту же клетку смертельно опасно. Не менее опасно наступить на заминированную незадействованной бомбой клетку.

По мере того как все меньше и меньше блоков будет оставаться на экране, Вам все труднее будет подобраться к очередной бомбе. Здесь вам на помощь может прийти одна дополнительная возможность. С помощью клавиш "1" и "2" Вы можете сдвинуть влево или вправо ряд блоков, в котором находится Ваш герой.

Начиная со 2-го уровня в игре начнут попадаться ряды цветных блоков, которые не сдвигаются, да и количество бомб на каждом уровне будет все больше и больше.

Еще одна полезная возможность связана с циклической организацией игрового поля. Покинув экран вправо, Ваш герой появится слева, покинув экран сверху, он появится снизу и, соответственно, наоборот.

Теперь несколько слов о русификации. Она подробно описана нами в прошлом выпуске ZX-РЕВЮ при разборе программы "AFRICAN SEEDS". Здесь следует применить ту же самую технику. Более того, в наших последующих работах мы всегда будем ссылаться на нее, как на стандартную. Это позволит Вам не тратить время на русификацию и всегда использовать одни и тот же программный блок.

А теперь, когда есть определенность с вопросом русификации, можно переходить непосредственно к тексту программы "BLOCK BUSTER". Буквы с "A" по "P" в кавычках в строках 60, 110, 160, 200, 1010, 1040, 4030, 4040, 4530, 6055 - это символы UDG-графики.

Основные переменные, использованные в программе, имеют следующее назначение:

HI - лучший результат.

SC - текущий счет игры.

L - текущий уровень.

L$ - строковая переменная, в которой хранится количество оставшихся попыток.

A,B - текущие координаты сапера.

АА,BB - последние координаты сапера

F1,F2 - координаты премиального флага.

B1,B2 - координаты активизированной бомбы.

M$ - массив, в котором хранится конфигурация игрового поля.

B0 - количество бомб на каждом уровне.

T - время, оставшееся до взрыва бомбы.

D - номер ряда для неперемещаемых блоков.

Х$ - переменная, используемая в функции INKEY$ и т. п.

X, Y, Z - переменные общего назначения.

СЧЕТ:271 МПКС.14 41

вввв в в ввв в

ВВВВВВ в & вв ВВВВВВ в ^ в вв

в в вввв вв вв вв вв вв

□ЗШС

JJJIJU

1 GO TO 10

2 CLEAR 64599: RANDOMIZE USR 15619: REM : LOAD "chr" CODE 64600

3 GO SUB 8: GO SUB 5000: GO TO 0

5 RANDOMIZE USR 15619: REM : ERASE "BUSTER"

6 RANDOMIZE USR 15619: REM : SAVE "BUSTER" LINE 2

7 STOP

8 POKE 23606,88: POKE 23607,251: RETURN: REM RUS

9 POKE 23606,0: POKE 23607,60 : RETURN : REM LAT

10 LET HI = 0: GO SUB 8

20 PAPER 7: BORDER 7: INK 0: BRIGHT 0: CLS : PRINT AT 11,0; "НАЖМИТЕ КЛАВИШУ <I>, ЕСЛИ НУЖНА

ИНСТРУКЦИЯ" 30 IF INKEY$<>"" THEN GO TO 30 40 IF INKEY$="" THEN GO TO 40 50 IF INKEY$="i" OR INKEY$="I" THEN GO SUB 6000 60 RANDOMIZE : LET SC=0: LET L=1: LET L$="PPP" 70 LET A=19: LET B=15: LET AA=A: LET BB=B 80 LET D=-1+(INT (RND*10)*2+2 AND L>2): GO SUB 4000 90 LET F1=Y: LET F2=Z: LET T=-1: LET B0=1: LET B1=T: LET B2=T 100 REM *MAIN GAME *

110 PRINT AT F1,F2; INK 6; "DE";AT F1+1,F2;"FG";AT A,B; INK 7;"LM"; AT A+1,B;"NO" 120 IF AA<>A OR BB<>B THEN LET SC=SC+2: PRINT AT AA,BB;" ";AT AA+1,BB;" ": LET M$(AA,BB TO BB+1)=" ": LET M$(AA+1,BB TO BB+1)=" ": IF M$(A,B)=" " AND (F1<>A OR F2<>B) THEN GO TO 1000 130 LET AA=A: LET BB=B

140 IF A=F1 AND B=F2 THEN BEEP .02,20: BEEP .02,25: BEEP .02,30: GO SUB 4500: LET F1 = Y:

LET F2=Z: LET SC=SC+20 150 IF A=B1 AND B=B2 THEN LET B0=B0+1: BEEP .03,30: BEEP .03,25: BEEP .03,20: LET

SC=SC+L*15: LET T=-1: LET B1=T: LET B2=T 160 IF M$(A,B)="H" OR T=0 THEN GO TO 1000 170 IF B0>L*3+3 THEN GO TO 3000 180 PRINT AT 0,5; INK 7;SC

190 IF T>0 THEN LET T=T-1: PRINT AT B1,B2; FLASH 1; INK 6; PAPER 2;"**";AT B1+1,B2; "**"; AT

B1+ (INT(T/2)=T/2),B2;T: BEEP .01,T+10: GO TO 500 200 LET Y=M(B0): LET Z=INT (RND *15)*2+1: IF M$(Y,Z)="H" THEN LET T=50-L*4: LET B1=Y: LET

B2=Z: LET M$(Y,Z TO Z+1)="|A": LET M$(Y+1,Z TO Z+1)="BC" 500 LET X$=INKEY$: IF X$<"5" THEN GO TO 540

510 LET A=A+(2 AND X$="6")-(2 AND X$="7"): LET B=B+(2 AND X$="8")-(2 AND X$="5") 520 LET A=A+(20 AND A<1)-(20 AND A> 19): LET B=B+(30 AND B<1)-(30 AND B>29) 530 GO TO 100

540 IF X$<>"1" AND X$<>"2" OR D=A THEN FOR X=1 TO 15: NEXT X: GO TO 100 600 IF X$="2" THEN GO TO 700

610 FOR X=0 TO 1: LET M$(A+X)=M$(A+X,3 TO )+M$(A+X): NEXT X 620 IF A=F1 THEN LET F2=F2-2 630 IF A=B1 THEN LET B2=B2-2 640 GO TO 800

700 FOR X=0 TO 1: LET M$(A+X)=M$(A+X,29 TO )+M$(A+X): NEXT X

710 IF A=F1 THEN LET F2=F2+2

720 IF A=B1 THEN LET B2=B2+2

800 FOR X=0 TO 1: PRINT AT A+X,1;M$(A+X): NEXT X

810 LET F2=F2+(30 AND F2=-1)-(30 AND F2=31)

820 LET B2=B2+(30 AND B2=-1)-(30 AND B2=31)

900 GO TO 100

1000 REM * LOSE A LIFE *

1010 FOR X=7 TO 0 STEP -.2: PRINT AT A,B; INK X;"LM"; AT A+1,B;"NO": NEXT X

УРОВЕНЬ!

FOR X=50 TO 10 STEP -1: BEEP .01,X: BEEP .01,X+3: NEXT X LET L$=L$(2 TO ): IF L$="" THEN PRINT AT 0,20;" ": GO TO 2000

IF M$(A,B)="H" OR M$(A,B)=" " THEN GO SUB 4500: LET A=Y: LET B=Z: LET AA=A: LET BB=B:

IF M$(A,B)=" " THEN GO TO 1040 IF T=0 THEN LET B0=B0+1: LET T=-1: LET B1=T: LET B2=T GO SUB 4060: GO TO 170 REM * GAME OVER * PRINT AT 9,0; PAPER 1; FLASH 1;" <<<<<<<< ИГРА ОКОНЧЕНА >>>>>>>> <<<<<<<< ЕЩЕ РАЗ (Y/N)? >>>>>>>>" IF SC>HI THEN LET HI=SC: GO SUB 4070 FOR X=1TO 50: BEEP .004, X IF INKEY$="y" OR INKEY$="Y" THEN GO TO 60 IF INKEY$="n" OR INKEY$="N" THEN STOP NEXT X: GO TO 2030 REM * NEXT LEVEL *

LET L=L+(L<9): LET X$="СУПЕР ПРИЗ! =-= СУПЕР ПРИЗ! =-= "

FOR X=1 TO 50: PRINT AT 21,0; INK 6; FLASH 1;X$: BEEP .01,X: LET X$=X$(2 TO )+X$

LET X$=X$( TO 32): NEXT X

LET SC=SC+55*L: GO TO 70

REM * SET UP SCREEN *

PAPER 0: INK 5: BORDER 0: BRIGHT 1: CLS

DIM M$(20,30): DIM M(L*3+3)

FOR X=1 TO 20 STEP 2: LET M$(X) ="|A|A|A|A|A|A|A|A|A|A|A|A|A|A|A": LET M$(X+1) =

"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBC": NEXT X FOR X=1 TO L*3+3: GO SUB 4500: LET M$(Y,Z TO Z+1) = "HI": LET M$(Y+1,Z TO Z+1) = "JK" LET M(X)=Y: NEXT X

FOR X=1 TO 20: PRINT AT X,1; INK 5-(2 AND (X=D OR X=D+1));M$(X): NEXT X PRINT AT 0,0; BRIGHT 0; INK 7; "СЧЕТ:"^^ 10;"MAKC. ";HI;TAB 20;L$;TAB 24;

"УРОВЕНЬ";L REM * RANDOM POSITION * LET Y=INT (RND*10)*2+1 LET Z=INT (RND*15)*2+1

IF M$(Y,Z)="H" OR Y=19 AND Z=15 THEN GO TO 4510 RETURN

REM * U.D.G. DATA *

POKE 23675,88: POKE 23676,255: FOR X=0 TO 127: READ Y: POKE USR "A"+X,Y: NEXT X: RETURN

DATA 248,244,242,242,242,242,242,242,255,255,255,255,64,32

DATA 31,0,242,242,242,242,10,6,254,0,0,0,15,63,127,127,127

DATA 127,60,60,24,248,216,216,216,216,127,112,64,0,0,0,0,0

DATA 216,248,24,24,24,24,24,0,96,231, 255,63,57,57,63,30

DATA 12,206,254,248,56,56,248,240,30,15,28,60,247,227,96,0

DATA 240,224,112,120,222,142,12,0,7,7,63,15,31,61,57,63,192

DATA 192,248,224,240,120,56,248,123,92,79,39,12,88,112,0

DATA 188,116,228,200,96,52,28,0,60,255,90,126,165,24,36,66

CLS : PRINT "

BLOCK BUSTER"' "

ИСПОЛЬЗУЙТЕ КУРСОРНЫЕ КЛАВИШИ ДЛЯ ПЕРЕМЕЩЕНИЯ ""САПЕРА"" ПО ЭКРАНУ. ПРИ ПЕРЕХОДЕ ЧЕРЕЗ КРАЙ ЭКРАНА, ОН ПОЯВИТСЯ С ДРУГОЙ СТОРОНЫ."

PRINT "

ВЫ ДОЛЖНЫ УСПЕВАТЬ ОБЕЗВРЕЖИВАТЬ БОМБУ, ДО ТОГО, КАК ОНА ВЗОРВЕТСЯ. НО ЭТО МОЖНО СДЕЛАТЬ ТОЛЬКО КОГДА ОНА АКТИВИЗИРУЕТСЯ."

PRINT "

ВЫ НЕ МОЖЕТЕ ИДТИ ПО ПУСТЫМ ПОЛЯМ И НАСТУПАТЬ НА НЕАКТИВИЗИ-РОВАННЫЕ БОМБЫ."

PRINT "

ГОРИЗОНТАЛЬНЫЙ РЯД БЛОКОВ МОЖНО СДВИГАТЬ ВЛЕВО ИЛИ ВПРАВО

КЛАВИШАМИ <1> ИЛИ <2>. ЭТО ПОМОЖЕТ ВАМ ПОДОЙТИ К БОМБЕ И Т.Д." 6040 PRINT "

ЕСЛИ ВЫ БЕРЕТЕ ФЛАГ, ТО ВАМ ВЫДАЕТСЯ ПРЕМИЯ." 6050 GO SUB 9: PRINT "': GO SUB 8 6055 PRINT "

|A : БЕЗОПАСНЫЙ БЛОК.....ВС......DE : ФЛАГ.....FG......HI

БОМБА.....JK......LM : ВАШ САПЕР.....NO.......УДАЧИ ВАM..."

6060 IF INKEY$="" THEN GO TO 6060 6070 RETURN

НЕАКТИВИЗИРОВАННАЯ .....НАЖМИТЕ ЛЮБУЮ КЛАВИШУ"

Набирая программу, можете периодически пользоваться RUN 5 для сохранения на ленте того, что уже набрано.

После автостарта программы со строки 2, происходит загрузка символьного набора "chr" CODE, далее происходит формирование символов UDG-графики при помощи подпрограммы 5000. После этого выполняется переход на начало программы. После остановки во время отладки, программу можно опять запускать командой RUN.

В строке 20 следует запрос на вывод инструкции. Если есть подтверждение для этого - нажата клавиша "I" - то происходит вывод инструкции при помощи подпрограммы 6000.

В строках 60-90 происходит задание исходных параметров игры. При помощи подпрограммы со строки 4000 выполняется прорисовка основного игрового поля. Задание случайных позиций для расстановки "мин" при этом происходит в строках с 4500.

Со строки 100 начинаются действия, связанные непосредственно с игрой. В строке 120 проверяется одно из условий, при которых происходит потеря "жизни". Это попадание "сапера" на пустое поле. Если оно выполняется, то программа переходит на строку 1000 для выполнения действий, связанных с этим.

Другое условие потери жизни - это попадание "сапера" на поле, где установлена неактивизированная мина. Оно проверяется в строке 160.

Строка 170 выполняет проверку того, все ли мины обезврежены. Если да, то программа переводит на строку 3000 - это переход на следующий уровень.

Опрос клавишей управления происходит начиная со строки 500. Здесь выполняется рассчет новых координат "сапера", если нажата одна из курсорных клавишей. Если же нажата клавиша "1" или "2", то выполняются действия по сдвиганию горизонтального ряда блоков влево или вправо. При нажатии клавиши "1" это выполняется в строках с 610, а при нажатии "2" - в строках с 700.

В подпрограмме потери жизни со строки 1000 происходит уменьшение на 1 количества оставшихся жизней. Если их больше не осталось, что проверяется в строке 1030, то происходит переход на подпрограмму "конец игры", которая находится в строках с 2000. здесь вам будет предложено сыграть еще раз. Если да, то игра повторится сначала (при этом сохранится максимальный счет, набранный в предыдущей игре), если нет - то остановка и выход в Бейсик.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Введение - Пoсле пpoдoлжительнoгo зaтишья мы pешили выпустить нoвый выпуск нaшегo электpoннoгo издaния.
Basics of Machine Code
Edit off - Ну вот, вроде, небольшой номерок 2 и завершен...
Hint - описание прохождения очень кульной цацки - Crime Santa Clause Deja Vu.
анекдоты - Колобок повесился!!!

В этот день...   21 ноября