Maze generation: Difference between revisions

imported>Mike632t
No edit summary
imported>Mike632t
Line 3,060:
Link to live demo: http://dc25.github.io/mazeGenerationElm/
 
=={{header|FORTRAN}}==
==={{header|FORTRAN-IV}}===
Compiled using DEC Fortran V6.1.
<syntaxhighlight lang="fortran-66">
PROGRAM MAZE
 
C This program will display a random maze on the display.
 
INTEGER W(25,53),V(25,53),H,B,S,R,X,Z,Q,H1,C
INTEGER IX
REAL LINE(26)
DATA EDD, EBB, BBI, BBB /'!--', '! ', ' !', ' ' /
 
WRITE(*,97)
97 FORMAT('$','Enter a random seed ? ')
READ(*,101) IX
WRITE(*,103)
WRITE(*,99)
99 FORMAT('$','Enter number of rows ? ')
120 READ(*,101) B
IF ((B .GE. 5).AND.(B .LT. 54)) GOTO 95
WRITE(*,102)
GOTO 120
95 WRITE(*,103)
WRITE(*,100)
100 FORMAT('$','Enter number of columns ? ')
94 READ(*,101) H
101 FORMAT(I5)
IF ((H .GE. 5).AND.(H .LT. 26)) GOTO 150
WRITE(*,102)
102 FORMAT('$','Out of range - try again ? ')
GOTO 94
150 WRITE(*,103)
103 FORMAT(' ')
DO 10 I=1, 25
DO 10 J=1, 53
W(I,J)=0
V(I,J)=0
10 CONTINUE
Q = 0
Z = 0
H1 = H + 1
X = IFIX (RAN(IX) * H + 1)
DO 180 I=1, H
IF (I .EQ. X) GOTO 173
LINE(I) = EDD
GOTO 180
173 LINE(I) = EBB
180 CONTINUE
LINE(H1) = EBB
WRITE(*,104) (LINE(I), I = 1, H1)
104 FORMAT(' ',2X,26A3)
C = 1
W(X, 1) = C
C = C + 1
R = X
S = 1
GOTO 260
210 IF (R .NE. H) GOTO 240
IF (S .NE. B) GOTO 230
R=1
S=1
GOTO 250
230 R=1
S=S+1
GOTO 250
240 R=R+1
250 IF (W(R,S) .EQ. 0 ) GOTO 210
260 IF (R-1 .EQ. 0 ) GOTO 530
IF (W(R-1,S) .NE. 0) GOTO 530
IF (S-1 .EQ. 0) GOTO 390
IF (W(R,S-1) .NE. 0) GOTO 390
IF (R .EQ. H) GOTO 330
IF (W(R+1,S) .NE. 0) GOTO 330
X=IFIX(RAN(IX)*3+1)
GOTO (790, 820, 860), X
330 IF (S .NE. B) GOTO 340
IF (Z .EQ. 1) GOTO 370
Q=1
GOTO 350
340 IF (W(R,S+1) .NE. 0) GOTO 370
350 X=IFIX(RAN(IX)*3+1)
IF (X .EQ. 1) GOTO 790
IF (X .EQ. 2) GOTO 820
IF (X .EQ. 3) GOTO 910
370 X=IFIX(RAN(IX)*2+1)
IF (X .EQ. 1) GOTO 790
IF (X .EQ. 2) GOTO 820
390 IF (R .EQ. H) GOTO 470
IF (W(R+1,S) .NE. 0) GOTO 470
IF (S .NE. B) GOTO 420
IF (Z .EQ. 1) GOTO 450
Q = 1
GOTO 430
420 IF (W(R,S+1) .NE. 0) GOTO 450
430 X = IFIX(RAN(IX)*3+1)
IF (X .EQ. 1) GOTO 790
IF (X .EQ. 2) GOTO 860
IF (X .EQ. 3) GOTO 910
450 X=IFIX(RAN(IX)*2+1)
IF (X .EQ. 1) GOTO 790
IF (X .EQ. 2) GOTO 860
470 IF (S .NE. B) GOTO 490
IF (Z .EQ. 1) GOTO 520
Q = 1
GOTO 500
490 IF (W(R,S+1) .NE. 0) GOTO 520
500 X=IFIX(RAN(IX)*2+1)
IF (X .EQ. 1) GOTO 790
IF (X .EQ. 2) GOTO 910
520 GOTO 790
530 IF (S-1 .EQ. 0) GOTO 670
IF (W(R,S-1) .NE. 0) GOTO 670
IF (R .EQ. H) GOTO 610
IF (W(R+1,S) .NE. 0) GOTO 610
IF (S .NE. B) GOTO 560
IF (Z .EQ. 1) GOTO 590
Q=1
GOTO 570
560 IF (W(R,S+1) .NE. 0) GOTO 590
570 X=IFIX(RAN(IX)*3+1)
IF (X .EQ. 1) GOTO 820
IF (X .EQ. 2) GOTO 860
IF (X .EQ. 3) GOTO 910
590 X=IFIX(RAN(IX)*2+1)
IF (X .EQ. 1) GOTO 820
IF (X .EQ. 2) GOTO 860
610 IF (S .NE. B) GOTO 630
IF (Z .EQ. 1) GOTO 660
Q=1
GOTO 640
630 IF (W(R,S+1) .NE. 0) GOTO 660
640 X=IFIX(RAN(IX)*2+1)
IF (X .EQ. 1) GOTO 820
IF (X .EQ. 2) GOTO 910
660 GOTO 820
670 IF (R .EQ. H) GOTO 740
IF (W(R+1,S) .NE. 0) GOTO 740
IF (S .NE. B) GOTO 700
IF (Z .EQ. 1) GOTO 730
Q=1
GOTO 830
700 IF (W(R,S+1) .NE. 0) GOTO 730
X=IFIX(RAN(IX)*2+1)
IF (X .EQ. 1) GOTO 860
IF (X .EQ. 2) GOTO 910
730 GOTO 860
740 IF (S .NE. B) GOTO 760
IF (Z .EQ. 1) GOTO 780
Q=1
GOTO 770
760 IF (W(R,S+1) .NE. 0) GOTO 780
770 GOTO 910
780 GOTO 1000
790 W(R-1,S)=C
C=C+1
V(R-1,S)=2
R=R-1
IF (C .EQ. H*B+1) GOTO 1010
Q=0
GOTO 260
820 W(R,S-1)=C
830 C=C+1
V(R,S-1)=1
S=S-1
IF (C .EQ. H*B+1) GOTO 1010
Q=0
GOTO 260
860 W(R+1,S)=C
C=C+1
IF (V(R,S) .EQ. 0) GOTO 880
V(R,S)=3
GOTO 890
880 V(R,S)=2
890 R=R+1
IF (C .EQ. H*B+1) GOTO 1010
GOTO 530
910 IF (Q .EQ. 1) GOTO 960
W(R,S+1)=C
C=C+1
IF (V(R,S) .EQ. 0) GOTO 940
V(R,S)=3
GOTO 950
940 V(R,S)=1
950 S=S+1
IF (C .EQ. H*B+1) GOTO 1010
GOTO 260
960 Z=1
IF (V(R,S) .EQ. 0) GOTO 980
V(R,S)=3
Q=0
GOTO 1000
980 V(R,S)=1
Q=0
R=1
S=1
GOTO 250
1000 GOTO 210
1010 DO 1073 J=1, B
LINE(1) = BBI
DO 1040 I=1, H
IF (V(I,J) .LT. 2) GOTO 1030
LINE(I+1) = BBB
GOTO 1040
1030 LINE(I+1) = BBI
1040 CONTINUE
WRITE(*, 106) (LINE(I), I=1, H1)
106 FORMAT (1X,26A3)
DO 1070 I=1, H
IF (V(I,J) .EQ. 0) GOTO 1060
IF (V(I,J) .EQ. 2) GOTO 1060
LINE(I) = EBB
GOTO 1070
1060 LINE(I) = EDD
1070 CONTINUE
LINE(H1) = EBB
WRITE(*,107) (LINE(I), I = 1, H1)
107 FORMAT (3X, 26A3)
1073 CONTINUE
 
