О.Д. Любутов (г.Ереван)

Игра "Арканоид"

Игра "Арканоид" представляет собой аналог одноимённой игры, реализованной на компьютере "Ямаха" (MSX-1) и IBM PC. Из-за аппаратных особенностей ЭВМ БК-0010 игра несколько отличается от "фирменных" аналогов.

Игра написана на языке высокого уровня БЕЙСИК с использованием вставок в машинных кодах. Занимает примерно 6,3 кБ программного ОЗУ.

Правила игры

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

Если кубик красный, то длина ракетки игрока увеличивается (положительный фактор).

Зелёный - то длина ракетки игрока уменьшается (отрицательный фактор).

Если кубик синий, то скорость шарика уменьшается до начального значения (положительный фактор).

Если кубик полосатый, то игроку добавляется ещё одна попытка (положительный фактор).

Первоначально игрок располагает двадцатью попытками. Если игроку не удаётся отразить шарик и тот выходит за пределы игрового поля, то количество попыток уменьшается на одну, а в случае отсутствия запаса попыток игра заканчивается.

Игрок может изменять направление движения шарика. Если шарик отражается от неподвижной ракетки, то угол его падения равен углу отражения. Если горизонтальные составляющие движений шарика и ракетки совпадают, то угол падения больше угла отражения (то есть полет шарика становится более горизонтальным). Если горизонтальные составляющие движений шарика и ракетки противоположны по направлению, то угол падения меньше угла отражения (полет шарика становится более вертикальным).

Если шарик выбил все "кирпичи" "стены", то очередной этап игры заканчивается, и игрок переходит в следующий этап (всего этапов 15). При переходе к следующему этапу количество попыток увеличивается на две.

Игра проста, наглядна, развивает реакцию и глазомер.

Рекомендации

Все комментарии, находящиеся в начале программы, следует исключить. Сначала набрать все строки с операторами DATA (1000 - 1105). Затем набрать следующую программу:

1 S!=0
2 FOR I=1 ТО 245
3 READ А%
4 S!=S!+A%
5 NEXT I
6 PRINT S!

Запустить программу на выполнение. Если в результате появится число 1219230, то всё в порядке. Наберите DELETE -6 и продолжайте набор программы. В противном случае следует проверить правильность набора блока оператора DATA.

Описание работы программы

В программе использованы четыре подпрограммы в машинных кодах. Они располагаются в следующих адресах ОЗУ:

USR0 - (37400 - 37446) подпрограмма обеспечивает перемещение шарика по экрану (входной параметр - адрес ОЗУ экрана, где нужно высветить шарик).

USR1 - (37450 - 37476) программа проверки пустого места экрана. Входной параметр - адрес ОЗУ проверяемого места экрана. Выходной параметр - 0, если место занято.

Остальные две подпрограммы (USR2 37500 - 37534 и USR3 37536 - 37562) служат для перемещения "случайной помехи" вверху экрана, перемещения ракетки, попыток и стирания "кирпичей".

В строках 1035 - 1105 закодированы 15 различных конфигураций "стен". При желании пользователь может по своему усмотрению изменить или добавить новые этапы в игру.

Стены закодированы следующим образом.

В каждой строке (1035 - 1105) закодировано по одному этапу. В начале записано число в десятичной форме - это количество выбиваемых "кирпичей" в данном этапе. Следом идёт число в восьмеричной форме. В нем закодировано число ударов шарика, необходимое для выбивания "кирпича" данного цвета. Для каждого из трёх цветов (начиная с красного) отводится по 4 двоичных разряда (то есть от 0 до 15). Причём если закодировано число 15, то "кирпич" данного цвета считается вообще не выбиваемым. В следующих восьми восьмеричных числах закодирована сама "стена". Кодировка производится по столбцам, сверху, внизу, поцветно. На каждый цвет отводится по 2 бита. Число видимых "кирпичей” не должно быть меньше числа выбиваемых "кирпичей" (первого числа). Пользуясь этими правилами, можно создать любую конфигурацию "стены".

Остальная программа достаточно легко читается - любой желающий без труда сможет в ней разобраться.

