10 DIM p(8*11) 20 REM TNTL|TNTR|BAT+|BAT-|RIGHT|LEFT|DOWN|UP 21 LET tnl=128: LET tnr=64: LET bap=32: LET bam=16: LET rt=8: LET lt=4: LET dn=2: LET up=1 22 REM brick je specialna kombinacia TNTL+TNTR+(BAT+)+(BAT-) (tato kombinacia v hre nema zmysel) 23 LET brick=tnl+tnr+bap+bam 24 REM prostredny dielik baterie je (BAT+)+(BAT-), takze pri hladani zaciatka/konca treba zohladnit oba bity 25 LET bat=bap+bam 26 REM skratky pre hore-dolu a vlavo-vpravo 27 LET lr=lt+rt: LET ud=up+dn 30 RESTORE 10 40 REM nacitame definiciu levelu a popri citani si hned zaznacime zaciatok a koniec 41 FOR i=1 TO 8*11 42 READ p(i) 44 IF p(i)>=bap AND p(i)=bam AND p(i)=bap THEN LET ch=10+144: GO TO 150 145 IF p(i)>=bam THEN LET ch=13+144: GO TO 150 148 LET ch=p(i)+143 150 PRINT CHR$(ch); 160 LET j=j+1 170 IF j=11 THEN PRINT: LET j=0 180 NEXT i 190 LET curx=0: LET cury=0: LET selx=-1: let sely=-1 200 REM kontrola riesenia 210 REM zaciatok a koniec sme si predpocitali pri nacitavani pola, nech ho nemusime zakazdym hladat 220 REM @ 1. najde se prvni kostka se start flagem 221 LET idxcurrent=start 222 LET direction=p(start)-bap: LET havetnt=0 230 REM @ 2. podle smeru vodice se vezme vedlejsi kostka 231 IF direction=lt THEN LET idxnextone=idxcurrent-1: LET backdirection=rt 232 IF direction=rt THEN LET idxnextone=idxcurrent+1: LET backdirection=lt 233 IF direction=up THEN LET idxnextone=idxcurrent-11: LET backdirection=dn 234 IF direction=dn THEN LET idxnextone=idxcurrent+11: LET backdirection=up 235 LET nextone=p(idxnextone): IF nextone>=tnr AND nextone=16 THEN LET nextone=nextone-16*INT(nextone/16): REM simulacia MOD 16 na odfiltrovanie nesmerovych bitov (nutne na baterii a tnt) 237 REM @ udela se AND se smerem a zkontroluje se vysledek: 238 REM musime ale pouzit opacny smer 239 LET a=nextone: IF a>=backdirection*2 THEN LET a=a-backdirection*2*INT(a/(backdirection*2)): REM simulacia ANDu v ZX BASICU, predpoklad je, ze backdirection je jeden bit 243 REM @ - pokud je vysledek ANDu = 0, koncime, protoze spoj dal nevede 246 IF a hrac musi hrat dalej, ak ano, uloha splnena 275 IF havetnt=0 THEN GO TO 300 280 PRINT AT 10,13;"BOOOOM!" 290 STOP 300 REM este nie je vyriesene, tak podme nechat hraca presunut dielik 310 PRINT AT cury,curx;OVER 1; INK 8; PAPER 8; CHR$(143) 320 LET a$=INKEY$ 330 PRINT AT cury,curx;OVER 1; INK 8; PAPER 8; CHR$(143) 340 IF a$="" THEN GO TO 310 350 IF a$>="a" AND a$<="z" THEN LET a$=CHR$(CODE(a$)-32): REM simulacia uppercase 360 IF a$="O" AND curx>0 THEN LET curx=curx-1: GO TO 300 365 IF a$="P" AND curx<10 THEN LET curx=curx+1: GO TO 300 370 IF a$="Q" AND cury>0 THEN LET cury=cury-1: GO TO 300 375 IF a$="A" AND cury<7 THEN LET cury=cury+1: GO TO 300 380 IF a$<>" " AND a$<>"M" THEN GO TO 300 400 IF selx<>curx OR sely<>cury THEN GO TO 450 410 REM oznacili sme uz oznaceny dielik => odznacime ho 420 LET selx=-1: LET sely=-1 430 PRINT AT cury,curx; OVER 1; PAPER 7; INK 0; " " 440 GO TO 300 450 IF selx<0 OR p(curx+11*cury+1)>0 THEN GO TO 550 460 REM oznacili sme kam chceme dielik presunut => dielik presunieme 470 LET p(curx+11*cury+1)=p(selx+11*sely+1) 480 LET p(selx+11*sely+1)=0 490 PRINT AT sely,selx; OVER 0; PAPER 7; INK 0;" ";AT cury,curx; CHR$(p(curx+11*cury+1)+143) 500 LET selx=-1: LET sely=-1 510 GO TO 200: REM nutna kontrola riesenia 550 IF selx>=0 OR p(curx+11*cury+1)=0 OR p(curx+11*cury+1)>=16 THEN GO TO 300 560 REM oznacili sme dielik na presunutie 570 LET selx=curx: LET sely=cury 580 PRINT AT cury,curx; OVER 1; PAPER 6; INK 1; " " 590 GO TO 300