Skip to content

Commit 3e11fc8

Browse files
authored
Add files via upload
Initial upload of 3D_Maze
1 parent e45addc commit 3e11fc8

File tree

2 files changed

+209
-0
lines changed

2 files changed

+209
-0
lines changed

3dmaze/3dload.bas

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
10 REM 3D_Maze
2+
20 REM by David Johnston
3+
30 REM 1993 Acorn Computing
4+
40 REM Instructions from mag. 11.07
5+
50 REM Ported to the Agon Light by Steve Lovejoy 2024.
6+
60 REM
7+
70 REM ON ERROR GOTO 340
8+
80 MODE 7 : PROC_HideCursor
9+
90 PROCcntr(1,6,1," 3D_Maze")
10+
100 PROCcntr(0,4,2," by David Johnston 1993")
11+
105 PROCcntr(0,4,3," Ported to the Agon Light")
12+
110 PROCcntr(0,4,4," by Steve Lovejoy 2024")
13+
120 PRINT'"There you were, sitting at the keyboard of your trusty old Agon when, all of a sudden, a tremendous walled maze appeared around you."
14+
130 PRINT"Perplexed by this weird phenomenon, you became unable to do anything at all other than turn to your left or right, or stagger forward in hope of finding your passport to freedom."
15+
140 PRINT"Your only means of escape is through the elusive exit which appears as a solid white section in the maze wall."
16+
150 PRINT"If you find it be sure not to miss your opportunity."
17+
160 :
18+
170 PRINTTAB(8,23);CHR$132;CHR$(157);CHR$135;" PRESS ANY KEY ";CHR$156; : VDU 28,0,22,39,8
19+
180 A=GET : CLS
20+
190 PRINT"The maze is cleverly drawn using data based on a two dimensional grid. As you weave your way around the maze, your view is updated from the grid to give an accurate representation of your"
21+
200 PRINT"surroundings and line of sight. Walls appear as outlined sections, and paths simply as gaps in these walls."
22+
210 PRINT
23+
220 PRINT"A simple maze editor is also included so that you can design your own challenges in two dimensions and attempt to solve them in three."
24+
230 A=GET : CLS
25+
240 PRINTSPC15"Maze editor"
26+
250 PRINT'SPC10;CHR$134;"Z=Left"
27+
260 PRINTSPC10;CHR$134;"X=Right"
28+
270 PRINTSPC10;CHR$134;"K=Up"
29+
280 PRINTSPC10;CHR$134;"M=Down"
30+
290 PRINTSPC10;CHR$134;"/=Select object"
31+
300 PRINTSPC10;CHR$134;":=Place object at cursor"
32+
310 PRINTSPC10;CHR$134;"E=Return to Editor menu"
33+
320 PRINT;CHR$134;'" NB: O indicates a wall, E the exit."
34+
330 A=GET
35+
340 REM
36+
350 CLS : VDU 28,0,24,39,0
37+
360 PROCcntr(0,15,6," Gameplay controls")
38+
370 PROCcntr(1,6,10,"Z=Rotate anti-clockwise")
39+
380 PROCcntr(1,6,13,"X=Rotate clockwise")
40+
390 PROCcntr(1,6,16,"/=Move forward")
41+
400 PRINTTAB(8,23);CHR$132;CHR$(157);CHR$135;" PRESS ANY KEY " : A=GET : VDU 26 : CLS
42+
430 RUN"3dmaze.bas"
43+
440 END
44+
445 :
45+
450 DEF PROCcntr(D%,C%,Y%,msg$)
46+
460 X%=(40-LEN(msg$))/2
47+
470 msg$=CHR$(128+C%)+msg$
48+
480 IF D%=1 FOR N%=0 TO 1 : PRINTTAB(X%-2,Y%+N%)CHR$141msg$ : NEXT : ENDPROC
49+
490 PRINTTAB(X%-1,Y%+N%)msg$
50+
500 ENDPROC
51+
510 :
52+
520 DEF PROC_HideCursor : REM Hide Cursor.
53+
530 VDU 23,1,0;0;0;0;
54+
540 ENDPROC
55+

3dmaze/3dmaze.bas