5 'Игровая программа *АРКАНОИД*
5 'Любутов О.Д. г.Ереван ул. Церетели
5 'д. 46 кв. 58 тел. 42-33-96
5 'Версия 1.2 1989 г.
5 DIM D%(6%,7%),Q%(2%)
10 DRAW "S4;"
15 ? CHR$(&O214)CHR$(&O214)CHR$(&O224) CHR$(&O236)
20 GOTO 1215
25 DR%=&O44340
30 DD%=1%
35 RR%=5%
40 TO%=1%
45 SL%=0%
50 PP%=0%
55 KP%=18%
60 LT%=0%
65 RESTORE 1005
70 FOR I%=&O37400 TO &O37562 STEP 2%
75 READ A%
80 POKE I%,A%
85 NEXT I%
90 DEF USR0=&O37400
95 DEF USR1=&O37450
100 DEF USR2=&O37500
105 DEF USR3=&O37536
110 FOR I%=&O40000 TO &O41000 STEP 64%
115 READ A%,A0%,A1%
120 POKE I%,A%
125 POKE I%+2%,A0%
130 POKE I%+6%,A1%
135 NEXT I%
140 FOR I%=&O40112 TO &O41012 STEP 64%
145 POKE I%,&O177777
150 POKE I%+8%,&O52525
155 POKE I%+4%,&O125252
160 POKE I%+12%,&O175245
165 NEXT I%
170 CLS
175 LINE (15%,11%)-(240%,228%),1%,B
180 PAINT (0%,0%),1%
185 COLOR 2%
190 ? AT(14%,23%);"=LOD=";
195 ? AT(4%,0%);"СЧЕТ:";AT(17%,0%);"ПОПЫТКИ:"
200 LA%=0%
205 KP%=KP%+3%
210 IF LT%=26% THEN 1120
215 GOSUB 840
220 RL%=&O75235
225 RP%=&O75240
230 IF KP%=1% THEN 1110 ELSE KP%=KP%-1%
235 ? AT(25%,0%);KP%
240 GOSUB 765
245 IZ%=3%
250 KS%=&O74636
255 A%=USR0(KS%)
260 GOSUB 715
265 DX%=SGN(RND(1%)-.5!)
270 DY%=-192%
275 SK%=210%
280 KK%=KS%+DX%+DY%
285 IF USR1(KK%)<>0% THEN 335
290 GOTO 520
295 DY%=-DY%
300 KK%=KS%+DX%+DY%
305 IF USR1(KK%)<>0% THEN 335
310 DX%=-DX%
315 DY%=-DY%
320 KK%=KS%+DX%+DY%
325 IF USR1(KK%)<>0% THEN 335
330 DY%=-DY%
335 KK%=KS%+DX%+DY%
340 KS%=KK%
345 A%=USR0(KS%)
350 I$= INKEY$
355 IF I$=CHR$(12%) THEN 535
360 IF I$<>" " THEN 370
365 IF INKEY$="" THEN 365
370 FOR J%=0% TO SK%
375 NEXT J%
380 TO%=3%-TO%
385 ON TO% GOSUB 680,615
390 GOSUB 680
395 IF PP%=0% THEN 280
400 IF PP%<&O74700 THEN 425
405 POKE &O37510,&O40040
410 A%=USR2(PP%)
415 PP%=0%
420 GOTO 280
425 IF USR1(PP%+&O1100)=0% AND PP%>&O73000 THEN 450
430 POKE &O37510,CC%
435 PP%=PP%+&O100
440 A%=USR2(PP%)
445 GOTO 280
450 IF CC%<>&O40012 THEN 470
455 IZ%=1%
460 GOSUB 715
465 GOTO 405
470 IF CC%<>&O40016 THEN 490
475 IZ%=-1%
480 GOSUB 715
485 GOTO 405
490 IF CC%<>&O40022 THEN 505
495 SK%=210%
500 GOTO 405
505 KP%=KP%+1%
510 ? AT(25%,0%);KP%
515 GOTO 405
520 BEEP
525 IF SK%>0% THEN SK%=SK%-3%
530 IF KK%<&O76100 THEN 545
535 GOSUB 790
540 GOTO 220
545 IF KK%<&O43400 OR KK% MOD 64%<4% OR KK% MOD 64%>59% THEN 295
550 IF KK%<&O74600 THEN 585
555 IF U%=0% THEN 295
560 IF U%=DX% THEN 575
565 IF ABS(DY%+SGN(DY%))<385% THEN DY%=DY%+SGN(DY%)*64%
570 GOTO 295
575 IF ABS(DY%-SGN(DY%))>63% THEN DYX=DY%-SGN(DY%)*64%
580 GOTO 295
585 IF KK%>&O46200 AND KK%<&O60600 THEN GOSUB 935
590 IF LA%<LT% THEN 605
595 GOSUB 790
600 GOTO 200
605 IF LA% MOD 2%=0% AND PP%=0% THEN GOSUB 985
610 GOTO 295
615 DR%=DR%+DD%
620 POKE &O37510,&O40000+RR%
625 A%=USR2(DR%)
630 IF DR%>&O44304 AND DR%<&O44371 THEN 655
635 DD%=-DD%
640 RR%=11%-RR%
645 POKE &O37510,&O40000+RR%
650 A%=USR2(DR%)
655 RETURN
660 LINE (X%,Y%)-@(21%,9%),C%,B
665 PAINT (X%+2%,Y%+2%),C%,C%
670 DRAW "C4NH2R17NE2D5NF2L17N62U5;"
675 RETURN
680 U%=0%
681 IF INP(&O177716,64%)<>0% THEN 710
685 IF INP(&O177662,&O177)=&O31 AND RP%<=&O75270 THEN U%=1%
690 IF INP(&O177662,&O177)=&O10 AND RL%>=&O75205 THEN U%=-1%
695 RP%=RP%+U%
700 RL%=RL%+U%
705 GOSUB 765
710 RETURN
715 SS%=SGN(IZ%)
720 EE%=RP%-RL%+SS%+SS%
725 IF EE%<3% OR EE%>30% THEN 760
730 FOR I%=0% TO IZ% STEP SS%
735 IF RP%>&O75270 THEN RL%=RL%-SS% ELSE RP%=RP%+SS%
740 GOSUB 765
745 IF RL%<&O75205 THEN RP%=RP%+SS% ELSE RL%=RL%-SS%
750 GOSUB 765
755 NEXT I%
760 RETURN
765 POKE &O37510,&O40000
770 A%=USR2(RL%)
775 POKE &O37510,&O40002
780 A%=USR2(RP%)
785 RETURN
790 A%=USR0(RL%+&O301)
795 A%=(RL%-&O75177)*4%
800 A0%=(RP%-RL%+1%)*4%
805 FOR I%=1% TO 100%
810 LINE (A%+RND(1%)*A0%,218%+RND(1%)*9%)- @(1%,1%),4%,B
815 NEXT I%
820 FOR I%=RL%-&O300 TO RP%-&O303
825 A%=USR3(I%)
830 NEXT I%
835 RETURN
840 READ LT%,A%
845 Q%(0%)=A%MOD16%
850 A%=A%\16%
855 Q%(1%)=A%MOD16%
860 A%=A%\16%
865 Q%(2%)=A%MOD16%
870 FOR I%=0% TO 7%
875 READ A%
880 FOR J%=0% TO 6%
885 C%=A% MOD 4%
890 IF C%=0% THEN 900
895 D%(J%,I%)=Q%(C%-1%)
900 A%=A%\4%
905 X%=I%*24%+32%
910 Y%=J%*12%+36%
915 GOSUB 660
920 NEXT J%
925 NEXT I%
930 RETURN
935 JJ%=(KK%-&O46010)\&O1400
940 IF JJ%=7% THEN JJ%=6%
945 II%=((KK%-8%)MOD64%)\6%
950 IF D%(JJ%,II%)<>15% THEN D%(JJ%,II%)= D%(JJ%,II%)-1%
955 IF D%(JJ%,II%)<>0% THEN 980
960 LA%=LA%+1%
965 SL%=SL%+10%
970 ? AT(9%,0%);SL%
975 A%=USR3(&O46310+JJ%*&O1400+II%*6%)
980 RETURN
935 CC%=INT(RND(1%)*3%+.2!)*4%+&O40012
990 PP%=&O60710+INT(RND(1%)*44%)
995 RETURN
1000 DATA &O75,&O341,&O362,&O353,&O341,&O356,&O357,&O351,&O344,&O75
1005 DATA &O11505,&O12700,&O40000,&O12701,&O37444,&O10537,&O37404,&O12702,&O4,&O105010,
          &O112115,&O62705,&O100,&O62700,&O100,&O5302,&O1370,&O207,&O125050,&O24252
