ZX-Ревю 1991 №1 1990 г.

Moon landing - Существует немалое количество версий программ управления посадкой корабля на Луне. У этой несложной, но увлекательной программы есть то преимущество, что Вы можете ее набрать сами.


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

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

Цель программы - совершить посадки на 5-ти лунных базах. Управляющие клавиши -"9" - тяга, "7", "8" - поворот аппарата. Особый интерес представляет то, что при приближении к поверхности Луны изменяется масштаб изображения и Вы можете более тонко управлять посадкой.

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

Не отчаивайтесь, если после того, как Вы наберете программу, она не заработает. Программа достаточно трудоемкая для набора, и как бы Вы аккуратны ни были, 5-7 ошибок Вы все равно сделаете. Зато Вас впереди ждет удовольствие отладить программу. Вы убедитесь, что это интереснее и полезнее, чем просто в нее поиграть.

Во время набора не забывайте периодически делать SAVE. Это избавит Вас от многих хлопот.

10 REM Настройка переменных 20 PAPER 0: BORDER 0: CLS : INK 4

30 LET lv=.5: LET sc=0: LET z =3: LET l=0: LET vs=30: LET hs=21

35 GO SUB 9000

36 LET Pad=0: LET f=3000: DIM C(30)

40 LET ls=9530: LET h = 0: LET d = 0: LET line=2: LET column=10: LET drift=3: LET gs=147:

LET down=4: LET s=0 60 GO SUB 9500

70 PRINT AT 14,4; FLASH 1;"x"; AT 20,9;"x"; AT 17, 15; "x"; AT 15, 21; "x"; AT 19, 24; "x" 100 REM Начало работы программы 110 INK 7

115 PRINT AT 0,0; INVERSE 1; INK 6;"v/speed: ";VS;" "; AT 0, 15; "h/speed: ";hs;" ":

AT 0,31 ;z;#0; INVERSE 1; INK 6; AT 0,0; "fuel: "; f; " "

116 IF INT line=h-2 AND (INT column=d OR INT (column+.5)=d) THEN GO TO 600 120 PRINT AT line,column; CHR$ gs

125 IF ATTR (line+SGN vs,column + SGN drift)=4 OR ATTR (line, column + SGN drift)=4 THEN GO TO 800

130 LET pc=column: LET pl=line 140 LET column=column+SGN drift

145 LET line=line+lv*SGN vs*(ATTR (line+ SGN vs,column) <> 132)

150 LET drift = drift+(INKEY$="9" AND gs=146)-(INKEY$="9" AND gs=144)

155 LET down=SGN (down+(INKEY$="9" AND gs=145)-(INKEY$="9" AND gs=147)-down*(INKEY$ = ""))

160 LET gs=gs+(INKEY$="7")-(INKEY$ = "8")

170 IF gs=148 THEN LET gs=144

180 IF gs=143 THEN LET gs=147

190 IF INKEY$ ="9" THEN LET f=f-10

195 IF INKEY$ ="9" THEN BEEP 08,20

200 IF column >= 30 THEN GO TO 700

210 IF column >= 0 AND column<1 THEN GO TO 760

220 IF line=1 THEN LET line=2

230 LET vs=vs+5+15*down: LET hs=drift*7

235 IF S <> 0 THEN GO TO 250

240 IF line >= 12 AND s=0 THEN GO TO 505

250 IF s=1 AND line <= 2 THEN RESTORE 9530: LET column=(column /3.1) +22*

(ls=9580)+19*(ls=9570)+ 11*(ls=9560)+6*(ls=9550) : LET ls=9530: CLS : INK 4: LET line=11: LET s=0: GO TO 60 270 IF l = 6 THEN BEEP .08,40: LET l=0 275 LET l=l+1

280 IF line <= 2 THEN LET line = 2 290 IF f = 0 THEN GO TO 950 400 PRINT AT pl,pc;" " 410 GO TO 100

500 REM Изменение сценария 505 LET column=INT column

510 LET ls=9530+10*(column>0 AND column<7)+20*(column>6 AND column<13)+30*(column>12 AND

column< 18)+40*(column>17 AND column<22)+50*(column>21 AND column<31) 520 CLS : INK 4: LET line=2: RESTORE ls 530 GO SUB 9500