+154
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
1 REM 3D_Maze
2+
2 REM by David Johnston
3+
3 REM Acorn Computing
4+
4 REM Ported to the Agon Light by Steve Lovejoy 2024.
5+
5 REM
6+
6 REM ON ERROR RUN
7+
10 MODE 8
8+
12 DIM M$(20,20)
9+
13 PROCoptions
10+
15 PROC_HideCursor
11+
20 IF MOV=1 THEN GOTO 50
12+
30 FOR B=1 TO 20 : FOR A=1 TO 20
13+
40 READ M$(A,B) : NEXT : NEXT
14+
50 A=2 : B=2 : D=3
15+
70 PROCdraw
16+
75 REM
17+
80 A$=GET$
18+
90 IF A$="/"THEN PROCforward
19+
100 IF A$="Z"THEN PROCanti
20+
110 IF A$="X"THEN PROCclock
21+
120 GOTO 70
22+
125 :
23+
130 DEF PROCanti
24+
140 IF D=1 THEN D=4 : ENDPROC
25+
150 D=D-1 : ENDPROC
26+
160 DEF PROCclock
27+
170 IF D=4 THEN D=1 : ENDPROC
28+
180 D=D+1 : ENDPROC
29+
187 :
30+
190 DEF PROCforward
31+
200 IF D=1 AND M$(A,B-1)="" THEN B=B-1 : ENDPROC
32+
210 IF D=2 AND M$(A+1,B)="" THEN A=A+1 : ENDPROC
33+
220 IF D=3 AND M$(A,B+1)="" THEN B=B+1 : ENDPROC
34+
230 IF D=4 AND M$(A-1,B)="" THEN A=A-1 : ENDPROC
35+
240 IF D=1 AND M$(A,B-1)="E" THEN CLS : PRINT"WELL DONE!" : A=GET : RUN
36+
250 IF D=2 AND M$(A+1,B)="E" THEN CLS : PRINT"WELL DONE!" : A=GET : RUN
37+
260 IF D=3 AND M$(A,B-1)="E" THEN CLS : PRINT"WELL DONE!" : A=GET : RUN
38+
270 IF D=4 AND M$(A-1,B)="E" THEN CLS : PRINT"WELL DONE!" : A=GET : RUN
39+
280 :
40+
1000 DEF PROCdraw
41+
1003 CLS
42+
1005 M=-512 : MS=512 : X=A : Y=B
43+
1007 REPEAT
44+
1010 PROCmovedraw
45+
1012 IF M$(X,Y)="O" THEN MOVE M,1000-M:DRAW M,M:DRAW 1000-M,M:DRAW 1000-M,1000-M:DRAW M,1000-M : GOTO 1040
46+
1014 IF M$(X,Y)="E" THEN MOVE M,1000-M:DRAW M,M:PLOT 85,1000-M,1000-M:PLOT 85,1000-M,M : GOTO 1040
47+
1020 IF BL$="O" THEN MOVE M,1000-M:DRAW M,M:DRAW M+MS,M+MS:DRAW M+MS,1000-M-MS:DRAW M,1000-M
48+
1025 IF BL$="E" THEN MOVE M,1000-M:DRAW M,M:PLOT 85,M+MS,1000-M-MS:PLOT 85,M+MS,M+MS
49+
1030 IF BR$="O" THEN MOVE 1000-M,1000-M:DRAW 1000-M,M:DRAW 1000-(M+MS),M+MS:DRAW 1000-(M+MS),1000-M-MS:DRAW 1000-M,1000-M
50+
1035 IF BR$="E" THEN MOVE 1000-M,1000-M:DRAW 1000-M,M:PLOT 85,1000-(M+MS),1000-M-MS:PLOT 85,1000-(M+MS),M+MS
51+
1040 IF BL$="O" AND POINT(M-4,1004-M)=0 THEN MOVE M,1000-M:DRAW M-(MS*2),1000-M:MOVE M,M:DRAW M-(MS*2),M
52+
1050 IF BR$="O" AND MS<256 AND POINT(1004-M,1004-M)=0 THEN MOVE 1000-M,1000-M:DRAW 1000-M+(MS*2),1000-M:MOVE 1000-M,M:DRAW 1000-M+(MS*2),M
53+
1100 UNTIL M$(X,Y)="O" OR M$(X,Y)="E" OR MS=8
54+
1110 ENDPROC
55+
1120 :
56+
2000 DEF PROCmovedraw
57+
2010 IF D=1 THEN Y=Y-1 : BL$=M$(X-1,Y) : BR$=M$(X+1,Y)
58+
2020 IF D=3 THEN Y=Y+1 : BL$=M$(X+1,Y) : BR$=M$(X-1,Y)
59+
2030 IF D=2 THEN X=X+1 : BL$=M$(X,Y-1) : BR$=M$(X,Y+1)
60+
2040 IF D=4 THEN X=X-1 : BL$=M$(X,Y+1) : BR$=M$(X,Y-1)
61+
2043 M=M+MS:MS=MS/2
62+
2050 ENDPROC
63+
2055 :
64+
2060 DEF PROCoptions
65+
2065 MOV=0
66+
2070 CLS : PRINT"1.PLAY GAME"
67+
2080 PRINT"2.MAKE MAZE";
68+
2090 A$=GET$
69+
2100 IF A$="1" THEN ENDPROC
70+
2110 IF A$="2" THEN GOTO 2130
71+
2120 GOTO 2070
72+
2130 CLS : PRINT"1.LOAD MAZE"
73+
2140 PRINT"2.SAVE MAZE"
74+
2150 PRINT"3.EDIT MAZE"
75+
2155 PRINT"4.GO TO MAIN MENU";
76+
2160 A$=GET$
77+
2170 IF A$="1"THEN MOV=1 : PROCload
78+
2180 IF A$="2" AND MOV=1 THEN PROCsave
79+
2190 IF A$="3" THEN MOV=1 : PROCedit
80+
2195 IF A$="4" THEN GOTO 2070
81+
2200 GOTO 2130
82+
2205 :
83+
2210 DEF PROCload
84+
2220 CLS : INPUT"PLEASE ENTER FILE-NAME ";name$
85+
2230 X=OPENIN(name$)
86+
2240 FOR B=1 TO 20 : FOR A=1 TO 20
87+
2250 INPUT# X,M$(A,B)
88+
2260 NEXT : NEXT
89+
2265 CLOSE# X
90+
2270 ENDPROC
91+
2275 :
92+
2280 DEF PROCsave
93+
2290 CLS : INPUT"PLEASE ENTER FILE-NAME ";name$
94+
2300 X=OPENOUT(name$)
95+
2310 FOR B=1 TO 20 : FOR A=1 TO 20
96+
2320 PRINT# X,M$(A,B)
97+
2330 NEXT : NEXT
98+
2335 CLOSE# X
99+
2340 ENDPROC
100+
2345 :
101+
2350 DEF PROCedit
102+
2355 WALL=1
103+
2360 CLS : FOR B=1 TO 20 : FOR A=1 TO 20
104+
2370 PRINTTAB(A,B)M$(A,B)
105+
2380 NEXT : NEXT
106+
2390 A=1 : B=1
107+
2402 PRINTTAB(1,25);
108+
2404 IF WALL=1 THEN PRINT"O"
109+
2406 IF WALL=2 THEN PRINT" "
110+
2408 IF WALL=3 THEN PRINT"E"
111+
2409 PRINTTAB(A,B);
112+
2410 A$=GET$
113+
2420 IF A$=":"THENPROCplace
114+
2430 IF A$="/"THEN WALL=WALL+1:IF WALL=4 THEN WALL=1
115+
2440 IF A$="Z" AND A>1 THEN A=A-1
116+
2450 IF A$="X" AND A<20 THEN A=A+1
117+
2460 IF A$="M" AND B<20 THEN B=B+1
118+
2470 IF A$="K" AND B>1 THEN B=B-1
119+
2480 IF A$="E"THEN ENDPROC
120+
2490 GOTO 2402
121+
2495 :
122+
2500 DEF PROCplace
123+
2510 PRINTTAB(A,B);
124+
2520 IF WALL=1 THENPRINT"O" : M$(A,B)="O"
125+
2530 IF WALL=2 THEN PRINT" " : M$(A,B)=""
126+
2540 IF WALL=3 THENPRINT"E" : M$(A,B)="E"
127+
2550 ENDPROC
128+
2560 :
129+
2570 DEF PROC_HideCursor
130+
2580 VDU 23,1,0;0;0;0;
131+
2590 ENDPROC
132+
2600 :
133+
5000 DATA O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O
134+
5010 DATA O, ,O, , , , , , ,O, , , ,O, , , , , ,O
135+
5020 DATA O, ,O, ,O, ,O,O, ,O, ,O, ,O, ,O,O,O, ,O
136+
5030 DATA O, , , ,O, , ,O, ,O, ,O,O,O, ,O, ,O, ,O
137+
5040 DATA O, ,O,O,O,O, , , ,O, ,O, , , , , ,O, ,O
138+
5050 DATA O, , , , ,O,O,O,O,O, ,O, ,O,O,O, , , ,O
139+
5060 DATA O,O,O,O, , , , , , , ,O, , , ,O,O,O,O,O
140+
5070 DATA O, ,O,O, ,O,O,O,O,O, ,O,O,O, ,O, , , ,O
141+
5080 DATA O, , , , , , , , ,O, , , ,O, ,O, ,O,O,O
142+
5090 DATA O,O,O,O,O,O, ,O, ,O,O,O,O,O, ,O, , , ,O
143+
5100 DATA O, , , , ,O, ,O, ,O, , , , , ,O,O,O, ,O
144+
5110 DATA O,O,O, ,O,O, ,O, , , ,O,O,O,O,O, , , ,O
145+
5120 DATA O, , , , ,O, ,O, ,O,O,O, , , , , ,O, ,O
146+
5130 DATA O,O, ,O,O,O, ,O,O,O,O, , ,O, ,O, ,O, ,O
147+
5140 DATA O, , ,O, , , , , , ,O, ,O,O, ,O,O,O,O,O
148+
5150 DATA O,O, , , ,O, ,O,O, ,O, ,O, , , , , , ,O
149+
5160 DATA O, , ,O, ,O, , , , ,O, ,O, ,O,O, ,O,O,O
150+
5170 DATA O, ,O,O, ,O,O,O,O,O,O, ,O, ,O, , , ,O,O
151+
5180 DATA O, , ,O, , , , , , , , ,O, ,O, ,O, , ,E
152+
5190 DATA O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O,O
153+
154+

0 commit comments

Comments
 (0)