1010 DATA &O11502,&O12700,&O4,&O111201,&O1005,&O62702,&O100,&O5300,&O1372,&O207,&O5015,&O207
1015 DATA &O11505,&O12700,&O11,&O12701,&O0,&O112125,&O112125,&O112125,&O62705,&O75,
          &O62701,&O75,&O5300,&O1367,&O207
1020 DATA &O11505,&O12700,&O14,&O5025,&O5025,&O5025,&O62705,&O72,&O5300,&O1371,&O207
1025 DATA &O100000,&O1377,&O2520,&O124000,&O25377,&O12524,&O124000,&O25377,&O54545,
          &O125000,&O125377,&O64551,&O125000,&O125377,&O52525,&O125000,&O125377,&O15244
1030 DATA &O124000,&O25377,&O13224,&O124000,&O25377,&O2520,&O100000,&O1377,&O2520
1035 DATA 56%,&O421,&O34733,&O34733,&O34733,&O34733,&O34733,&O34733,&O34733,&O34733
1040 DATA 54%,&O2023,&O12625,&O13245,&O15351,&O25472,&O25472,&O15351,&O13245,&O12625
1045 DATA 50%,&O521,&O37045,&O37045,&O37045,&O37045,&O25052,&O35051,&O37245,&O37625
1050 DATA 8%,&O7421,&O37763,&O30003,&O30103,&O30623,&O30623,&O30103,&O30003,&O37763
1055 DATA 46%,&O421,&O12525,&O15251,&O14011,&O14311,&O14311,&O14011,&O15251,&O12525
1060 DATA 42%,&O442,&O12525,&O37777,&O25252,&O0,&O0,&O25252,&O37777,&O12525
1065 DATA 56%,&O22,&O23146,&O14631,&O23146,&O14631,&O23146,&O14631,&O23146,&O14631
1070 DATA 56%,&O1423,&O12526,&O12532,&O12553,&O12657,&O13277,&O15377,&O25777,&O27777
1075 DATA 56%,&O446,&O35573,&O25152,&O35573,&O12525,&O12525,&O35573,&O25152,&O35573
1080 DATA 38%,&O7421,&O33567,&O12525,&O16735,&O32527,&O35253,&O27356,&O25252,&O35673
1085 DATA 56%,&O521,&O12652,&O13253,&O15257,&O25277,&O25277,&O15257,&O13253,&O12652
1090 DATA 54%,&O1422,&O5252,&O24676,&O22676,&O22652,&O22652,&O22676,&O24676,&O5252 
1095 DATA 56%,&O437,&O23126,&O23146,&O22546,&O25252,&O37777,&O36527,&O33777,&O36527 
1100 DATA 21%,&O437,&O12533,&O17735,&O16735,&O16735,&O16635,&O16535,&O17775,&O12525
1105 DATA 26%,&O777,&O35253,&O35777,&O36537,&O32007,&O36537,&O35253,&O34013,&O37257 
1110 ?AT(11%,14%)"КОНЕЦ ИГРЫ"
1115 IF INKEY$="" THEN 1115 ELSE GOTO 25
1120 ?AT(3%,13%)"ВЫ В СОВЕРШЕНСТВЕ ОВЛАДЕЛИ"
1125 ?AT(2%,14%)"МАСТЕРСТВОМ ИГРЫ В АРКАНОИД!"
1130 ?AT(4%,15%)"SAM ПРИСВАИВАЕТСЯ ЗВАНИЕ"
1135 ?AT(9%,16%)"=АРКАН-МАСТЕР="
1140 ?AT(8%,17%)"АВТОР ЖЕЛАЕТ ВАМ"
1145 ?AT(7%,18%)"ДАЛЬНЕЙШИХ УСПЕХОВ!"
1150 GOTO 1115
1215 RESTORE 1105
1220 GOSUB 340
1225 RESTORE
1230 COLOR 1%
1235 ?AT(2%,1%)"Любутов О.Д. г.Ереван 1989г."AT(6%,16%)"ПРЕДСТАВЛЯЕТ ИГРУ:"
1240 FOR J%=10% TO 19%
1245 READ A%
1250 FOR I%=30% TO J% STEP -1%
1255 ? AT(I%,20%)CHR$(A%)" "
1260 FOR K%=1% TO 50%
1265 NEXT K%,I%,J%
1280 IF INKEY$="" THEN 1280 ELSE 25

