C FORTMAZE : FORTRAN MAZE GENERATOR MAZE 1 C COPYRIGHT (C) 1978 BY TERENCE M. KENNEDY ALL RIGHTS RESERVED MAZE 2 C INITIALIZE MAZE 3 C ADJUST V AND W DIMENSIONS TO MAXIMUM ALLOWED ON YOUR SYSTEM MAZE 4 INTEGER C,R,S,T,H,V1,Z,S0,S1,S2 MAZE 5 LOGICAL*1 V(40,500),W(40,500) DIMENSION TEMP(41) MAZE 6 DATA RI2D,RI2B,R3B,RI,R2BI/'I--','I ',' ','I',' I'/ MAZE 8 H=40 MAZE 9 C READ IN VARIABLE PARAMETERS MAZE 10 WRITE (7,49) 49 FORMAT (1X,'MAZE release 3.00, compiled 12/04/84'//' Enter length 1of maze? (10-500): ') READ (5,51) V1 MAZE 11 WRITE (7,48) 48 FORMAT (1X,'Enter random number seed? (1-32767): ') READ (5,51) S2 51 FORMAT (I5) MAZE 12 I9=H MAZE 13 J9=V1 MAZE 14 50 FORMAT (I5) MAZE 16 C OUTPUT PARAMETERS MAZE 17 WRITE (7,1) MAZE 18 1 FORMAT (1H1) MAZE 19 WRITE (7,6) H,V1,S2 MAZE 22 6 FORMAT (1X,'Width=',I2,2X,'Length=',I4,2X,'Seed=',I5///) S0=0 S1=0 DO 47 I=1,S2 47 X=RAN(S0,S1) DO 10 I=1,I9 MAZE 26 DO 10 J=1,J9 MAZE 27 W(I,J)=0 MAZE 28 10 V(I,J)=0 MAZE 29 Q=0 MAZE 30 Z=0 MAZE 31 D=0. MAZE 32 C SET UP AND PRINT FIRST LINE MAZE 33 X=RAN(S0,S1) MAZE 34 X=IFIX(X*H+1) MAZE 35 DO 410 I=1,I9 MAZE 36 IF (I.EQ.IFIX(X)) GO TO 370 MAZE 37 TEMP(I)=RI2D MAZE 38 GO TO 410 MAZE 39 370 TEMP(I)=RI2B MAZE 40 410 CONTINUE MAZE 41 WRITE (7,2) (TEMP(I),I=1,I9) MAZE 42 2 FORMAT (1X,40A3) MAZE 43 CALL CLEAR(TEMP) MAZE 44 WRITE (7,3) RI MAZE 45 3 FORMAT ('+',120X,1A1) MAZE 46 C CALCULATE OTHER LINES OF MAZE MAZE 47 C=1 MAZE 48 W(X,1)=C MAZE 49 C=C+1 MAZE 50 R=X MAZE 51 S=1 MAZE 52 GO TO 620 MAZE 53 520 IF (R.NE.H) GO TO 600 MAZE 54 IF (S.NE.V1) GO TO 570 MAZE 55 R=1 MAZE 56 S=1 MAZE 57 GO TO 610 MAZE 58 570 R=1 MAZE 59 S=S+1 MAZE 60 GO TO 610 MAZE 61 600 R=R+1 MAZE 62 610 T=W(R,S) MAZE 63 IF (T.EQ.0) GO TO 520 MAZE 64 620 IF (R-1.EQ.0) GO TO 980 MAZE 65 T=W(R-1,S) MAZE 66 IF (T.NE.0) GO TO 980 MAZE 67 IF (S-1.EQ.0) GO TO 790 MAZE 68 T=W(R,S-1) MAZE 69 IF (T.NE.0) GO TO 790 MAZE 70 IF (R.EQ.H) GO TO 700 MAZE 71 T=W(R+1,S) MAZE 72 IF (T.NE.0) GO TO 700 MAZE 73 X=RAN(S0,S1) MAZE 74 X=IFIX(X*3+1) MAZE 75 IF (X-2) 1360,1430,1500 MAZE 76 700 IF (S.NE.V1) GO TO 740 MAZE 77 IF (Z.EQ.1) GO TO 770 MAZE 78 Q=1 MAZE 79 GO TO 750 MAZE 80 740 T=W(R,S+1) MAZE 81 IF (T.NE.0) GO TO 770 MAZE 82 750 X=RAN(S0,S1) MAZE 83 X=IFIX(X*3+1) MAZE 84 IF (X-2) 1360,1430,1600 MAZE 85 770 X=RAN(S0,S1) MAZE 86 X=IFIX(X*2+1) MAZE 87 IF (X-2) 1360,1430,790 MAZE 88 790 IF (R.EQ.H) GO TO 900 MAZE 89 T=W(R+1,S) MAZE 90 IF (T.NE.0) GO TO 900 MAZE 91 IF (S.NE.V1) GO TO 850 MAZE 92 IF (Z.EQ.1) GO TO 880 MAZE 93 Q=1 MAZE 94 GO TO 860 MAZE 95 850 T=W(R,S+1) MAZE 96 IF (T.NE.0) GO TO 880 MAZE 97 860 X=RAN(S0,S1) MAZE 98 X=IFIX(X*3+1) MAZE 99 IF (X-2) 1360,1500,1600 MAZE 100 880 X=RAN(S0,S1) MAZE 101 X=IFIX(X*2+1) MAZE 102 IF (X-2) 1360,1500,900 MAZE 103 900 IF (S.NE.V1) GO TO 940 MAZE 104 IF (Z.EQ.1) GO TO 970 MAZE 105 Q=1 MAZE 106 GO TO 950 MAZE 107 940 T=W(R,S+1) MAZE 108 IF (T.NE.0) GO TO 970 MAZE 109 950 X=RAN(S0,S1) MAZE 110 X=IFIX(X*2+1) MAZE 111 IF (X-2) 1360,1600,970 MAZE 112 970 GO TO 1360 MAZE 113 980 IF (S-1.EQ.0) GO TO 1190 MAZE 114 T=W(R,S-1) MAZE 115 IF (T.NE.0) GO TO 1190 MAZE 116 IF (R.EQ.H) GO TO 1110 MAZE 117 T=W(R+1,S) MAZE 118 IF (T.NE.0) GO TO 1110 MAZE 119 IF (S.NE.V1) GO TO 1060 MAZE 120 IF (Z.EQ.1) GO TO 1090 MAZE 121 Q=1 MAZE 122 GO TO 1070 MAZE 123 1060 T=W(R,S+1) MAZE 124 IF (T.NE.0) GO TO 1090 MAZE 125 1070 X=RAN(S0,S1) MAZE 126 X=IFIX(X*3+1) MAZE 127 IF (X-2) 1430,1500,1600 MAZE 128 1090 X=RAN(S0,S1) MAZE 129 X=IFIX(X*3+1) MAZE 130 IF (X-2) 1430,1500,1110 MAZE 131 1110 IF (S.NE.V1) GO TO 1150 MAZE 132 IF (Z.EQ.1) GO TO 1180 MAZE 133 Q=1 MAZE 134 GO TO 1160 MAZE 135 1150 T=W(R,S+1) MAZE 136 IF (T.NE.0) GO TO 1180 MAZE 137 1160 X=RAN(S0,S1) MAZE 138 X=IFIX(X*2+1) MAZE 139 IF (X-2) 1430,1600,1180 MAZE 140 1180 GO TO 1430 MAZE 141 1190 IF (R.EQ.H) GO TO 1290 MAZE 142 T=W(R+1,S) MAZE 143 IF (T.NE.0) GO TO 1290 MAZE 144 IF (S.NE.V1) GO TO 1250 MAZE 145 IF (Z.EQ.1) GO TO 1280 MAZE 146 Q=1 MAZE 147 GO TO 1260 MAZE 148 1250 T=W(R,S+1) MAZE 149 IF (T.NE.0) GO TO 1280 MAZE 150 1260 X=RAN(S0,S1) MAZE 151 X=IFIX(X*2+1) MAZE 152 1270 IF (X-2) 1500,1600,1280 MAZE 153 1280 GO TO 1500 MAZE 154 1290 IF (S.NE.V1) GO TO 1330 MAZE 155 IF (Z.EQ.1) GO TO 1350 MAZE 156 Q=1 MAZE 157 GO TO 1340 MAZE 158 1330 T=W(R,S+1) MAZE 159 IF (T.NE.0) GO TO 1350 MAZE 160 1340 GO TO 1600 MAZE 161 1350 GO TO 1800 MAZE 162 1360 W(R-1,S)=C MAZE 163 C=C+1 MAZE 164 V(R-1,S)=2 MAZE 165 R=R-1 MAZE 166 IF (C.EQ.H*V1+1) GO TO 1810 MAZE 167 Q=0 MAZE 168 GO TO 620 MAZE 169 1430 W(R,S-1)=C MAZE 170 C=C+1 MAZE 171 V(R,S-1)=1 MAZE 172 S=S-1 MAZE 173 IF (C.EQ.H*V1+1) GO TO 1810 MAZE 174 Q=0 MAZE 175 GO TO 620 MAZE 176 1500 W(R+1,S)=C MAZE 177 C=C+1 MAZE 178 T=V(R,S) MAZE 179 IF (T.EQ.0) GO TO 1550 MAZE 180 V(R,S)=3 MAZE 181 GO TO 1560 MAZE 182 1550 V(R,S)=2 MAZE 183 1560 R=R+1 MAZE 184 IF (C.EQ.H*V1+1) GO TO 1810 MAZE 185 Q=0 MAZE 186 GO TO 980 MAZE 187 1600 IF (Q.EQ.1) GO TO 1700 MAZE 188 W(R,S+1)=C MAZE 189 C=C+1 MAZE 190 T=V(R,S) MAZE 191 IF (T.EQ.0) GO TO 1660 MAZE 192 V(R,S)=3 MAZE 193 GO TO 1670 MAZE 194 1660 V(R,S)=1 MAZE 195 1670 S=S+1 MAZE 196 IF (C.EQ.H*V1+1) GO TO 1810 MAZE 197 GO TO 620 MAZE 198 1700 Z=1 MAZE 199 T=V(R,S) MAZE 200 IF (T.EQ.0) GO TO 1750 MAZE 201 V(R,S)=3 MAZE 202 Q=0 MAZE 203 GO TO 1800 MAZE 204 1750 V(R,S)=1 MAZE 205 Q=0 MAZE 206 R=1 MAZE 207 S=1 MAZE 208 GO TO 610 MAZE 209 1800 GO TO 520 MAZE 210 C OUTPUT AREA MAZE 211 1810 DO 2190 J=1,J9 MAZE 212 TEMP(1)=RI MAZE 213 ICOUNT=2 MAZE 214 DO 1970 I=1,I9 MAZE 215 T=V(I,J) MAZE 216 IF (T.LT.2) GO TO 1930 MAZE 217 TEMP(ICOUNT)=R3B MAZE 218 ICOUNT=ICOUNT+1 MAZE 219 GO TO 1970 MAZE 220 1930 TEMP(ICOUNT)=R2BI MAZE 221 ICOUNT=ICOUNT+1 MAZE 222 1970 CONTINUE MAZE 223 WRITE (7,4) (TEMP(I1),I1=1,41) MAZE 224 4 FORMAT (1X,1A1,40A3) MAZE 225 CALL CLEAR(TEMP) MAZE 226 ICOUNT=1 MAZE 227 2020 DO 2140 I=1,I9 MAZE 228 T=V(I,J) MAZE 229 IF (T.EQ.0) GO TO 2100 MAZE 230 IF (T.EQ.2) GO TO 2100 MAZE 231 2080 TEMP(ICOUNT)=RI2B MAZE 232 ICOUNT=ICOUNT+1 MAZE 233 GO TO 2140 MAZE 234 2100 TEMP(ICOUNT)=RI2D MAZE 235 ICOUNT=ICOUNT+1 MAZE 236 2140 CONTINUE MAZE 237 TEMP(ICOUNT)=RI MAZE 238 WRITE (7,5) (TEMP(I1),I1=1,41) MAZE 239 5 FORMAT (1X,41A3) MAZE 240 CALL CLEAR(TEMP) MAZE 241 2190 CONTINUE MAZE 242 END MAZE 243 SUBROUTINE CLEAR(TEMP) MAZE 245 C SUBROUTINE TO CLEAR OUTPUT ARRAY MAZE 246 DIMENSION TEMP(41) MAZE 247 DATA R3B/' '/ MAZE 248 DO 1 I=1,41 MAZE 249 1 TEMP(I)=R3B MAZE 250 RETURN MAZE 251 END MAZE 252