END
</syntaxhighlight>
{{out}}
<pre style="height:35ex;overflow:scroll;">
Enter a random seed ? -23
 
Enter number of rows ? 10
 
Enter number of columns ? 23
 
!--!--!--!--!--!--!--!--!--!--!--!--!--!--!--!--!--!--!--!--!--!--! !
! ! ! ! ! !
! !--! ! ! ! !--!--!--!--!--!--! ! ! ! !--!--! ! !--!--!--!
! ! ! ! ! ! ! ! ! ! ! ! ! !
!--!--!--! ! !--! ! !--! ! ! ! ! !--! ! ! !--!--!--!--! !
! ! ! ! ! ! ! ! ! ! ! ! !
! !--! ! !--! ! ! ! !--! ! !--!--! !--!--!--! !--!--! ! !
! ! ! ! ! ! ! ! ! ! ! ! ! !
! ! !--! ! !--! !--!--! ! !--! ! ! !--!--! !--!--! !--!--!
! ! ! ! ! ! ! ! ! ! ! ! !
! !--!--!--! ! !--! ! !--!--! !--!--! ! !--! ! !--!--! ! !
! ! ! ! ! ! ! ! ! ! ! ! ! !
! ! ! !--!--!--! ! ! ! !--! !--! !--!--! ! ! ! ! !--!--!
! ! ! ! ! ! ! ! ! ! ! ! ! ! !
!--! !--! ! ! !--!--! !--! ! !--! ! ! !--! ! ! !--!--! !
! ! ! ! ! ! ! ! ! ! ! ! ! ! !
! !--! !--!--! ! ! !--! !--!--! ! !--!--! !--!--! !--! ! !
! ! ! ! ! ! ! ! ! ! ! ! !
! ! ! ! ! !--! ! ! !--! ! ! !--!--!--! !--! !--!--!--! !
! ! ! ! ! ! ! ! !
!--!--!--!--!--!--!--!--!--!--!--!--! !--!--!--!--!--!--!--!--!--!--!
</pre>
==={{header|Microsoft FORTRAN-80}}===
As well as not having an intrinsic RND function, Microsoft Fortran-80 has some other minor differences to 'standard' Fortran-IV.
<syntaxhighlight lang="fortran66">
PROGRAM MAZE
 