Скачать исходник, как текстовый файл

Заключение рецензента

Программа Любутова О.Д. реализована по аналогии с известной игровой программой "Арканоид", работающей, например, на IBM PC.

При сокращении автором программы допущена ошибка при вводе кодов "стен". Хотя игра внешне работает (и очень хорошо работает!), добраться до девятого или даже до шестого уровня невозможно, так как на пятом уровне последние два "кирпича" не выбиваются, сколько бы игрок ни старался.

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

Жариков Л.Н.


 

О.Д. Любутов (г.Ереван)

"Вертолёт"

Игра "Вертолёт" представляет собой аналог игры "Хью-Кобра", реализованной на компьютере "Ямаха" (MSX-1). Из-за аппаратных различий БК-0010 и "Ямахи" игра несколько отличается от аналога.

Игра написана на языке высокого уровня БЕЙСИК с использованием вставок в машинных кодах. Занимает практически всё программное ОЗУ (7,5 кБ).

Правила игры

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

Цикл игры состоит из семи этапов, упорядоченных по возрастанию сложности:

  1. этап. ПВО противника использует только зенитные ракеты вертикального полёта. Одновременно может быть задействована всего одна ракета.
  2. этап. ПВО противника использует только зенитные ракеты наклонного полёта. Одновременно находятся в полёте четыре ракеты.
  3. этап. ПВО противника использует только "летающие тарелки". Одновременно в полёте четыре "тарелки".
  4. этап. ПВО противника использует ракеты вертикального и наклонного полёта. В полёте пять ракет.
  5. этап. ПВО противника использует ракеты вертикального взлёта и ’’летающие тарелки". Одновременно в полёте пять объектов.
  6. этап. То же, что и в предыдущем этапе, только вместо вертикальных ракет - наклонного полёта. Число объектов восемь.
  7. этап. ПВО противника пускает в ход все резервы. В полёте девять различных объектов.

