О.Д. Любутов (г.Ереван)
Игра "Арканоид"
Игра "Арканоид" представляет собой аналог одноимённой игры, реализованной на компьютере "Ямаха" (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 кБ).
Правила игры
Игрок (пилот) должен, управляя вертолётом с помощью стрелочных клавиш (вправо, влево, вверх, вниз), пройти через зону ПВО противника, состоящую из двух типов зенитных ракет и "летающих тарелок". Игрок (пилот) должен набрать наибольшее количество очков, подавляя наземные и воздушные объекты ПВО противника с помощью бортового оружия. В качестве бортового оружия используются бомбы (по наземным целям) и ракеты класса "воздух - воздух" (по воздушным целям).
Цикл игры состоит из семи этапов, упорядоченных по возрастанию сложности:
- этап. ПВО противника использует только зенитные ракеты вертикального полёта. Одновременно может быть задействована всего одна ракета.
- этап. ПВО противника использует только зенитные ракеты наклонного полёта. Одновременно находятся в полёте четыре ракеты.
- этап. ПВО противника использует только "летающие тарелки". Одновременно в полёте четыре "тарелки".
- этап. ПВО противника использует ракеты вертикального и наклонного полёта. В полёте пять ракет.
- этап. ПВО противника использует ракеты вертикального взлёта и ’’летающие тарелки". Одновременно в полёте пять объектов.
- этап. То же, что и в предыдущем этапе, только вместо вертикальных ракет - наклонного полёта. Число объектов восемь.
- этап. ПВО противника пускает в ход все резервы. В полёте девять различных объектов.
Для прохождения каждого этапа игроку необходимо набрать определённое количество очков.
Игра развивает реакцию, умение рассредоточивать внимание на несколько объектов и ориентироваться в быстро меняющейся обстановке.
Рекомендации
Все комментарии, находящиеся в начале программы, следует исключить. Сначала набрать все строки с операторами 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
Скачать исходник, как текстовый файл