C This program will display a random maze on the display.
 
INTEGER W(25,53),V(25,53),H,B,S,R,X,Z,Q,H1,C
REAL LINE(26)
DATA EDD, EBB, BBI, BBB /'|--', '| ', ' |', ' ' /
 
WRITE(1,98)
98 FORMAT ('1','Maze Generator')
WRITE (1,97)
97 FORMAT('0','Enter a random seed ? ')
READ (1,101) IX
WRITE(1,99)
99 FORMAT(' ','Enter number of rows ? ')
120 READ(1,101) B
IF ((B .GE. 5).AND.(B .LT. 54)) GO TO 95
WRITE (1,102)
GO TO 120
95 WRITE(1,100)
100 FORMAT(' ','Enter number of columns ? ')
94 READ(1,101) H
101 FORMAT(I5)
IF ((H .GE. 5).AND.(H .LT. 26)) GO TO 150
WRITE(1,102)
102 FORMAT(' ','Out of range - try again ? ')
GO TO 94
150 WRITE(1,103)
103 FORMAT(' ')
DO 10 I=1, 25
DO 10 J=1, 53
W(I,J)=0
V(I,J)=0
10 CONTINUE
Q = 0
Z = 0
H1 = H + 1
X = IFIX (RND(IX) * H + 1)
DO 180 I=1, H
IF (I .EQ. X) GO TO 173
LINE(I) = EDD
GO TO 180
173 LINE(I) = EBB
180 CONTINUE
LINE(H1) = EBB
WRITE (1,104) (LINE(I), I = 1, H1)
104 FORMAT('1',2X,26A3)
C = 1
W(X, 1) = C
C = C + 1
R = X
S = 1
GO TO 260
210 IF (R .NE. H) GO TO 240
IF (S .NE. B) GO TO 230
R=1
S=1
GO TO 250
230 R=1
S=S+1
GOTO 250
240 R=R+1
250 IF (W(R,S) .EQ. 0 ) GO TO 210
260 IF (R-1 .EQ. 0 ) GO TO 530
IF (W(R-1,S) .NE. 0) GO TO 530
IF (S-1 .EQ. 0) GO TO 390
IF (W(R,S-1) .NE. 0) GO TO 390
IF (R .EQ. H) GO TO 330
IF (W(R+1,S) .NE. 0) GO TO 330
X=IFIX(RND(IX)*3+1)
GO TO (790, 820, 860), X
330 IF (S .NE. B) GO TO 340
IF (Z .EQ. 1) GO TO 370
Q=1
GOTO 350
340 IF (W(R,S+1) .NE. 0) GO TO 370
350 X=IFIX(RND(IX)*3+1)
IF (X .EQ. 1) GO TO 790
IF (X .EQ. 2) GO TO 820
IF (X .EQ. 3) GO TO 910
370 X=IFIX(RND(IX)*2+1)
IF (X .EQ. 1) GO TO 790
IF (X .EQ. 2) GO TO 820
390 IF (R .EQ. H) GO TO 470
IF (W(R+1,S) .NE. 0) GO TO 470
IF (S .NE. B) GO TO 420
IF (Z .EQ. 1) GO TO 450
Q = 1
GOTO 430
420 IF (W(R,S+1) .NE. 0) GO TO 450
430 X = IFIX(RND(IX)*3+1)
IF (X .EQ. 1) GO TO 790
IF (X .EQ. 2) GO TO 860
IF (X .EQ. 3) GO TO 910
450 X=IFIX(RND(IX)*2+1)
IF (X .EQ. 1) GO TO 790
IF (X .EQ. 2) GO TO 860
470 IF (S .NE. B) GO TO 490
IF (Z .EQ. 1) GO TO 520
Q = 1
GOTO 500
490 IF (W(R,S+1) .NE. 0) GO TO 520
500 X=IFIX(RND(IX)*2+1)
IF (X .EQ. 1) GO TO 790
IF (X .EQ. 2) GO TO 910
520 GOTO 790
530 IF (S-1 .EQ. 0) GO TO 670
IF (W(R,S-1) .NE. 0) GO TO 670
IF (R .EQ. H) GO TO 610
IF (W(R+1,S) .NE. 0) GO TO 610
IF (S .NE. B) GO TO 560
IF (Z .EQ. 1) GO TO 590
Q=1
GOTO 570
560 IF (W(R,S+1) .NE. 0) GO TO 590
570 X=IFIX(RND(IX)*3+1)
IF (X .EQ. 1) GO TO 820
IF (X .EQ. 2) GO TO 860
IF (X .EQ. 3) GO TO 910
590 X=IFIX(RND(IX)*2+1)
IF (X .EQ. 1) GO TO 820
IF (X .EQ. 2) GO TO 860
610 IF (S .NE. B) GO TO 630
IF (Z .EQ. 1) GO TO 660
Q=1
GOTO 640
630 IF (W(R,S+1) .NE. 0) GO TO 660
640 X=IFIX(RND(IX)*2+1)
IF (X .EQ. 1) GO TO 820
IF (X .EQ. 2) GO TO 910
660 GOTO 820
670 IF (R .EQ. H) GO TO 740
IF (W(R+1,S) .NE. 0) GO TO 740
IF (S .NE. B) GO TO 700
IF (Z .EQ. 1) GO TO 730
Q=1
GOTO 830
700 IF (W(R,S+1) .NE. 0) GO TO 730
X=IFIX(RND(IX)*2+1)
IF (X .EQ. 1) GO TO 860
IF (X .EQ. 2) GO TO 910
730 GOTO 860
740 IF (S .NE. B) GO TO 760
IF (Z .EQ. 1) GO TO 780
Q=1
GOTO 770
760 IF (W(R,S+1) .NE. 0) GO TO 780
770 GOTO 910
780 GOTO 1000
790 W(R-1,S)=C
C=C+1
V(R-1,S)=2
R=R-1
IF (C .EQ. H*B+1) GO TO 1010
Q=0
GOTO 260
820 W(R,S-1)=C
830 C=C+1
V(R,S-1)=1
S=S-1
IF (C .EQ. H*B+1) GO TO 1010
Q=0
GOTO 260
860 W(R+1,S)=C
C=C+1
IF (V(R,S) .EQ. 0) GO TO 880
V(R,S)=3
GOTO 890
880 V(R,S)=2
890 R=R+1
IF (C .EQ. H*B+1) GO TO 1010
GOTO 530
910 IF (Q .EQ. 1) GO TO 960
W(R,S+1)=C
C=C+1
IF (V(R,S) .EQ. 0) GO TO 940
V(R,S)=3
GOTO 950
940 V(R,S)=1
950 S=S+1
IF (C .EQ. H*B+1) GO TO 1010
GOTO 260
960 Z=1
IF (V(R,S) .EQ. 0) GO TO 980
V(R,S)=3
Q=0
GOTO 1000
980 V(R,S)=1
Q=0
R=1
S=1
GOTO 250
1000 GOTO 210
1010 DO 1073 J=1, B
LINE(1) = BBI
DO 1040 I=1, H
IF (V(I,J) .LT. 2) GO TO 1030
LINE(I+1) = BBB
GOTO 1040
1030 LINE(I+1) = BBI
1040 CONTINUE
WRITE(1, 106) (LINE(I), I=1, H1)
106 FORMAT (1X,26A3)
DO 1070 I=1, H
IF (V(I,J) .EQ. 0) GO TO 1060
IF (V(I,J) .EQ. 2) GO TO 1060
LINE(I) = EBB
GOTO 1070
1060 LINE(I) = EDD
1070 CONTINUE
LINE(H1) = EBB
WRITE (1,107) (LINE(I), I = 1, H1)
107 FORMAT (3X, 26A3)
1073 CONTINUE
 