540 LET h=6*(column>0 AND column<7)+21* (column>6 AND column<13) +16*(column>12 AND

column<18)+9*(column>17 AND column<22)+21* (column>21 AND column<31) 550 LET d=12*(column>0 AND column<7)+9*(column>6 AND column<13)+ 12*(column>12 AND

column<18)+16*(column>17 AND column<22)+ 6*(column>21 AND column<31) 560 PRINT AT h,d; FLASH 1;"x"

565 LET column=column-6*(column>21)-5*( column>17) -5* (column>12) -6*(column>6) 570 LET column=column*3.1: LET s=1 580 GO TO 100 600 REM Посадка

620 IF gs <> 147 OR vs>10 THEN GO TO 800

630 IF c(line+column) <> 1 THEN GO TO 680

640 PRINT AT 21,0; "RESTRICTED LANDING PAD. GO AWAY."

650 FOR i=1 TO 500

660 IF INKEY$="9" THEN LET h=0: GO TO 100 670 NEXT i: GO TO 800

680 PRINT AT 10,7; "GREAT LANDING"; AT 11, 6;"CONGRATULATIONS!" 690 LET c(line*column)=1: FOR i=1 TO 4: FOR j=0 TO 10: BEEP .08, j: NEXT j: NEXT i: RESTORE

9530:CLS: INK 4 693 LET sc=sc+100

695 LET pad=pad+1: IF pad=5 THEN GO TO 900

696 GO TO 40

700 REM Пересечение границ

710 IF ls=9530 THEN LET column=1: GO TO 400

720 LET ls=ls+10

730 IF ls=9590 THEN LET ls=9540

740 CLS : RESTORE ls: INK 4

750 LET column=(ls=9540)+8*(ls=9550)+13*(ls=9560)+18*(ls=9570)+22*(ls=9580): GO TO 530

760 IF ls=9530 THEN LET column=29: GO TO 400

770 LET ls=ls-10

780 IF ls=9530 THEN LET ls=9580

790 CLS : RESTORE ls: INK 4

795 LET column=6*(ls=9540)+12*(ls=9550)+17*(ls=9560)+21*(ls=9570)+29*(ls=9580): GO TO 530 800 REM Неудачная посадка

820 PRINT AT line-1,column-1; "~["; AT line, column -1;"-*."; AT line+1, column-1;"~[:" 830 BEEP .08,0: BEEP .08,5: BEEP .08,3

840 PRINT AT line-1, column-1;" "; AT line,column-1;" "; AT line+1,column-1;" " 850 PRINT AT 10, 7;"CRASH LANDED": LET z=z-1: IF z=0 THEN GO TO 870 860 RESTORE 9530: PAUSE 200: CLS : INK 4: GO TO 40 870 PRINT AT 2, 10;"Your Score: "; sc

875 PRINT AT 10,0; " GAME OVER "; AT 11,11; "Press any Key"

880 IF INKEY$ <> "" THEN GO TO 880 890 IF INKEY$ ="" THEN GO TO 890 895 RUN

900 REM Конец игры 905 LET sc=sc+f

910 CLS : INK 7: PRINT AT 5,1; "Well done. you have landed on all the pads with a score of

"; AT 8,12; FLASH 1; sc 920 IF z=0 THEN PRINT AT 12,3 ;"Press any key to start": PAUSE 0: RUN 930 LET z=z+1: LET lv=lv+.5 940 PAUSE 200: CLS : INK 4: GO TO 36 950 PRINT AT 10,7; "OUT OF FUEL": LET z=0: PAUSE 200 960 GO TO 870

9000 REM Изображение корабля

9010 FOR i=1 TO 4: READ N$: FOR j=0 TO 7: READ n: POKE USR n$+j, n: NEXT j: NEXT i 9020 DATA "a", BIN 00000101, BIN 00001111, BIN 01101101, BIN 11111100, BIN 11111100, BIN

01101101, BIN 00001111, BIN 00000101 9030 DATA "b", BIN 11100111, BIN 01000010, 255, BIN 01111110, BIN 00011000, BIN 00111100,

