1 REM +++++++++++++++++++++++++++++++++ 2 REM ! Program LABYRINT 3 REM ! Utg}va 1 m 1981-10-17 4 REM ! av (c) Bernt Nilsson 5 REM ! L Y S A T O R 6 REM ! Link|pings Tekniska H|gskola 7 REM ! Minne 16 Kbytes 9 REM +++++++++++++++++++++++++++++++++ 30 ; CHR$(12%)CUR(8%,16%)"LABYRINT" 40 READ D% : REM kubens storlek 50 P%=1+D%+D%*D% : REM b|rja d{r 60 W%=D%*D%-1% : REM wrapp around 70 D1%=D%-1% : REM ettor 80 DIM L%(W%) : REM labyrinten 90 FOR I%=0% TO W% : REM init den 100 READ L%(I%) : NEXT I% 110 X%=38% : Y%=35% : REM sk{rm-mitt 120 M%=35% : REM max bild 130 F%=1% : H%=-D% : U%=D%*D% 140 DIM B%(D1%) : REM bit-tabell 150 Q%=1% : FOR I%=0% TO D1% 160 B%(I%)=Q% : Q%=Q%*2% : NEXT I% 170 DEFFNK%(P%)=(L%((P%/D%) AND W%) AND B%(P% AND D1%))<>0% 180 GOTO 860 : REM till main 190 REM projicera 200 P1%=P% : Z=Z1 : T%=M% 220 L1%=FNK%(P%-H%) : REM v{nster 230 \1%=FNK%(P%+U%) : REM upp}t 240 R1%=FNK%(P%+H%) : REM h|ger 250 N1%=FNK%(P%-U%) : REM ner}t 260 P1%=P1%+F% : REM n{sta 270 L%=FNK%(P1%-H%) 280 \%=FNK%(P1%+U%) 290 R%=FNK%(P1%+H%) 300 N%=FNK%(P1%-U%) 310 C%=FNK%(P1%) : REM i mitten 320 X1%=X%-T% : Y1%=Y%-T% 330 X2%=X%+T% : Y2%=Y%+T% 340 IF PEEK(65013)>0% RETURN 345 IF Z<1 THEN 410 350 REM rita 'djup' 360 IF ((NOT C%) AND (L% XOR L1%)) OR (C% AND L1%) FOR I%=Y1% TO Y2% : SETDOT I%,X1% : NEXT I% 370 IF ((NOT C%) AND (\% XOR \1%)) OR (C% AND \1%) FOR I%=X1% TO X2% : SETDOT Y1%,I% : NEXT I% 380 IF ((NOT C%) AND (R% XOR R1%)) OR (C% AND R1%) FOR I%=Y1% TO Y2% : SETDOT I%,X2% : NEXT I% 390 IF ((NOT C%) AND (N% XOR N1%)) OR (C% AND N1%) FOR I%=X1% TO X2% : SETDOT Y2%,I% : NEXT I% 400 IF C% OR (PEEK(65013)>0%) RETURN : REM sluta rita 410 T1%=T% : Z=Z+1 : T%=M%/Z 420 S%=T1%-T% : REM spalt bredd 430 IF S%<1% RETURN : REM -uppl|sning 440 REM rita 'diagonalt' 450 IF L% EQV \% FOR I%=0% TO S% : SETDOT Y1%+I%,X1%+I% : NEXT I% 460 IF \% EQV R% FOR I%=0% TO S% : SETDOT Y1%+I%,X2%-I% : NEXT I% 470 IF R% EQV N% FOR I%=0% TO S% : SETDOT Y2%-I%,X2%-I% : NEXT I% 480 IF N% EQV L% FOR I%=0% TO S% : SETDOT Y2%-I%,X1%+I% : NEXT I% 490 IF PEEK(65013)>0% RETURN 500 REM rita i sido-g}ngar 510 IF L% 560 520 GOSUB 740 530 IF Q% FOR I%=X1% TO X1%+S% : SETDOT Y1%+S%,I% : NEXT I% 540 GOSUB 830 550 IF Q% FOR I%=X1% TO X1%+S% : SETDOT Y2%-S%,I% : NEXT I% 560 IF \% 610 570 GOSUB 770 580 IF Q% FOR I%=Y1% TO Y1%+S% : SETDOT I%,X2%-S% : NEXT I% 590 GOSUB 740 600 IF Q% FOR I%=Y1% TO Y1%+S% : SETDOT I%,X1%+S% : NEXT I% 610 IF R% 660 620 GOSUB 800 630 IF Q% FOR I%=X2%-S% TO X2% : SETDOT Y2%-S%,I% : NEXT I% 640 GOSUB 770 650 IF Q% FOR I%=X2%-S% TO X2% : SETDOT Y1%+S%,I% : NEXT I% 660 IF N% 710 670 GOSUB 830 680 IF Q% FOR I%=Y2%-S% TO Y2% : SETDOT I%,X1%+S% : NEXT I% 690 GOSUB 800 700 IF Q% FOR I%=Y2%-S% TO Y2% : SETDOT I%,X2%-S% : NEXT I% 710 L1%=L% : \1%=\% 720 R1%=R% : N1%=N% 730 GOTO 260 : REM en till 740 Q%=FNK%(P1%-H%+U%) 750 IF NOT Q% FOR I%=0% TO S% : SETDOT Y1%+I%,X1%+I% : NEXT I% 760 RETURN 770 Q%=FNK%(P1%+H%+U%) 780 IF NOT Q% FOR I%=0% TO S% : SETDOT Y1%+I%,X2%-I% : NEXT I% 790 RETURN 800 Q%=FNK%(P1%+H%-U%) 810 IF NOT Q% FOR I%=0% TO S% : SETDOT Y2%-I%,X2%-I% : NEXT I% 820 RETURN 830 Q%=FNK%(P1%-H%-U%) 840 IF NOT Q% FOR I%=0% TO S% : SETDOT Y2%-I%,X1%+I% : NEXT I% 850 RETURN 860 REM main 870 ; CHR$(12); 880 FOR I%=0% TO 22% : ; CHR$(151%) 890 NEXT I% : ; CHR$(151%); 900 Z1=1 : GOSUB 190 910 IF PEEK(65013)=0% 910 920 GET C$ : C%=ASC(C$) 930 IF C%=32 IF FNK%(P%+F%) GOTO 1110 ELSE GOTO 5000 940 IF C%=66% IF FNK%(P%-F%) GOTO 1110 ELSE P%=P%-F% : GOTO 860 950 IF C$="U" Q%=F% : F%=U% : U%=-Q% : GOTO 860 960 IF C$="N" Q%=F% : F%=-U% : U%=Q% : GOTO 860 970 IF C%=9% Q%=F% : F%=H% : H%=-Q% : GOTO 860 980 IF C%=8% Q%=F% : F%=-H% : H%=Q% : GOTO 860 990 ; CHR$(12) 1000 ; "Kommandon:" 1010 ; " Vridningar:" 1020 ; " 'U' -> upp}t" 1030 ; " 'N' -> ner}t" 1040 ; " 'pil' v{nster" 1050 ; " 'pil' h|ger" 1060 ; " F|rflyttningar:" 1070 ; " -> fram}t" 1080 ; " 'B' -> bak}t" 1090 GET C$ 1100 GOTO 860 1110 REM RAKT I V[GGEN 1120 FOR I%=0% TO 10% 1130 SETDOT RND*72%,RND*78%+2% 1140 NEXT I% 1150 GOTO 860 1153 REM LABYRINT DIM 1155 DATA 8 1157 REM LABYRINT DEF 1160 DATA 255,255,255,255,255,255,255,255 1170 DATA 255,129,171,161,189,129,173,255 1180 DATA 255,183,215,189,219,171,255,255 1190 DATA 255,161,173,145,181,153,173,255 1200 DATA 255,181,239,223,247,171,199,255 1210 DATA 255,129,171,157,177,157,237,255 1220 DATA 255,245,245,209,247,183,193,255 1230 DATA 255,255,255,255,255,255,255,255 2000 REM F\REM]L 2010 REM POSITION 2020 DATA 1,1,1 2030 REM DEF 5000 REM MOVE SOFT FORWARD 5010 FOR Z1=1 TO .1 STEP -.1 5040 ; CHR$(12%); 5050 FOR I%=0% TO 22% : ; CHR$(151%) 5060 NEXT I% : ; CHR$(151%); 5100 GOSUB 190 5200 NEXT Z1 5300 P%=P%+F% 5900 GOTO 860