Для прохождения каждого этапа игроку необходимо набрать определённое количество очков.

Игра развивает реакцию, умение рассредоточивать внимание на несколько объектов и ориентироваться в быстро меняющейся обстановке.

Рекомендации

Все комментарии, находящиеся в начале программы, следует исключить. Сначала набрать все строки с операторами DATA (1220 - 1360). Затем набрать следующую программу:

1 S!=0
2 FOR I=1 ТО 213
3 READ А%
4 S!=S!+A%
5 NEXT I
6 PRINT S!

Запустить программу на выполнение. Если в результате появится число 798996, то всё в порядке. Наберите DELETE-6 и продолжайте набор программы. В противном случае следует проверить правильность набора блока операторов DATA.

Описание работы программы

Ограничусь кратким описанием наиболее сложных мест программы. В программе реализованы две подпрограммы в машинных кодах. Одна подпрограмма (восьмеричные адреса 440 - 516) служит для циклического перемещения пейзажа под вертолётом. Другая (520 - 550) служит для перемещения графических объектов по экрану во время игры (вертолёта, ракет, "тарелок"). Обе эти подпрограммы используют для своих целей третью подпрограмму (400 - 436) в качестве универсального модуля. Тексты этих подпрограмм находятся в следующих строках:

Универсальный модуль - строка 1330.

Подпрограмма перемещения пейзажа- строки 1340 - 1350.

Подпрограмма перемещения графических объектов - 1360.

В строках 520 - 530 осуществляется опрос клавиатуры и в соответствии с состояниями клавиш задастся приращение положения вертолёта на экране.

В строке 550 осуществляется проверка на выход вертолёта за рабочую зону (она чуть меньше, чем экран).

В строках 600 - 610 имитируется звук работы двигателя вертолёта. В достаточно большой подпрограмме 1700 - 2040 реализован опрос клавиатуры на нажатие пробела и организация стрельбы снарядами и бомбами.

В подпрограмме 2450 - 2770 организовано перемещение пейзажа и появление наземных ракетных установок.

И, наконец, для тех, кто решил разобраться в программе, назначение массивов и переменных:

Массив KS%(1%) - координаты снарядов (2 шт.)

Массив КВ%(1%) - координаты бомб (2 шт.)

Массив KR%(3%) - координаты ракет наклонного полёта (4 шт.)

Массив КI%(3%) - координаты летающих тарелок (4 шт.)

Массивы КО%(3%),КХ%(3%) служат для обозначения наземных ракетных установок (на тягачах и в шахтах).

Переменные:

DM % - номер этапа в цикле

WW% - номер цикла

KV % - координата вертолёта

DV% - приращение координаты вертолёта

RV% - координата ракеты вертикального полёта

 