END
 
 
FUNCTION RND(IY)
 
C This function returns a psudo random real number between 0 and 1.
 
IY = IY*899
IF (IY .LT. 0) IY = IY + 32767 + 1
RND=FLOAT(IY)/32767.
RETURN
 
END
</syntaxhighlight>
{{out}}
<pre style="height:35ex;overflow:scroll;">
Enter a random seed ? -23
 
Enter number of rows ? 10
 
Enter number of columns ? 23
 
|--|--|--|--|--|--|--|--| |--|--|--|--|--|--|--|--|--|--|--|--|--|--|
| | | | | | | |
| |--| |--|--| |--| | | |--|--| |--|--|--|--| | |--| |--| |
| | | | | | | | | | |
| |--|--| | |--|--| | |--| | |--|--| |--|--|--|--| |--| |--|
| | | | | | | | | |
| |--|--| |--|--|--|--|--|--|--|--|--| |--|--|--| | | | |--| |
| | | | | | |
|--|--| | |--|--|--|--|--|--| |--| | |--|--|--|--|--|--|--|--|--|
| | | | | | | | |
| |--|--| | |--|--| |--| | |--| | |--|--| |--|--|--| |--| |
| | | | | | | | | | |
|--|--| | |--| | |--|--|--|--| | |--|--| |--| | |--|--|--|--|
| | | | | | | | | | | |
| | | | | |--| |--| | | | |--|--|--|--| | |--|--|--|--| |
| | | | | | | | | | | | | |
| | | |--|--| | |--|--| | |--|--|--| | |--|--| | | | |--|
| | | | | | | | | | | | |
| |--|--| |--| |--|--| | | | |--|--|--| | | |--|--|--|--| |
| | | | | | |
|--|--|--|--|--|--|--|--|--|--| |--|--|--|--|--|--|--|--|--|--|--|--|
</pre>
=={{header|Emacs Lisp}}==
{{libheader|cl-lib}}
Anonymous user