Техника - молодёжи 1991-03, страница 19

Техника - молодёжи 1991-03, страница 19

SIS SOMAS, щш на "ШИН!"

г: cis ius.is;

■{ SEH IWWUBIIWWHItintWWIHlltllWWlt 27 SIS I WEE I 7CTMOBKA В1ЕИШ1Й « 2! EES miinmtmmmtMtmmmtmtittmmti

30 CIS.MU Я 23,!!ЛШ "SQEOEAIl. "iS," star 1! FOE 1=1 TO !! 5! FOE J:1 TO IS 6! BEAD At J, I]

it if «i,i)=i да m w-i.'M eb; ■; - ses «сто мши

N IF «1,11=2 Ш oi !•:■!,2M FEIST "'FEES МИ1Ш1

3! if «i,i)=s тга css 1,22-1 feist '^vses eostejsep si cscek iecte

1С! IF A[J,I)=1 TEES CSE 2»J 1,22-I.FIMT 'ST.EEB CTEEA

110 ШТ J -BEST I

12C EEAE X

I!! ESAU Y

US COS 45,20.FEIST "X - BSEPFI ':SI8 ШСПЩИ, EBSCJBSA! Ев 3IPAJ

IS» COR «,18-FEJT 'E - EP.3SJ "

160 COB 15.I6.F5IST BJEBC "

II! CIS 15,11 FEIST 7 - BSFAtO '

171 EES mmtmttmmmttttmmmmtmmtm

175 ЕЕ» < 1ПШ l Г P В t

176 SES mtmmmttmmmmttttmmmtmim ISO COS B2-I,:2 ТЛЯТ -X -:ЕЕЙ ТГШ!"

13! S-CSS1-2KS) EES ЗСЯГОГРАИА OSPSCA К0Я SSIATCI KIEBSSI 20! COS 12.6'FEIET"

21! IF fcMl ЯП 20.SE8 ЮД 61Ш A, ИЕРЕИ! и СШЩП ЗШ

220 IF 5=458 TSE3I!=X:Yl=Yil.CCtC ESC.EES EO: EIEEll I

ESC IF G=S12 TSES 12=1 П=М GOTO 2B0.EEH SOI imS !

ESC IF 5=110 TBErlI=U.TI=T SOTO 2!0 EES ВД 1ШЭ ?

211 IF S=t2F TEES Il=?.il TI-Y GOTO 250 SES ICS ЦЕНИ /

ESS IF G=A20 TSES STOP EES EOS НАИН -ВР06ЕГ, K0SE3 ВГГН

27! GOTO 180

ESC EES SFOBEFEA SBSXESSJ

23! IF A(X1,Y1]."0 TSES 310

310 SES S3ETEA ГУСТА

311 IF AIX.Yj-i TBEI CSE X'2 1,22 T FEIST " 32! IF А!1.т;=0 TSES CSE X»2 1,22-T ГЕ™ " ■

x=si ти сотс ж at агвета ж®

310 IF Adl.Tll-l T5ES 3C!

350 SES EXSTXA 2AI"A

3ic if a;xi,?::=i ™es :b ks стек

IT! EES Е0ЕТЕ2ВЕГ

3!0 I2=I!-X.Y!=Y1 Y X2=X'2»X2 YI=Y'I'Y2 EES IB за ИЯТШИМ 333 IF A1X2J2I О Ш 530 S3 ШИ Л ВСЯ

«с if a;x,y;=- tees cos x>:-i,ii-y feist • ■

II! IF AIX.YM ТВЯ CSE Xt2-I,22 Т FEIST ' "