10 'Игровая программа *Вертолет*
10 'Любутов О.Д. г. Ереван ул. Церетели
10 'д. 46 кв. 38 тел. 42-53-96
10 'Версия 1.1 1989 г.
10 DIM KS%(1%),KB%(1%),KR%(3%),KT%(3%),KO%(3%),KX%(3%)
20 DW%=1%
30 DEF USR0=&O440
40 DEF USR1=&O520
50 ?CHR$(&O224)CHR$(&O214)CHR$(&O214) CHR$(&O236)
60 PSET (0%,190%),3%
70 DRAW "S16C3E2R3E2R1F1D3R2U3E1F1D3R7E4F2R1E2R1D4R2U3F2D1R7U4;"
80 DRAW "C3R2F1E1R1F2E1F1E1D3R2U3E1F2D2R8D8L64;"
90 PAINT (1%,221%),2%,3%
100 COLOR 2%
110 ? AT(0%,1%);"СЧЕТ:"
120 ? AT(13%,22%);"=LOD="
130 FOR T%=1% TO II%
140 GOSUB 1370
150 NEXT T%
160 FOR T%=&O400 TO &O550 STEP 2%
170 READ TT%
180 POKE T%,TT%
190 NEXT T%
200 GOSUB 1100
210 GOSUB 400
220 FOR R%=1% TO 5%
230 IF (R% MOD 2%)=0% THEN 250
240 GOSUB 520
250 ON DW% GOTO 280,340,310,270,300,330,260
260 GOSUB 2450
270 GOSUB 630
280 GOSUB 1440
290 GOTO 350
300 GOSUB 1440
310 GOSUB 2450
320 GOTO 350
330 GOSUB 2450
340 GOSUB 630
350 NEXT R%
360 IF HV%=0% THEN 210
370 GOSUB 1030
380 HV%=0%
390 GOTO 210
400 S%=S%+1%
410 IF S%<>21% THEN 500 ELSE S%=0%
420 POKE &O402,&O40012
430 POKE &O406,&O67671
440 POKE &O522,&O6
450 A%=USR1(A%)
460 POKE &O402,&O40022
470 POKE &O406,&O67664
480 POKE &O522,&O2
490 A%=USR1(A%)
500 A%=USR0(A%)
510 RETURN
520 DV%=0%
521 IF INP(&O177716,64%)<>0% THEN 530
522 IF INP(-78%,&O1/7)=&O10 THEN DV%=-1%
523 IF INP(-78%,&O177)=&O31 THEN DV%=1%
524 IF INP(-78%,&O177)=&O32 THEN DV%=-128%
525 IF INP(-78%,&O177)=&O33 THEN DV%=128%
530 KV%=KV%+DV%
540 GOTO 1690
550 IF KV%<&O44700 OR KV%>&O62350 OR (KV% MOD 64%)>40% THEN KV%=KV%-DV%
560 POKE &O402,&O40001
570 POKE &O406,KV%
580 POKE &O522,&O10
590 A%=USR1(A%)
600 POKE &O177716,64%
610 POKE &O177716,0%
620 RETURN
630 POKE &O522,&O3
640 IF NN%=3% THEN 690
650 IF ABS(S1%-S%)<4% THEN 690 ELSE S1%=S%
660 NN%=NN%+1%
670 KO%(NN%)=-64%
680 KR%(NN%)=&O66175-S%
690 IG%=-1%
700 IG%=IG%+1%
710 IF IG%>NN% THEN RETURN ELSE KR%(IG%)= KR%(IG%)+KO%(IG%)*4%-1%
720 IF KR%(IG%)<&O45300 THEN KO%(IG%)=-KO%(IG%)
730 PE%=PEEK(KR%(IG%)+&O300)
740 POKE &O4O2,&O40122-KO%(IG%)
750 POKE &O4O6,KR%(IG%)
760 A%=USR1(A%)
770 IF (KR%(IG%) MOD 64%)<=0% THEN GOSUB 830
780 IF PE%=0% OR PE%=-17408% THEN 700 ELSE XX%=KR%(IG%)
790 GOSUB 1590
800 GOSUB 850
810 GOSUB 890
820 GOTO 700
830 XX%=KR%(IG%)
840 GOSUB 1650
850 KR%(IG%)=KR%(NN%)
860 KO%(IG%)=KO%(NN%)
870 NN%=NN%-1%
880 RETURN
890 IF ABS(KV%-XX%)<&O2200 AND ABS(((KV%+&O3) MOD 64%)-(XX% MOD 64%))<6% THEN 970
900 FOR I%=0% TO 1%
910 IF ABS((XX% MOD 64%)-(KB%(I%) MOD 64%))> 2% OR ABS(KB%(I%)-XX%)>&O2100 THEN 950
920 XX%=KB%(I%)
930 KB%(I%)=0%
940 GOSUB 1590
950 NEXT I%
960 RETURN
970 FOR J%=1% TO 3%
980 FOR XX%=KV%+1% TO KV%+5% STEP 2%
990 GOSUB 1590
1000 NEXT XX%
1010 NEXT 0%
1020 OO%=(40%*WW%+200%)*(DW%-1%+7%*WW%)
1030 KS%(1%)=0%
1040 KB%(1%)=0%
1050 KB%(0%)=0%
1060 KS%(0%)=0%
1070 FOR I%=2% TO 16%
1080 ? AT(0%,I%)SPC(32%);
1090 NEXT I%
1100 LINE (0%,20%)-(255%,20%),3%
1110 ? AT(16%,1%):"ЭТАП:";DW%+WW%*7%
1120 ? AT(6%,1%);OO%;" "
1130 KV%=&O54027
1140 RR%=-1%
1150 NN%=-1%
1160 RV%=0%
1170 FOR I%=1% TO 80%
1180 GOSUB 400
1190 GOSUB 520
1200 NEXT I%
1210 RETURN
1220 DATA &O40202,&O40702,&O52074,&O327,&O327,&O174,&O52500,&O52400
1230 DATA &O40204,&O41740,&O52525,&O10000,&O52400,&O52524,&O2005,&O2005,&O2004,&O52524,
          &O52520,&O52520,&O52500,&O401,&O404,&O52520
