Type: Program
Platform(s): TS 2068
What an amazeing place.
Content
Image Gallery
Source Code
5 REM 3-D Maze
10 GO SUB 7000
20 INK 1: PAPER 6: BORDER 3: CLS
50 CLS : RESTORE 9000+10*di: READ f1,f2,l1,l2,r1,r2
60 IF x=1 OR x=25 OR y=1 OR y=25 THEN GO TO 90
70 LET af=VAL z$(x+f1,y+f2): LET al=VAL z$(x+l1,y+l2): LET ar=VAL z$(x+r1,y+r2)
80 IF z$(x-f1,y-f2)="1" AND al+ar=1 THEN GO TO 700
90 CLS : PLOT 80,0: DRAW 0,150: DRAW 50,-50: DRAW 50,50: DRAW 0,-150: DRAW -50,100: DRAW -50,-100
100 IF x=1 OR x=25 OR y=1 OR y=25 THEN GO TO 600
110 IF z$(x-f1,y-f2)="1" AND NOT al AND NOT ar THEN GO TO 550
120 FOR f=100 TO 1 STEP -2: PLOT 130-f/2,100-f: DRAW f,0: NEXT f: IF x=1 OR x=25 OR y=1 OR y=25 THEN GO TO 600
130 FOR f=100 TO 1 STEP -1.6: PLOT 130-f/2,f/2+100: DRAW f,0: NEXT f
150 IF NOT al THEN GO TO 200
160 IF NOT ar THEN GO TO 300
170 IF af THEN GO TO 500
180 GO TO 1000
200 PLOT 90,20: DRAW 0,120: PLOT 90,60: DRAW 20,0: DRAW 0,60: DRAW -20,0
210 PLOT 90,21: DRAW INVERSE 1;20,40
220 FOR f=30 TO -10 STEP -2: PLOT 90,50-f: DRAW 30-f,0: NEXT f
230 FOR f=20 TO 1 STEP -1: PLOT 90,140-f: DRAW f,0: NEXT f
240 IF NOT ar THEN GO TO 300
250 IF af THEN GO TO 400
260 GO TO 350
300 PLOT 170,20: DRAW 0,120: PLOT 170,60: DRAW -20,0: DRAW 0,60: DRAW 20,0
310 PLOT 170,19: DRAW INVERSE 1;-20,40
320 FOR f=30 TO -10 STEP -2: PLOT 170,f-50: DRAW f-30,0: NEXT f
330 FOR f=20 TO 1 STEP -1: PLOT 170,140-f: DRAW -f,0: NEXT f
340 IF af THEN GO TO 450
350 GO TO 1000
400 FOR f=61 TO 119: PLOT INVERSE 1;110,f: DRAW INVERSE 1;60,0: NEXT f
410 PLOT 150,60: DRAW 0,60
420 GO TO 1000
450 FOR f=61 TO 119: PLOT INVERSE 1;110,f: DRAW INVERSE 1;59,0: NEXT f
460 IF al THEN PLOT 110,60: DRAW 0,60
470 GO TO 1000
500 FOR f=60 TO 120: PLOT INVERSE 1;110,f: DRAW INVERSE 1;59,0: NEXT f
510 FOR f=110 TO 150 STEP 2: PLOT f,60: DRAW 0,60: NEXT f
520 PRINT AT 9,14;"DEAD";AT 10,14;"END"
530 GO TO 1000
550 FOR f=7 TO 14: PRINT AT f,8;" ";AT f,21;" ": NEXT f: FOR f=14 TO 21: PRINT AT f,0; PAPER 6-(f>18)*3;" ": NEXT f
560 FOR f=24 TO 63 STEP 2: PLOT 0,f: DRAW OVER 1;255,0: NEXT f
570 PRINT AT 0,0;: FOR f=0 TO 6: PRINT "\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::": NEXT f
580 FOR f=0 TO 1: PLOT 110+f*40,63: DRAW 0,57: NEXT f: FOR f=60 TO 100 STEP 2: PLOT 80+f/2,f: DRAW 100-f,0: NEXT f
590 FOR f=100 TO 120: PLOT 230-f,f: DRAW f*2-200,0: NEXT f: GO TO 1000
600 BORDER 4: FOR f=10 TO 0 STEP -10: PLOT 100-f,20: DRAW 0,80+f: DRAW 30+f,40+f: DRAW 30+f,-40-f: DRAW 0,-80-f: NEXT f
610 FOR f=20 TO 100: PLOT 100,f: DRAW 60,0: NEXT f
620 FOR f=100 TO 140: PLOT 25+f*3/4,f: DRAW 212-f*19/12.5,0: NEXT f
630 FOR f=1 TO 30: PLOT OVER 1; PAPER 6;100+RND*60,20+RND*80: NEXT f
640 PRINT AT 0,0;" You have reached the exit."'"You took"'FN c();" Seconds."
650 FOR f=10 TO 67: BEEP .1,f-50: NEXT f: BEEP 2,18
660 PRINT AT 21,0;"Another game? (y/n)": INPUT q$: CLS : IF q$="y" THEN RUN
670 PRINT AT 12,2; FLASH 1;"OK, So long. Have a nice day!": STOP
700 FOR f=19 TO 21: PRINT AT f,0; PAPER 3;" ": NEXT f
710 FOR f=24 TO 63 STEP 2: PLOT al*(f/2+80),f: DRAW 180-f/2-al*5,0: NEXT f
720 FOR f=60 TO 100 STEP 2: PLOT 80+f/2,f: DRAW 100-f,0: NEXT f
730 FOR f=100 TO 120: PLOT 230-f,f: DRAW f*2-200,0: NEXT f
740 FOR f=120 TO 140: PLOT al*(230-f),f: DRAW 30+f-al*5,0: NEXT f
750 PLOT 110+al*40,63: DRAW 0,56: PLOT 170-al*80,24: DRAW 0,116
1000 INPUT "What next? ";a$: BEEP 1,20
1010 IF a$="on" THEN GO TO 1200
1020 IF a$="left" THEN GO TO 1300
1030 IF a$="right" THEN GO TO 1400
1040 IF a$="reverse" THEN GO TO 1500
1050 IF a$="compass" THEN GO TO 1550
1060 IF a$="time" THEN GO TO 1600
1070 IF a$="help" THEN GO TO 1700
1080 GO TO 1000
1200 IF af THEN GO TO 1000
1210 LET x=x+f1: LET y=y+f2
1220 GO TO 50
1300 IF al THEN GO TO 1000
1310 LET x=x+l1: LET y=y+l2
1320 LET di=di+1: IF di>3 THEN LET di=0
1330 GO TO 50
1400 IF ar THEN GO TO 1000
1410 LET x=x+r1: LET y=y+r2
1420 LET di=di-1: IF di<0 THEN LET di=3
1430 GO TO 50
1500 LET di=di+2: IF di>3 THEN LET di=di-4
1510 GO TO 50
1550 PRINT AT 1,1;x$(di*5+1 TO di*5+5): GO TO 1000
1600 PRINT AT 0,15;"Time so far";TAB 15;" = ";FN c();" secs.": GO TO 1000
1700 LET fp=25-(y<13)*7
1710 CLS : FOR f=fp TO fp-17 STEP -1: FOR g=1 TO 25: LET g$=CHR$ 144: IF z$(g,f)="1" THEN LET g$="\::"
1720 IF x=g AND y=f THEN PRINT INK 0; FLASH 1;CHR$ 145;: GO TO 1740
1730 PRINT g$;
1740 NEXT g: PRINT : NEXT f
1750 PRINT "You are at the figure, facing "'x$(di*5+1 TO di*5+5);"."
1760 GO TO 1000
7000 PRINT "Corridors"''"Commands are:"''"on"'"reverse"'"left"'"right"'"compass"'"time"'"and help."
7010 PRINT "Your aim is to exit the caves inthe shortest possible time."
8000 PRINT '"Please Wait...": RANDOMIZE : DIM z$(25,25): DIM y$(5,5)
8010 FOR f=1 TO 25 STEP 5: FOR g=1 TO 25 STEP 5: POKE 23000+RND*295,RND*255
8020 LET ax=1: IF RND<.5 THEN LET ax=5
8030 LET ay=1: IF ax=5 THEN LET ay=-1
8040 LET bx=1: IF RND<.5 THEN LET bx=5
8050 LET by=1: IF bx=5 THEN LET by=-1
8060 GO SUB 8200+INT (RND*10)*50
8070 FOR j=0 TO 4: FOR k=0 TO 4: LET z$(f+j,g+k)=y$(j*ay+ax,k*by+bx): NEXT k: NEXT j
8080 NEXT g: NEXT f: GO SUB 8200
8090 FOR j=1 TO 5: LET z$(10+j,11 TO 15)=y$(j): NEXT j: GO TO 8800
8200 FOR h=1 TO 5: LET y$(h)="11011": NEXT h
8210 LET y$(3)="00000": RETURN
8250 FOR h=1 TO 5: LET y$(h)="11011": NEXT h
8260 LET y$(3)="11000": RETURN
8300 LET y$(1)="11111": LET y$(2)=y$(1)
8310 LET y$(4)="11011": LET y$(5)=y$(4)
8320 LET y$(3)="00000": RETURN
8350 LET y$(1)="11111": LET y$(2)=y$(1)
8360 LET y$(4)="11011": LET y$(5)=y$(4)
8370 LET y$(3)="00011": RETURN
8400 LET y$(1)="11011": LET y$(5)=y$(1)
8410 LET y$(2)="10001": LET y$(4)=y$(2)
8420 LET y$(3)="00100": RETURN
8450 LET y$(1)="11011": LET y$(5)=y$(1)
8460 LET y$(2)="10101": LET y$(3)="00100"
8470 LET y$(4)="10111": RETURN
8500 LET y$(1)="11011": LET y$(2)="00101"
8510 LET y$(3)="10100": LET y$(4)="10001"
8520 LET y$(5)="11011": RETURN
8550 LET y$(1)="11000": LET y$(2)="11010"
8560 LET y$(3)="10001": LET y$(4)="00000"
8570 LET y$(5)="11011": RETURN
8600 LET y$(1)="11011": LET y$(5)=y$(1)
8610 LET y$(2)="10011": LET y$(3)="10100"
8620 LET y$(4)="10001": RETURN
8650 LET y$(1)="11001": LET y$(2)="11100"
8660 LET y$(5)="11011": RETURN
8800 LET x=13: LET y=13
8810 LET di=0
8820 LET x$="NorthWest SouthEast."
8830 DEF FN a()=INT ((PEEK 23672+256*PEEK 23673+65536*PEEK 23674)/50)
8840 DEF FN b(x,y)=(x+y+ABS (x-y))/2
8850 DEF FN c()=FN b(FN a(),FN a())
8860 RESTORE 9100: FOR f=0 TO 1: FOR g=0 TO 7: READ a: POKE USR CHR$ (144+f)+g,a: NEXT g: NEXT f
8870 FOR f=23674 TO 23672 STEP -1: POKE f,0: NEXT f
8880 RETURN
9000 DATA 0,1,-1,0,1,0
9010 DATA -1,0,0,-1,0,1
9020 DATA 0,-1,1,0,-1,0
9030 DATA 1,0,0,1,0,-1
9100 DATA 195,129,0,0,0,0,129,195
9110 DATA 56,56,16,124,186,186,40,108
9998 SAVE "Maze" LINE 1: BEEP .4,15
9999 VERIFY ""