10 REM *****************
20 REM * CRANE CRAWL *
30 REM * By R.Nixon *
40 REM * (c) Computing *
50 REM * with the *
60 REM *  AMSTRAD  *
70 REM *****************
80 CALL &BC02:MODE 0:BORDER 0:SYMBOL AFTER 240
90 SYMBOL 240,73,21,132,82,9,164,82,36
100 SYMBOL 241,255,64,64,64,255,4,4,4
110 SYMBOL 242,7,12,12,12,7,3,1,1
120 SYMBOL 243,224,48,48,48,224,192,128,128
130 SYMBOL 244,0,0,0,1,3,7,7,7
140 SYMBOL 245,255,255,255,255,255,255,255,255
150 SYMBOL 246,0,0,0,128,192,224,224,224
160 DEFINT A-Z
170 A1$=CHR$(244)+CHR$(245)+CHR$(246):A2$=CHR$(242)+CHR$(32)+CHR$(243):SC=0:DIM S(13)
180 LV=1:M$=CHR$(248)
190 NM$="CRANE CRAWL":DIM A(20)
200 PAPER 0:CLS:GOSUB 620
210 FOR X=1 TO LEN(NM$):N$=MID$(NM$,X,1):FOR Y=1 TO X+3:LOCATE Y,2:PEN 10:PAPER 0:PRINT A1$:LOCATE Y,3:PRINT A2$;:LOCATE Y+1,4:PEN 5:PAPER 4:PRINT N$;:PEN 0:PAPER 0:LOCATE Y,2:PRINT" ";:LOCATE Y,3:PRINT" ";:LOCATE Y+1,4:PRINT" ";:NEXT
220 LOCATE Y,5:PEN 5:PAPER 4:PRINT N$;:PEN 0:PAPER 0:LOCATE Y,2:PRINT"  ";:LOCATE Y+1,3:PRINT" ";:NEXT
230 PEN 3:LOCATE 6,7:PRINT"By R.Nixon"
240 PEN 13:LOCATE 2,9:PRINT"(c) Computing with"
250 LOCATE 5,10:PRINT"The Amstrad"
260 PEN 1:LOCATE 7,12:PRINT"CONTROLS"
270 PEN 7:LOCATE 3,14:PRINT"Z left  X right"
280 PEN 15:LOCATE 5,22:PRINT"PRESS A KEY"
290 PEN 15:PAPER 0:LOCATE 4,3:PRINT"HI SCORE ";SC
300 WHILE INKEY$<>"":WEND:WHILE INKEY$="" AND JOY(0)=0:R=(RND*17)+2:FOR X=15 TO 21:PAPER 3:PEN 13:LOCATE R,X:PRINT CHR$(240);:FOR Z=1 TO 100:NEXT:PEN 0:PAPER 0:LOCATE R,X:PRINT" ";:NEXT:WEND
310 LF=0:NB=0:FOR LV=1 TO 16:IF LV=16 THEN LV=15
320 PAPER 3:CLS:PEN 1:LOCATE 7,12:PRINT"LEVEL";LV:PEN 2:LOCATE 9,14:PRINT STRING$(3-LF,248);:FOR XX=1 TO 5000:NEXT:PAPER 0:CLS:GOSUB 620:MX=10:MY=24:CR=0:DP=0:DP1=0:CT=0:PEN 2:PAPER 0:LOCATE MX,MY:PRINT M$;:ERASE A:DIM A(20)
330 WHILE MY>(21-LV)
340 IF CT=0 AND MX<11 THEN CR=1:CR1=1:CT=1
350 IF CT=0 AND MX>10 THEN CR=18:CR1=-1:CT=1
360 PEN 10:PAPER 0:LOCATE CR,2:PRINT A1$:LOCATE CR,3:PRINT A2$:IF DP=0 AND DP1=4 THEN PAPER 3:PEN 13:LOCATE CR+1,4:PRINT CHR$(240)
370 IF (INKEY(71)>-1 OR JOY(0)=4) AND ABS(A(MX-1)-A(MX))<2 AND MX>2 THEN PEN 2:PAPER 0:LOCATE MX,MY:PRINT " ";:MX=MX-1:MY=24-A(MX):LOCATE MX,MY:PRINT M$;
380 IF (INKEY(63)>-1 OR JOY(0)=8) AND ABS(A(MX+1)-A(MX))<2 AND MX<19 THEN PEN 2:PAPER 0:LOCATE MX,MY:PRINT " ";:MX=MX+1:MY=24-A(MX):LOCATE MX,MY:PRINT M$;
390 IF ABS(A(MX-1)-A(MX))>1 AND ABS(A(MX+1)-A(MX))>1 THEN R=1 ELSE R=RND*2
400 IF (CR+R=MX OR CR1=1 AND CR>MX OR CR1=-1 AND CR<MX) AND DP=0 THEN DP=1:FOR ZZ=100 TO 0 STEP -10:SOUND 1,ZZ,1:NEXT
410 IF DP1=0 THEN DP1=4
420 IF DP=1 THEN GOTO 490
430 SOUND 1,500,1
440 IF CR1=1 AND CR+1<=MX THEN LOCATE CR,2:PEN 0:PAPER 0:PRINT" ";:LOCATE CR,3:PRINT" ";:LOCATE CR+1,4:PRINT" ";:GOTO 470
450 IF CR1=-1 AND CR+1>=MX THEN LOCATE CR+2,2:PEN 0:PAPER 0:PRINT" ";:LOCATE CR+2,3:PRINT" ";:LOCATE CR+1,4:PRINT" ";:GOTO 470
460 GOTO 540
470 CR=CR+CR1:IF CR>18 THEN CR=18
480 GOTO 540
490 PEN 0:PAPER 0:LOCATE CR+1,DP1:PRINT" ";
500 DP1=DP1+1:LOCATE CR+1,DP1:PEN 13:PAPER 3:PRINT CHR$(240);
510 IF 24-DP1=A(CR+1) AND MX=CR+1 THEN GOTO 590
520 IF 24-DP1=A(CR+1) THEN DP=0:NB=NB+1:FOR ZZ=0 TO 100 STEP 10:SOUND 1,ZZ,1:NEXT:CT=0:A(CR+1)=A(CR+1)+1:DP1=0:LOCATE CR,2:PEN 0:PAPER 0:PRINT"   ";:LOCATE CR,3:PRINT"   ";
530 IF A(CR+1)>19 THEN A(CR+1)=19
540 WEND:PEN 10:PAPER 0:LOCATE CR,2:PRINT A1$:LOCATE CR,3:PRINT A2$:PEN 3:PAPER 12:IF MX<11 THEN FOR ZZ=2 TO MX-1:FOR XX=1 TO 150:NEXT:LOCATE ZZ,22-LV:PRINT CHR$(241);:NEXT
550 IF MX>10 THEN FOR ZZ=19 TO MX+1 STEP-1:FOR XX=1 TO 150:NEXT:LOCATE ZZ,22-LV:PRINT CHR$(241);:NEXT
560 IF MX<11 THEN FOR ZZ=MX TO 2 STEP -1:PAPER 0:PEN 0:LOCATE ZZ,21-LV:PRINT" ";:PEN 2:LOCATE ZZ-1,21-LV:PRINT CHR$(248);:FOR XX=1 TO 150:NEXT XX,ZZ
570 IF MX>10 THEN FOR ZZ=MX TO 19:PAPER 0:PEN 0:LOCATE ZZ,21-LV:PRINT" ";:PEN 2:LOCATE ZZ+1,21-LV:PRINT CHR$(248);:FOR XX=1 TO 150:NEXT XX,ZZ
580 FOR ZZ=30 TO 1 STEP -1:FOR XX=1 TO 5:SOUND 1,ZZ*7+XX*11,1:NEXT XX,ZZ:FOR ZZ=1 TO 5000:NEXT:NEXT
590 FOR ZZ=1 TO 40:FOR XX=1 TO 5:SOUND 1,ZZ*7+XX*11,1:NEXT:BORDER RND*26:NEXT:BORDER 0:LF=LF+1:IF LF=3 THEN PAPER 3:CLS:PEN 1:LOCATE 6,12:PRINT"GAME OVER";:PEN 0:SC1=LV*NB*10:LOCATE 3,14:PRINT"You scored ";SC1:IF SC1>SC THEN SC=SC1
600 IF LF=3 THEN FOR XX%=1 TO 7000:NEXT:ERASE A:GOTO 180
610 ERASE A:DIM A(20):GOTO 320
620 PEN 3:PAPER 12:PRINT STRING$(20,241)
630 FOR X=22-LV TO 24:LOCATE 1,X:PRINT CHR$(241);:LOCATE 20,X:PRINT CHR$(241):NEXT
640 LOCATE 1,25:PRINT STRING$(20,241);
650 RETURN