1240 DATA &O40206,&O41706,&O52525,&O0,&O1,&O125,&O404,&O2004,&O10004,&O32525,&O12525,&O2525,
          &O525,&O40100,&O10100,&O2525
1250 DATA &O40312,&O42012,&O140000,&O30000,&O6000,&O6000,&O177700,&O177760,&O177760,&O177760,
          &O125250,&O170076,&O6076,&O6010,&O170040,&O125200
1260 DATA &O40314,&O42014,&O1777,&O1403,&O1403,&O1403,&O1777,&O1777,&O1777,&O1777,&O125252,
          &O1700,&O146063,&O146063,&O1700,&O125252
1270 DATA &O40116,&O42016,&O300,&O1760,&O7674,&O37677,&O1760,&O1760,&O1760,&O7674,&O37677,
          &O36217,&O25252,&O136017,&O136060,&O20060,&O4017,&O1252
1280 DATA &O40422,&O41722,&O300,&O1760,&O1660,&O7674,&O37677,&O1760,&O1760,&O1760,&O1760,
          &O7674,&O37677,&O36217
1290 DATA &O40326,&O42026,&O10101,&O12105,&O12525,&O12525,&O2524,&O520,&O520,&O2524,&O12525,
          &O12525,&O12525,&O2524,&O520,&O100
1300 DATA &O40432,&O41532,&O14,&O124060,&O125200,&O125250,&O177752,&O125250,&O125200,&O124360,
          &O60,&O1777
1310 DATA &O40434,&O41534,&O30000,&O6052,&O1252,&O25252,&O125777,&O25252,&O1252,&O7452,&O6000,
          &O177700
1320 DATA &O40242,&O41742,&O11001,&O100,&O46014,&O1440,&O20104,&O7343,&O44620,&O3564,&O31642,
          &O107100,&O3622,&O11000,&O20,&O41001
1330 DATA &O12700,&O0,&O12701,&O0,&O12702,&O22,&O111011,&O62700,&O100,&O62701,&O100,&O5302,
          &O1402,&O137,&O414,&O203
