Adapted TRS80 BASIC (http://www.vavasour.ca/jeff/level1/entry6_preview.html)
maze1
10 DEFINT A-Z:DIM A(42*21*3) 30 GOSUB 440:SCREEN 2:GOSUB 330:GOTO 160 40 S=Q 50 IF Q<>A(Q) THEN Q=A(Q):GOTO 50 60 O=A(S):A(S)=Q:S=O:IF O<>Q THEN 60 70 RETURN 80 ' 90 IF W=V THEN 140 130 A=W+INT(W/(N-1)):B=A+1:RETURN 140 A=W-V:B=W-V+N:RETURN 150 ' 160 U=T:COLOR C 170 FOR D=1 TO R-1 180 G=RND(1)*U+R-1:W=A(G):A(G)=A(R+U-1):U=U-1 190 GOSUB 120 200 Q=A:GOSUB 40:P=Q 210 Q=B:GOSUB 40 220 IF P=Q THEN 180 230 A(Q)=P 240 GOSUB 90 250 NEXT D 260 PSET(1,0):PSET(2,0) 270 PSET(3*N-1,2*M):PSET(3*N-2,2*M) 280 COLOR 5: PRINT "MAZE COMPLETE, PRESS "; 290 COLOR 12:PRINT "<ENTER>";:COLOR 5 300 INPUT " FOR A NEW MAZE";A$ 310 GOTO 20 320 ' 330 PRINT "INITIALIZING..."; 340 R=M*N:V=M*(N-1):H=(M-1)*N:T=2*M*N-M-N 350 FOR I=0 TO R-1:A(I)=I:NEXT I 360 FOR I=0 TO T-1:A(I+R)=I:NEXT I 370 CLS:COLOR G 380 FOR X=0 TO 3*N STEP 3:FOR Y=0 TO 2*M:PSET(X,Y):NEXTY:NEXTX 390 FOR Y=0 TO 2*M STEP 2:FOR X=0 TO 3*N:PSET(X,Y):NEXTX:NEXTY 400 COLOR C 410 FOR Y=1 TO 2*M STEP 2:FOR X=1 TO 3*N STEP 3:PSET(X,Y):PSET(X+1,Y):NEXTX:NEXTY 420 RETURN 430 ' 440 E=0:C=1:G=14:COLOR G,C,C:CLS 445 CLS:INPUT"ENTER DESIRED MAZE DIMENSIONS (MAX 42,21)";H,V 446 IF(H<1)+(V<1)+(H>42)+(V>21)THEN 445 450 N=H:M=V 460 RETURN
maze2
10 DEFINT A-Z 20 CLS:INPUT"ENTER DESIRED MAZE DIMENSIONS (MAX 42,21)";H,V 30 IF(H<1)+(V<1)+(H>42)+(V>21)THEN 20 40 CLS:COLOR 15,0,0:SCREEN2 50 ' INITIALIZE FOUNDATION 60 FOR X=1TO1+H*3:FOR Y=1TO1+V*2:PSET(X,Y):NEXT Y:NEXT X 70 ' SHOW ENTRANCE 80 X=RND(1)*H:Y=1:PRESET(X*3,1):PRESET(X*3-1,1) 90 ' FILL MAZE WITH PATHS UNTIL ALL CELLS HAVE BEEN CLEARED 100 C=H*V 110 ' CLEAR CURRENT CELL 120 PRESET(X*3,Y*2):PRESET(X*3-1,Y*2):C=C-1:IFC<1GOTO 300 130 ' JUST VISIT CURRENT CELL 140 M=X*3:N=Y*2 150 ' SURVEY SURROUNDING AREA 160 L=(X>1)*POINT(M-3,N):R=0:IF(X1)*POINT(M,N-2):D=(YV THEN Y=1:X=X+1:IFX>H THEN X=1 210 IF POINT(X*3,Y*2) THEN 200 220 GOTO 140 230 ' KNOCK DOWN A WALL IN A RANDOM BUT LEGAL DIRECTION 240 IF L*(4*RND(1)<1) THEN PRESET(M-2,N):X=X-1:GOTO 120 250 IF R*(4*RND(1)<1) THEN PRESET(M+1,N):X=X+1:GOTO 120 260 IF U*(4*RND(1)<1) THEN PRESET(M,N-1):PRESET(M-1,N-1):Y=Y-1:GOTO120 270 IF D*(4*RND(1)<1) THEN PRESET(M,N+1):PRESET(M-1,N+1):Y=Y+1:GOTO120 280 GOTO240 290 ' SHOW EXIT 300 X=RND(1)*H:PRESET(X*3-1,1+V*2):PRESET(X*3,1+V*2) 310 INPUT"...DONE!";A$:GOTO 20
Enjoy! Let me know how they go !!
ログイン/登録して投稿