12! MI Y=T!.A[X2,Y2i=A[X2,T21t2 AU,Y;=A;l,T:-2

13! IF A;.'2,YII-2 TSES CCE X2»2-I,22 Y2 FEIST "[Г GOTO ISO

!!! I? A;I2,Y2I=3 TSES CSS I2'2 I.22-I2.F5IET T

IS! SES пеит - ВСЕ Я акаав"

IBS FOE 1=1 TO IS

17C FOE J=i TS '1!

«о if i;,',i;=2 tses is;

!!! SEXT 3

:ic sext i

51! 2K EOF SOSTFSSIFi ICCTtEJESS :SE S.'CTailEBEH SE OSSAPJUSO; 52! SGTC 3!

но стоящих колонн и контейнеров.

По сведениям читателей, на многих бытовых компьютерах борьба за каждый байт ОЗУ остается таким же актуальным занятием, как и для пользователей ныне забытого ПМК: например, в ПК «Микроша» с помощью первого алгоритма можно уместить только 12 этажей, а в «Радио-86РК» с 16-килобайтной памятью — всего 5 этажей, реализация же второго алгоритма позволяет на этих же ПК использовать все 50 этажей.

Теперь для не справившихся с заданием рассмотрим реализацию первого алгоритма для ПК «Микроша», поскольку диалект бейсика этого компьютера имеет лишь необходимый минимум стандартных команд, не содержит специфических команд и функций и поэтому легко преобразуется для большинства ПЭВМ.

На участке 10—130 происходит резервирование памяти под массив (19 * 19), очистка экрана, вывод

номера этажа (строка 30) и чтение данных в массив с одновременным выводом прочитанной информации на экран (строки 60 — 100). Оператор CUR устанавливав! курсор в соответствующую позицию, на других ПК этот оператор называется LOCATE (у «Микроши» отсчет строк идет снизу вверх, поэтому строку CUR 2*1-1,22-1 следует заменить на LOCATE 1,2 * J-1).

В строках 120 — 130 происходит чтение координат «грузчика», далее (140— 170) выводится сообщение о назначении управляющих клавиш.

На участке 180 — 270 происходит вывод текущего положения «грузчика» (180), опрос клавиатуры (190 —эту подпрограмму можно заменить оператором IN KEY) и проверка кода нажатой клавиши. В программе используется шест-надцатеричный код, об этом свидетельствует значок «&» перед цифрой. В этих операторах условного перехода можно изменить коды управляющих клавиш, например, назначить вместо букв курсорные клавиши. В соответствии с кодом той или иной клавиши происходят изменения будущих координат «грузчика» XI (позиция) и Y1 (строка).

Участок 280 — 440 осуществляет проверки — пуста ли клетка с новыми координатами XI и Y1, и если она пуста — перезаписываются координаты грузчика и управление возвращается на блок ввода нового хода. Если же в данной клетке «стена», то управление все равно возвращается назад, но перезаписи не происходит. Если на клетке с координатами XI и Y1 стоит контейнер, то следует проверка соседней клетки — куда этот контейнер будет сдвинут (координаты Х2 и Y2). В этом же блоке происходит перезапись состояния, если передвижение возможно.

Цикл в строках 450 — 500 осуществляет проверку на наличие «непоставленных» контейнеров. С 600-й строки начинаются блоки с описанием первоначальной ситуации на этажах (600 - 620 - первый этаж).

Для компьютеров с небольшим объемом ОЗУ блоки DATA можно подгружать оператором MERGE (в этом случае строки операторов с новыми этажами должны иметь ту

же нумерацию), но в крайнем случае можно хранить на пленке несколько версий «Sokoban» с 1 —10, 11-20, 21-30 этажами.

В заключение хотелось бы напомнить читателям, что реализацию 2-го варианта этой игры редакция так и не получила, хотя у нас имеется собственная версия для ПК «Энтерпрайз». Но, может быть, вам, дорогие читатели, будет интереснее сделать игру без наших подсказок?

Имеется задание и для более опытных программистов:

1. Как, пользуясь только возможностями бейсика, нащупать в «недрах» незнакомого компьютера адреса экранной области, под-

525 SES КЛЕТКА, КЩ FFIFT »ВГАТЬ EOETEIBEF - ЗАВИТА

530 IF А!Х2,Т2]=1 TEES 1С!

51! Я 42,6:EEIS! ТШВДШИЕ ИВСЗИОПО'

55! GOTO IB!

60! EES 1 зтах

EOI'IATA 1,1,1,1,1,1,1,1,1,1.1,1,1,1,1,1,1,1,1 t!2 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 E!3 SATS 1,1,1,1 «,1,1.0,1,0,1.1,1.1,1,1,1,1,1 051IATA 1,1,1,1,1,11,2,1,0,1,1,1,1.1,1.1.1,1 895 DATA 1,1 1,1 1,1 1,0.0,2,1,1,1,1,1,1.1,1,1 GOG SATA 1,1,1,1,1,0,0,2.0,2,1,1.1.1.1,1,1,1,1

617 SATA 1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1

618 SATA 1,1,0,0,0,1,1,0,1,1,0,1,1,1.1,1.1,1,1 ВОЗ ГИА 1,0,0,0,0,1,1,0,1,1,0,1,1.0,1.1,1,1.1 613 TATA 1,0,2,0,0,0,0.1.1,0,0,0,1,1,1,1.1,1,1

611 DATA 1,1,1,1,1,1,1,0,1,1,1,1,1.0,0,1,1,1,1

612 DATA 1.1,1.1,1,1,1,0,1,1,0,0,1,1.1,1,1.1,1

613 DATA 1,1,1,1,0,0,0,0,1.0,1,1,1,1.1,1,1,1,1 611 SATA 1,1.1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 6!I DATA 1,1.1,1,1.1,1.1,1,1,1,1,1,1,1.1,1,1,1

616 SATA 1,1,1,1,1,1,1,1,1,1,1,1.1,1,1,1,1,1,1

617 SATA 1,1,1,U,1,1.1,1,1,1.1,1,1,1,1,1,1,1

618 !ATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1.1,1,1,1,1

619 !ATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

620 UTA 12,12

621 EES 2 3T2i [даше запошВте cut)

программы операционной системы, нумерацию и назначение портов ввода-вывода?

2. Как включать в тексты бейсика куски подпрограмм, составленных в машинном коде и запускать эти подпрограммы?

3. Кто предложит наилучший вариант защиты программы на бейсике, которая будет работать, но перезаписываться на пленку и выводить свой листинг на экран будет только по паролю?

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

Вячеслав АЛЕКСЕЕВ

2 «Техника —молодежи» № 3

17