1340 DATA &O12737,&O67600,&O402,&O12737,&O67677,&O406,&O4337,&O400,&O12704,&O77,&O12705,&O67600
1350 DATA &O110537,&O406,&O105205,&O110537,&O402,&O4337,&O400,&O5304,&O1402,&O137,&O470,&O207
1360 DATA &O12704,&O0,&O4337,&O400,&O5237,&O402,&O5237,&O406,&O5304,&O1402,&O137,&O524,&O207
1370 READ II%
1380 READ JJ%
1390 FOR I%=II% TO JJ% STEP 64%
1400 READ K%
1410 POKE I%,K%
1420 NEXT I%
1430 RETURN
1440 POKE &O522,&O2
1450 IF RV%<>0% THEN 1480
1460 Q%=1%-Q%
1470 RV%=&O66135-S%+Q%*21%
1480 RV%=RV%-256%
1490 POKE &O402,&O40222
1500 POKE &O406,RV%
1510 PE%=PEEK(RV%)
1520 A%=USR1(A%)
1530 IF PE%=0% AND RV%>&O46000 THEN RETURN
1540 XX%=RV%
1550 GOSUB 1590
1560 RV%=0%
1570 IF XX%>&O46000 THEN GOSUB 890
1580 RETURN
1590 POKE &O402,&O40042
1600 POKE &O406,XX%
1610 A%=USR1(A%)
1620 BEEP
1630 BEEP
1640 BEEP
1650 POKE &O402,&O40066
1660 POKE &O406,XX%
1670 A%=USR1(A%)
1680 RETURN
1690 E1%=E%
1700 E$=INKEY$
1710 II%=-1%
1720 II%=II%+1%
1730 IF II%>1% THEN 550
1740 IF E$<>" " OR E1%<>0% THEN 1770
1750 IF KS%(II%)=0% THEN KS%(II%)=KV%+582%
1760 IF KB%(II%)=0% THEN KB%(II%)=KV%+&O1404
1770 IF KS%(II%)=0% THEN 1860
1780 POKE KS%(II%),0%
1790 KS%(II%)=KS%(II%)+2%
1800 IF PEEK(KS%(II%))=0% THEN 1850
1810 XX%=KS%(II%)
1820 GOSUB 2150
1830 KS%(II%)=0%
1840 GOTO 1860
1850 IF (KS%(II%) MOD 64%)<=4% THEN KS%(II%)= 0% ELSE POKE KS%(II%),&O125252
1860 IF KB%(II%)=0% THEN 1980
1870 KB%(II%)=KB%(II%)+&O300
1880 IF PEEK(KB%(II%)+&O2000)=0% AND KB%(II%)<&O65300 THEN 1940
1890 XX%=KB%(II%)
1900 GOSUB 1590
1910 IF KB%(II%)<&O65300 THEN GOSUB 2150 ELSE GOSUB 1990
1920 KB%(II%)=0%
1930 GOTO 1980
1940 POKE &O402,&O40026
1950 POKE &O522,&O2
1960 POKE &O406,KB%(II%)
1970 A%=USR1(A%)
1930 GOTO 1720
1990 IE%=0%
2000 IF ABS(((&O67672-S%-21%*IE%) MOD 64%)-(XX% MOD 64%))<3% THEN 2050
2010 IF ABS(((&O67663-S%-21%*IE%) MOD 64%)-(XX% MOD 64%))<2% THEN 2100
2020 IE%=IE%+1%
2030 IF IE%<=2% THEN 2000
2040 RETURN
2050 POKE &O522,&O6
2060 XX%=&O67570-S%-21%*IE%
2070 GOSUB 1590
2080 OO%=OO%+8%
2090 GOTO 2360
2100 POKE &O522,&O2
2110 XX%=&O67563-S%-21%*IE%
2120 GOSUB 1590
2130 OO%=OO%+17%
2140 GOTO 2360
2150 IG%=0%
2160 IF IG%>RR% THEN 2180
2170 IF ABS(KT%(IG%)-XX%)<&O2200 AND ABS(((KT%(IG%)+2%) MOD 64%}-(XX% MOD 64%))<6% THEN 2240
2180 IF IG%>NN% THEN 2220
2190 IF ABS(KR%(IG%)-XX%)<&O2200 AND ABS((KR%(IG%) MOD 64%)-(XX% MOD 64%))<2% THEN 2280
2200 IG%=IG%+1%
2210 IF IG%<=3% THEN 2160
2220 IF ABS(RV%-XX%)<&O2200 AND ABS((RV% MOD 64%)-(XX% MOD 64%))<2% THEN 2310
2230 RETURN
2240 XX%=KT%(IG%)
2250 POKE &O522,&O4
2260 GOSUB 2740
2270 GOTO 2340
2280 XX%=KR%(IG%)
2290 GOSUB 850
2300 GOTO 2330
2310 XX%=RV%
2320 RV%=0%
2330 POKE &O522,&O2
2340 GOSUB 1590
2350 OO%=OO%+3%
2360 ? AT(6%,1%);OO%
2370 IF OO%<(40%*WW%+200%)*(DW%+WW%*7%) THEN RETURN
2380 DW%=DW%+1%
2390 IF DW%<8% THEN 2430
2400 DW%=1%
2410 WW%=WW%+1%
2420 IF WW%<9% THEN 2430 ELSE WW%=1%
2430 HV%=5%
2440 RETURN
2450 POKE &O522,&O5
2460 FF%=FF%+1%
2470 IF RR%=3% OR FF%<27% THEN 2520
2480 FF%=0%
2490 RR%=RR%+1%
2500 KT%(RR%)=&O45573+INT(RND(1%)*70%)*64%
2510 KX%(RR%)=SGN(RND(1%)-0.5!)*64%
2520 IG%=-1%
2530 IF RR%<0% THEN RETURN
2540 IG%=IG%+1%
2550 IF IG%>RR% THEN RETURN
2560 KT%(IG%)=KT%(IG%)+KX%(IG%)*4%-1%
2570 IF KT%(IG%)>&O45200 AND KT%(IG%)<&O62400 THEN 2640
2580 KX%(IG%)=-KX%(IG%)
2590 IF (KT%(IG%) MOD 64%)>1% THEN 2640
2600 XX%=KT%(IG%)
2610 GOSUB 2740
2620 GOSUB 1650
2630 GOTO 2540
2640 PE%=PEEK(KT%(IG%)+256%)
2650 POKE &O402,&O40132-KX%(IG%)
2660 POKE &O406,KT%(IG%)
2670 A%=USR1(A%)
2680 IF PE%=-22% OR PE%=-5632% OR PE%=0% THEN 2540
2690 XX%=KT%(IG%)
2700 GOSUB 1590
2710 GOSUB 2740
2720 GOSUB 890
2730 GOTO 2540
2740 KT%(IG%)=KT%(RR%)
2750 KX%(IG%)=KX%(RR%)
2760 RR%=RR%-1%
2770 RETURN

Скачать исходник, как текстовый файл

 

Performed by © gid, 2012-2022.