D O O M (версия 4) by Dan Отредактировано: Bs0Dd (2023) - [mk.bs0dd.net] Играть ТОЛЬКО В РЕЖИМЕ ПОВЫШЕННОГО БЫСТРОДЕЙСТВИЯ (вкл с кн. "+") КОМАНДА VAC ПРИ ВВЕДЕННОЙ ПРОГЕ ЗАПРЕЩАЕТСЯ Управление: DEL - ВЫХОД 5 - ВЫСТРЕЛ 8 - ВПЕРЕД 2 - НАЗАД 4 - ВЛЕВО 6 - ВПРАВО Надо найти выход (череп на стене) и замочить всех летающих голов Нов. игра - Р1 Прод. старой - Р0 Ввести DEFM 27 Набрать следующие регистры (ВНИМАТЕЛЬНО, НЕ ПУТАТЬ 0 И O) Z$(7)="000V" Z$(8)="0006E" Z$(9)="00VEE" Z$(10)="0LEL" Z$(11)="0LAL" Z$(12)="03O3O3" Z$(13)="006EPV" Z$(14)="0ERLHE" Z$(15)="0LEVEL" Z$(16)="0LALAL" Z$(17)="0O3O3O" Z$(18)="0FG3P34" Z$(19)="0R0VLHE" Z$(20)="EHHRLAE" Z$(21)="3O3O3O3" Z$(22)="O3O3O3O" Z$(23)="OO33OO3" Z$(24)="0C8F8IK" Z$(25)="1ITD521" Z$(26)="0G973A5" Z$(27)="G9NMK8G" Для ускорения ввода можно использовать вспомогательную программу: 10 DEFM 27:FOR I=7 TO 27:PRINT "Z";I;:INPUT Z$(I):NEXT I После ввода данных программу нужно стереть (если МК-85 без М) иначе игра не влезет в память (занимает 1216 из 1221). При набивании листинга проги использованы сокращения (ввиду их отсутствия на станд. клаве компа) <= в МК85 это один символ >= в МК85 это один символ != не равно (один символ) | сплошной черный квадрат (как курсор который появляется при переполнении строки) Строки, обозначенные !!!, надо вводить без пробелов между операторами, иначе не влезут. Подчеркнутые символы в строках объяснены ниже Файл Р0 3 M=SIN O:N=COS O 4 CSR 7:PRINT CHR 1; ----- !!! 5 I=N*3:J=M*3:F=K+I-J:G=L+J+I:FOR H=0 TO 4:GOSUB 95:A(H)=P:NEXT H !!! 6 I=I-N:J=J-M:F=K+I-J:G=L+J+I:FOR H=0 TO 2:GOSUB 95:IF P!=0;A(H*2)=P+5 7 NEXT H:IF A>=8;B=10 8 IF E>=8;D=5 9 IF C>=8;B=C:D=C 10 F=K+N-J:G=L+M+I:FOR H=0 TO 2:GOSUB 95:IF P!=0;A(H*2)=P+10 11 NEXT H:IF A>=13;A=15 12 IF E=13;E=14 13 IF A>=11;IF A<=12;A=8+A 14 IF E>=11;IF E<=12;E=6+E 16 IF C=14;C=16 17 IF C>=13;A=C:B=16:D=B:E=C 19 IF C>=11;IF C<=12;B=6+C:D=8+C !!! 20 CSR 0:PRINT "|";:FOR H=0 TO 4:LETC Z$(7+A(H)):PRINT CHR 96;:NEXT H 22 PRINT "|";INT Q;"%";:$=KEY:IF $="6";O=O-90:GOTO 3 24 IF $="4";O=O+90:GOTO 3 26 IF $="8";IF C<=11;K=K+N:L=L+M:GOTO 4 27 IF $="2";F=K-N:G=L-M:GOSUB 96:IF P<=2;K=F:L=G:GOTO 4 30 IF $!="5" THEN 40:IF C=13 THEN #1:CSR 2:PRINT"|||"; 32 IF FRAC ((C+3)/5)!=0 THEN 20:T=T-1 !!! 34 IF T<=0;$=U$(R):U$(R)=MID(1,S-1)+"1"+MID(S+1,7-S):GOTO 50 !!! 40 IF T<=0 THEN 50:IF ABS(R-K)<=1;IF ABS(S-L)<=1;Q=Q-1:IF Q<=0;END 43 IF $=CHR 8;END !!! 45 IF RAN# <= .8 THEN 20:F=R+SGN(K-R):G=S+SGN(L-S):GOSUB 96 -- 46 IF K=F;IF L=G THEN 20 48 IF P<=2;R=F:S=G:GOTO 5 49 GOTO 20 50 F=INT(RAN# *9):G=INT(RAN# *7)+1:GOSUB 96:IF P>=3 THEN 50 52 T=2:R=F:S=G:GOTO 5 - 95 F=F+M:G=G-N 96 IF F<=11;IF F>=0;IF G>=1;IF G<=7 THEN 98 97 P=4:RETURN 98 IF R=F;IF S=G;P=2:RETURN 99 P=VAL GETC(U$(F),G):RETURN Файл P1 3 DEFM 6:VAC:DEFM 27:U$="0000000":FOR F=1 TO 11:$="" !!! 5 FOR G=1 TO 7:P=INT(RAN# *5):CSR 3:PRINT CHR G;:IF P<=2;P=0 !!! 7 $=$+CHR(P+48):U$(F)=$:NEXT G:NEXT F:Q=99:L=1:N=1:GOTO#0,50 Файл Р1 - это стряпальщик уровней по RND может быть и другой или составляйте их сами: Формат уровня : это комната 7 на 12 окруженная стеной 0 1 2 3 4 5 6 7 8 9 10 11 _________________________ 7 6 5 4 3 2 1 _________________________ U$(0) ... U$(11) Т.е. уровень задается переменные U$(0)..U$(11) где 0 - пусто 1 - мертвец 2 - ---- 3 - выход 4 - стена Теперь подчеркнутые символы в программе: строка 4 - символ обозначающий движение строка 45 - скорость головы (чем меньше - тем скорость больше) от 0 до 1 строка 52 - кол-во выстрелов для убийства головы