BIN 00111100, BIN 00011000 9040 DATA "c", BIN 10100000, BIN 11110000, BIN 10110110, BIN 00111111, BIN 00111111, BIN

10110110, BIN 11110000, BIN 10100000 9050 DATA "d", BIN 00011000, BIN 00111100, BIN 00111100, BIN 0001000, BIN 01111110, 255, BIN

01000010, BIN 11100111 9060 RETURN

9500 REM Лунный пейзаж

9510 READ x, y: PLOT x, y

9520 FOR n=0 TO 25: READ h,v: DRAW h,v: NEXT n

9530 DATA 0,31,16,0,16,32,8,0,8,8,16,-48,8,-8,8,0,8,16,16,8,8,16,8,-16,8,0,2,8,2,0,4,8,

16,16,8,-24,8,8,8,0,16,-32,8,0,16,40,8,-8,16,-8,6,16,6,-8 9540 DATA 0,31,48,0,48,96,24,0,24,24,48,-128,24,-16,24,0,8,16,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 9550 DATA 0,153,48,-128,22,-18,24,0,24,48,48,24,24,48,24,-48,24,0,6,12,4,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 9560 DATA 0,31,48,24,24,48,22,-56,24,0,6,12,6,0,6,24,48,48,24,-72,24,24,16,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 9570 DATA 0,55,6,24,6,0,12,24,48,48,24,-72,24,24,24,0,48,-96,24,0,32,104,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 9580 DATA 0,103,40,-96,24,0,56,120,24,-24,48,-24,24,48,32,-24,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 9999 RETURN

Комментарий к программе.

10 - 70 Настройка программных переменных.

100 - 410 Главная программа.

115 - Печать сообщений на экране

116 - Проверка посадки. 120 - Изображение корабля. 125 - Проверка аварии.

130 - 145 Расчет положения корабля.

150 - 155 Расчет горизонтального и вертикального перемещений. 160 - 180 Определение, в какую сторону направлен корабль. 190 - Если двигатель включен, то запас топлива уменьшается. 200 - 210 Проверка не находится ли корабль на краю экрана. 220 - Ограничение по вертикали.

230 - Пересчет вертикальной и горизонтальной скоростей. 235 - 250 Проверка на необходимость перестроения ландшафта. 290 - Проверка на конец топлива. 400 - Стирание корабля.

500 - 580 Перестроение ландшафта в новом масштабе, 600 - 696 Проверка условий посадки.

700 - 795 В увеличенном масштабе переход из одной зоны в другую. 800 - 895 Изображение аварийной посадки и возврат к началу.

900 - 940 Пересчет очков после удачной посадки, переход к началу на более высоком уровне сложности.

950 - 960 Действия, если кончилось топливо. 9000 - 9060 Графика UDG для изображения корабля.

9500 - 9999 Данные для построения лунного ландшафта.

* * *

Программные переменные. lv - уровень сложности. sc - счет.

z - количество оставшихся попыток. vs - вертикальная скорость. hs - горизонтальная скорость.

pad - количество площадок, на которые еще надо сесть. f - остаток топлива.

ls - номер строки, в которой хранятся данные для изображения ландшафта.

h - вертикальная координата площадки в экране с большим масштабом.

d - то же, но по горизонтали.

line - номер строки для изображения корабли.

column - номер столбца для изображения корабля.

drift - смещение корабля. Положительное - вправо.

gs - код символа UDG, которым изображается корабль.

down - смещение корабля по вертикали. При положительном - вниз.

s - равно 1, если изображение выполнено в крупном масштабе, иначе 0.

pl - номер строки, в которой был корабль перед данной.

pc - номер столбца экрана, в котором был корабль в предыдущий момент времени. Массив [c] - Если c(line+column) равно единице, то на данной площадке Вы уже садились.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Технология спрайтов - часть 5: структура спрайтовых блоков (как уживаются в памяти спрайт и маска, какие данные помогают нам оперативно находить адрес спрайта в памяти и многое другое.)
RtYtb=Ru - Карта мира.
X-Files - Слово ведущего.
PUSH HL - Нажмите MAGIC для BORDER-эффекта.
Новые приключения - Винни Пух.

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