PARAMETER MAXH=52 !MAXIMUM NUMBER OF HORIZONTAL SQUARES PARAMETER MAXV=170 !MAXIMUM NUMBER OF VERTICAL SQUARES C MAZE PROGRAM INTEGER H INTEGER X,T,C,R,S,VV,Z,Q INTEGER W(MAXH, MAXV),V(MAXH, MAXV) COMMON I1,I2 INIT=AMOD(SECNDS(0.),200.) DO 1 I=1,INIT 1 X=RAN(I1,I2) 9000 FORMAT (1X,131A1) 9001 WRITE(5,100) 100 FORMAT('$ENTER MAZE SIZE (HORZ,VERT) > ') READ(5,110,END=99) H,VV 110 FORMAT(2I10) H=MIN0(H,MAXH) VV=MIN0(VV,MAXV) Q=0 Z = 0 DO 40 J=1,MAXH DO 40 I=1,MAXV W(J,I)=0 40 V(J,I)=0 X=IRAND (H) KK=X C=1 W(X,1)=C C=C+1 R=X S=1 GO TO 900 730 IF (R.NE.H) GO TO 810 IF (S.NE.VV) GO TO 780 R=1 S=1 GO TO 890 780 R=1 S=S+1 GO TO 890 810 R=R+1 890 IF (W(R,S).EQ.0) GO TO 730 900 IF (R .EQ. 1) GO TO 1330 IF (W(R-1,S) .NE. 0) GO TO 1330 IF (S .EQ. 1) GO TO 1100 IF (W(R,S-1).NE.0) GO TO 1100 IF (R.EQ.H) GO TO 990 IF (W(R+1,S).NE.0) GO TO 990 X=IRAND(3) GO TO (1850,1920,1990),X 990 IF (S.NE.VV) GO TO 1030 IF (Z.EQ.1) GO TO 1070 Q=1 GO TO 1040 1030 IF (W(R,S+1).NE.0) GO TO 1070 1040 X=IRAND(3) GO TO (1850,1920,2090),X 1070 X=IRAND(2) GO TO (1850,1920),X 1100 IF (R.EQ.H) GO TO 1230 IF (W(R+1,S).NE.0) GO TO 1230 IF (S.NE.VV) GO TO 1160 IF (Z.EQ .1) GO TO 1200 Q=1 GO TO 1170 1160 IF (W(R,S+1).NE .0) GO TO 1200 1170 X=IRAND(3) GO TO (1850,1990,2090),X 1200 X=IRAND(2) GO TO (1850,1990),X 1230 IF (S.NE .VV) GO TO 1270 IF (Z.EQ .1) GO TO 1850 Q=1 GO TO 1280 1270 IF (W(R,S+1).NE .0) GO TO 1850 1280 X=IRAND(2) GO TO (1850,2090),X 1330 IF (S .EQ. 1) GO TO 1580 IF (W(R,S-1).NE .0) GO TO 1580 IF (R.EQ .H) GO TO 1480 IF (W(R+1,S).NE .0) GO TO 1480 IF (S.NE .VV) GO TO 1410 IF (Z .EQ. 1) GO TO 1450 Q=1 GO TO 1420 1410 IF (W(R,S+1).NE .0) GO TO 1450 1420 X=IRAND(3) GO TO (1920,1990,2090),X 1450 X=IRAND(2) GO TO (1920,1990),X 1480 IF (S.NE .VV) GO TO 1520 IF (Z.EQ .1) GO TO 1920 Q=1 GO TO 1530 1520 IF (W(R,S+1).NE .0) GO TO 1920 1530 X=IRAND(2) GO TO (1920,2090),X 1580 IF (R.EQ .H) GO TO 1700 IF (W(R+1,S).NE .0) GO TO 1700 IF (S.NE .VV) GO TO 1640 IF (Z.EQ. 1) GO TO 1990 Q=1 GO TO 1650 1640 IF (W(R,S+1).NE .0) GO TO 1990 1650 X=IRAND(2) GO TO (1990,2090),X 1700 IF (S.NE .VV) GO TO 1740 IF (Z.EQ .1) GO TO 730 Q=1 GO TO 2090 1740 IF (W(R,S+1).NE .0) GO TO 730 GO TO 2090 1850 W(R-1,S)=C C=C+1 V(R-1,S)=2 R=R-1 IF (C.EQ .H*VV+1) GO TO 2310 Q=0 GO TO 900 1920 W(R,S-1)=C C=C+1 V(R,S-1)=1 S=S-1 IF (C.EQ .(H*VV+1)) GO TO 2310 Q=0 GO TO 900 1990 W(R+1,S)=C C=C+1 IF (V(R,S).EQ .0) GO TO 2040 V(R,S)=3 GO TO 2050 2040 V(R,S)=2 2050 R=R+1 IF (C.EQ .(H*VV+1)) GO TO 2310 Q=0 GO TO 1330 2090 IF (Q.EQ. 1) GO TO 2190 W(R,S+1)=C C=C+1 IF (V(R,S).EQ .0) GO TO 2150 V(R,S)=3 GO TO 2160 2150 V(R,S)=1 2160 S=S+1 IF (C.EQ .(H*VV+1)) GO TO 2310 GO TO 900 2190 Z=1 IF (V(R,S).EQ .0) GO TO 2240 V(R,S)=3 Q=0 GO TO 730 2240 V(R,S)=1 Q=0 R=1 S=1 GO TO 890 2310 CALL PLOTS(.2*FLOAT(VV)+.5,.2*FLOAT(H)+.5) Y=.2*FLOAT(KK) CALL PLOT(0.,Y,3) CALL PLOT(.1,Y,2) CALL PLOT(0.,Y+.2,3) CALL PLOT(.1,Y+.2,2) C CALL PLOT(.1,0.,3) CALL PLOT(.1,Y,2) CALL PLOT(.1,Y+.2,3) CALL PLOT(.1,.2*FLOAT(H),2) C XX=.1 DO 3000 J=1,VV CALL PLOT(XX,0.,3) CALL PLOT(XX+.2,0.,2) DO 3001 I=1,H IF (V(I,J).GT.1) GO TO 3001 Y=FLOAT(I)*.2 CALL PLOT(XX,Y,3) CALL PLOT(XX+.2,Y,2) 3001 CONTINUE XX=XX+.2 DO 3002 I=1,H IF (V(I,J).EQ.1.OR.V(I,J).EQ.3) GO TO 3002 Y=.2*FLOAT(I-1) CALL PLOT(XX,Y,3) CALL PLOT(XX,Y+.2,2) 3002 CONTINUE 3000 CONTINUE DO 3003 I=1,H IF (V(I,VV).EQ.0.OR.V(I,VV).EQ.2) GO TO 3003 Y=.2*FLOAT(I-1) CALL PLOT(XX,Y,3) CALL PLOT(XX+.1,Y,2) CALL PLOT(XX,Y+.2,3) CALL PLOT(XX+.1,Y+.2,2) GO TO 3004 3003 CONTINUE 3004 CALL PLOT(0.,0.,999) 3999 CONTINUE C GO TO 9001 99 STOP END FUNCTION IRAND(I) COMMON I1,I2 X=RAN(I1,I2) IRAND=X*FLOAT(I)+1. RETURN END