home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
RUN Flagazine Extra: The Best Of RUN 1-12
/
thebest.zip
/
3DMAZE.BAS
next >
Wrap
BASIC Source File
|
1994-10-01
|
3KB
|
44 lines
100 REM DRIE-D DOOLHOF GWBASIC CGA/EGA (C) MICHIEL DE BONDT
110 CLS : SCREEN 0: KEY OFF: RANDOMIZE TIMER: DEF SEG = 0: POKE 1047, PEEK(1047) OR 32
111 LOCATE 14, 2: PRINT "Type in het doolhof op <o> voor overzicht....!!!"
112 LOCATE 15, 2: PRINT "Gebruik in het doolhof de pijltjes op het numerieke toetsenbord!"
120 LOCATE 16, 2: INPUT "Geef (gescheiden door een komma) breedte, diepte voor dit doolhof (b.v. 20,20)"; X, Y
130 XD = 2 * X + 2: YD = 2 * Y + 2: D = -YD * (YD > XD) - XD * (XD >= YD): DIM D%(D, D): SCREEN 2: AH = .31
140 WINDOW (.3, .3)-(-.3, -.3): LOCATE 1, 27: PRINT "Het doolhof wordt gemaakt..."
150 W$(0) = "Noord": W$(1) = "Oost ": W$(2) = "Zuid ": W$(3) = "West "
160 A = INT(XD / 2) AND -2: D%(A, 0) = 16: D%(A, 1) = 1: D%(A, YD - 1) = 1: D%(A, YD) = 16
170 FOR X = 1 TO XD - 1 STEP 2: D%(X, 2) = 2 * (X > A) + 1: NEXT
180 FOR Y = YD - 2 TO 4 STEP -2: PRINT "*"; : FOR X = 2 TO XD - 2 STEP 2
190 A = (INT(RND + .3) OR -(Y = YD - 2)) * (X < XD - 2) * D%(X + 1, 2): IF A THEN D%(X + 1, 2) = -D%(X + 1, 2)
200 C = A = -1 OR B = 1 OR -D%(X, Y + 1): R = (INT(RND * (3 + C)) * 2 - 1) MOD 3
210 IF R AND D%(X + R, 2) = R THEN D%(X + R, Y) = 1 ELSE D%(X, Y + 1 + 2 * C) = 1
220 D%(X, Y) = 1: B = A: NEXT X, Y: FOR X = 2 TO XD - 2: D%(X, 2) = 1: NEXT: D%(1, 2) = 0: D%(XD - 1, 2) = 0
230 FOR Y = 0 TO YD: PRINT "*"; : FOR X = 2 TO XD - 2: A = D%(X, Y) AND 17: IF A = 0 THEN 250
240 SWAP X, Y: X = D - X: FOR K = 1 TO 3: A = A * 2: D%(X, Y) = D%(X, Y) + A: SWAP X, Y: X = D - X: NEXT
250 NEXT X, Y: X = INT(XD / 2) AND -2: Y = 1
260 I$ = INKEY$: I = VAL(I$): IF I$ > "" THEN 360
270 CLS : LOCATE 25, 38: PRINT W$(W); : FOR S = -1 TO 1 STEP 2: T = Y: A = 2
280 IF (D%(X + S, T) AND 2 ^ W) = 0 AND (D%(X, T) AND 2 ^ W) THEN 320
290 B = ABS(T - Y) + 3: IF A = B THEN 320 ELSE FOR H = -1 TO 1 STEP 2
300 LINE (S / (A - 1), H / A)-(S / A, H / A): LINE (S / A, H / A)-(S / B, H / B): NEXT
310 LINE (S / A, 1 / A)-(S / A, -1 / A): LINE (S / B, 1 / B)-(S / B, -1 / B): A = B + 1
320 C = (D%(X, T) AND 2 ^ W * 17) / 2 ^ W: IF C AND 1 THEN T = T + 1: GOTO 280
330 FOR H = -1 TO 1 STEP 2: P = H = (C > 15): Q = -P * S / (B + 9)
340 LINE (S / (A - 1), H / B)-(Q, H / B * (P + 1) - Q * S): NEXT H, S
350 I$ = INKEY$: I = VAL(I$): IF I$ = "" THEN 350
360 IF I$ = "O" OR I$ = "o" THEN GOSUB 410: GOTO 260 ELSE IF I = 0 THEN 260
370 K = ((I - 1) MOD 3) - 1: L = CINT((I - 5) / 3): IF D%(X, Y + L) AND 2 ^ W * 17 THEN Y = Y + L
380 Y = Y + (ABS(K) AND Y): IF D%(X, Y) AND 2 ^ W * 16 THEN 460 ELSE IF K = 0 THEN 400
390 W = (W + K + 4) MOD 4: SWAP X, Y: IF K = 1 THEN X = D - X ELSE Y = D - Y
400 GOTO 260
410 WINDOW (1, 1)-(D, D): CLS : PAINT (D, D): FOR YT = 1 TO YD - 1: FOR XT = 2 TO XD - 2
420 IF D%(XT, YT) AND 1 THEN LINE (XT, YT)-(XT + 1, YT + 1), 0, B: PAINT (XT + .5, YT + .5), 0
430 NEXT XT, YT: XV = X: YV = Y: FOR K = 1 TO W: SWAP XV, YV: YV = D - YV: NEXT
440 CIRCLE (XV + .5, YV + .5), .4, , , , AH: PAINT (XV + .5, YV + .5)
450 IF INKEY$ = "" THEN 450 ELSE WINDOW (-.3, -.3)-(.3, .3): RETURN
460 IF Y = YD AND W = 0 OR Y = 0 AND W = 2 THEN Y = Y - 1 + W: GOTO 480 ELSE Y = Y + 1 - W
470 LOCATE 14, 17: PRINT "Dit is de INgang. Je moet naar de UITgang.": GOTO 350
480 LOCATE 14, 22: PRINT "Je hebt de uitgang gevonden! Proficiat!"
490 IF INKEY$ = "" THEN 490 ELSE GOSUB 410: DEF SEG : SCREEN 0