10
20
30 :
40
50 ON ERROR CLS : MODE 0 : IF ERR=17 END ELSE REPORT : PRINT " at line ";ERL : END
60
70 MODE 4
80 VDU 20,26,23,1,0;0;0;0;
90 COLOUR 0 : COLOUR 255
100
110 DIM map$(15)
120 FOR y%=0 TO 15 : map$(y%)=STRING$(16,".") : NEXT y%
130 FOR y%=0 TO 15
140 map$(y%)=""
150 FOR x%=0 TO 15
160 READ m% : map$(y%)=map$(y%)+CHR$(128+m%)
170 NEXT x%
180 NEXT y%
190
200 DIM d% 7
210 FOR s%=0 TO 23
220 READ a%,b% : d%!0=a% : d%!4=b%
230 VDU 23,s%+128
240 FOR i%=0 TO 7 : VDU d%?i% : NEXT i%
250 NEXT s%
260
270 pX%=1 : pY%=1
280 camX%=0 : camY%=0
290
300 lastGK%=0 : lastGKT%=TIME
310 :
320
330 REPEAT
340
350 FOR r%=0 TO 7 : PRINTTAB(0,r%)MID$(map$(r%+camY%),camX%+1,12); : NEXT r%
360
370 k%=FALSE : REPEAT : k%=FN_getKey : UNTIL k%
380
390 newX%=pX% : newY%=pY%
400 IF k%=1 AND newY%>0 : newY%=newY%-1
410 IF k%=2 AND newY%<15 : newY%=newY%+1
420 IF k%=4 AND newX%>0 : newX%=newX%-1
430 IF k%=8 AND newX%<15 : newX%=newX%+1
440
450 IF MID$(map$(newY%),newX%+1,1)<>CHR$(128) THEN newX%=pX% : newY%=pY%
460
470 map$(pY%)=MID$(map$(pY%),1,pX%)+CHR$(128)+MID$(map$(pY%),pX%+2,16)
480 map$(newY%)=MID$(map$(newY%),1,newX%)+CHR$(129)+MID$(map$(newY%),newX%+2,16)
490
500 IF newX%>pX% AND newX%-camX%=11 AND camX%<4 THEN camX%=camX%+1
510 IF newX%<pX% AND newX%-camX%=1 AND camX%>0 THEN camX%=camX%-1
520 IF newY%>pY% AND newY%-camY%=7 AND camY%<8 THEN camY%=camY%+1
530 IF newY%<pY% AND newY%-camY%=1 AND camY%>0 THEN camY%=camY%-1
540 pX%=newX% : pY%=newY%
550 UNTIL FALSE
560 END
570 :
580
590 DEF FN_getKey : LOCAL r%
600 r%=0
610 IF INKEY-58:r%=r% OR 1
620 IF INKEY-42:r%=r% OR 2
630 IF INKEY-26:r%=r% OR 4
640 IF INKEY-122:r%=r% OR 8
650 IF r%<>lastGK% OR TIME>lastGKT%+10 THEN lastGK%=r% : lastGKT%=TIME : =r%
660 =0
670
680 DATA 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
690 DATA 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
700 DATA 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
710 DATA 3, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 4
720 DATA 3, 0, 3,11,12,13, 0, 0, 0, 4, 0, 0, 0, 0, 0, 4
730 DATA 3, 0, 3, 8, 9,10, 0,14,14, 4, 0, 0, 0, 0, 0, 4
740 DATA 3, 0, 3, 5, 6, 7, 0,14,14, 4, 0, 0, 0, 0, 0, 4
750 DATA 3, 0, 3, 0, 0, 0, 0,14,14, 4, 0, 0, 0, 0, 0, 4
760 DATA 3, 0, 3, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 4
770 DATA 3, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 4
780 DATA 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
790 DATA 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,16,17,17,17,18, 4
800 DATA 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,22,15,15,15,23, 4
810 DATA 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,19,20,20,20,21, 4
820 DATA 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
830 DATA 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
840
850 DATA &00205000,&00040A00
860 DATA &99A5FF7E,&7EBDA57E
870 DATA &00FFAA55,&00FFAAFF
880 DATA &C0A0A0C0,&C0A4AAC0
890 DATA &03255503,&03050503
900 DATA &80C09ED6,&7FFFFFC0
910 DATA &42424A42,&FFFFFF42
920 DATA &0103795B,&FEFFFF03
930 DATA &FFFFD5A0,&92DA9EC0
940 DATA &FFFF5500,&423C0000
950 DATA &FFFF5705,&496B7903
960 DATA &7C3A1F07,&D0EFF8EA
970 DATA &44AAFFFF,&00FF0010
980 DATA &5EBCF8E0,&0BF71F97
990 DATA &1A6C3400,&002C3658
1000 DATA &20000000,&00040810
1010 DATA &40AA5500,&41824480
1020 DATA &00AA5500,&01020400
1030 DATA &04AA5400,&04020402
1040 DATA &42844080,&55AA4081
1050 DATA &02040000,&55AA0001
1060 DATA &04020402,&54AA0402
1070 DATA &40804080,&40804080
1080 DATA &04020402,&04020402