PARAMETER MAXH=43 !MAXIMUM NUMBER OF HORIZONTAL SQUARES PARAMETER MAXV=260 !MAXIMUM NUMBER OF VERTICAL SQUARES C MAZE PROGRAM INTEGER H BYTE SS(131) 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(2,100) 100 FORMAT('$ENTER MAZE SIZE (HORZ,VERT) > ') READ(2,110,END=99) H,VV 110 FORMAT(2I10) H=MIN0(H,MAXH) VV=MIN0(VV,MAXV) OPEN (UNIT=1,NAME='MAZE.DAT') Q=0 Z = 0 DO 40 J=1,MAXH DO 40 I=1,MAXV W(J,I)=0 40 V(J,I)=0 DO 9999 I=1,131 9999 SS (I)=1H 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 DO 10 I=1,H Q= I * 3 SS (Q-2)=1HI SS (Q-1)=1H- SS (Q)=1H- 10 CONTINUE Q = KK * 3 SS(Q-2)=1H* SS (Q-1)=1H SS (Q)=1H SS(Q+1)=1H* SS(3*H+1) = 1HI WRITE (1,9000) SS DO 3000 J=1,VV Z=H*3 DO 70 I=1,Z 70 SS(I)=1H SS(1)=1HI DO 3001 I=1,H 3001 IF (V(I,J).LE.1) SS(3*I+1)=1HI WRITE (1,9000) SS DO 3002 I=1,H Q=3*I SS(Q-2)=1HI IF (V(I,J).EQ.1.OR.V(I,J).EQ.3) GO TO 3002 SS(Q-1)=1H- SS(Q)=1H- 3002 CONTINUE IF (J.LT.VV) GO TO 3004 DO 3003,I=1,H IF (V(I,VV).EQ.0.OR.V(I,VV).EQ.2) GO TO 3003 Q=3*I SS(Q-2)=1H* SS(Q+1)=1H* GO TO 3004 3003 CONTINUE 3004 WRITE (1,9000) SS 3000 CONTINUE 3999 CONTINUE CLOSE (UNIT=1,DISPOSE='PRINT') GO TO 9001 99 STOP END FUNCTION IRAND(I) COMMON I1,I2 X=RAN(I1,I2) IRAND=X*FLOAT(I)+1. RETURN END