home *** CD-ROM | disk | FTP | other *** search
/ RUN Flagazine Extra: The Best Of RUN 1-12 / thebest.zip / 3DMAZE.BAS next >
BASIC Source File  |  1994-10-01  |  3KB  |  44 lines

  1. 100 REM DRIE-D DOOLHOF GWBASIC CGA/EGA (C) MICHIEL DE BONDT
  2. 110 CLS : SCREEN 0: KEY OFF: RANDOMIZE TIMER: DEF SEG = 0: POKE 1047, PEEK(1047) OR 32
  3. 111 LOCATE 14, 2: PRINT "Type in het doolhof op <o> voor overzicht....!!!"
  4. 112 LOCATE 15, 2: PRINT "Gebruik in het doolhof de pijltjes op het numerieke toetsenbord!"
  5. 120 LOCATE 16, 2: INPUT "Geef (gescheiden door een komma) breedte, diepte voor dit doolhof (b.v. 20,20)"; X, Y
  6. 130 XD = 2 * X + 2: YD = 2 * Y + 2: D = -YD * (YD > XD) - XD * (XD >= YD): DIM D%(D, D): SCREEN 2: AH = .31
  7. 140 WINDOW (.3, .3)-(-.3, -.3): LOCATE 1, 27: PRINT "Het doolhof wordt gemaakt..."
  8. 150 W$(0) = "Noord": W$(1) = "Oost ": W$(2) = "Zuid ": W$(3) = "West "
  9. 160 A = INT(XD / 2) AND -2: D%(A, 0) = 16: D%(A, 1) = 1: D%(A, YD - 1) = 1: D%(A, YD) = 16
  10. 170 FOR X = 1 TO XD - 1 STEP 2: D%(X, 2) = 2 * (X > A) + 1: NEXT
  11. 180 FOR Y = YD - 2 TO 4 STEP -2: PRINT "*"; : FOR X = 2 TO XD - 2 STEP 2
  12. 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)
  13. 200 C = A = -1 OR B = 1 OR -D%(X, Y + 1): R = (INT(RND * (3 + C)) * 2 - 1) MOD 3
  14. 210 IF R AND D%(X + R, 2) = R THEN D%(X + R, Y) = 1 ELSE D%(X, Y + 1 + 2 * C) = 1
  15. 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
  16. 230 FOR Y = 0 TO YD: PRINT "*"; : FOR X = 2 TO XD - 2: A = D%(X, Y) AND 17: IF A = 0 THEN 250
  17. 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
  18. 250 NEXT X, Y: X = INT(XD / 2) AND -2: Y = 1
  19. 260 I$ = INKEY$: I = VAL(I$): IF I$ > "" THEN 360
  20. 270 CLS : LOCATE 25, 38: PRINT W$(W); : FOR S = -1 TO 1 STEP 2: T = Y: A = 2
  21. 280 IF (D%(X + S, T) AND 2 ^ W) = 0 AND (D%(X, T) AND 2 ^ W) THEN 320
  22. 290 B = ABS(T - Y) + 3: IF A = B THEN 320 ELSE FOR H = -1 TO 1 STEP 2
  23. 300 LINE (S / (A - 1), H / A)-(S / A, H / A): LINE (S / A, H / A)-(S / B, H / B): NEXT
  24. 310 LINE (S / A, 1 / A)-(S / A, -1 / A): LINE (S / B, 1 / B)-(S / B, -1 / B): A = B + 1
  25. 320 C = (D%(X, T) AND 2 ^ W * 17) / 2 ^ W: IF C AND 1 THEN T = T + 1: GOTO 280
  26. 330 FOR H = -1 TO 1 STEP 2: P = H = (C > 15): Q = -P * S / (B + 9)
  27. 340 LINE (S / (A - 1), H / B)-(Q, H / B * (P + 1) - Q * S): NEXT H, S
  28. 350 I$ = INKEY$: I = VAL(I$): IF I$ = "" THEN 350
  29. 360 IF I$ = "O" OR I$ = "o" THEN GOSUB 410: GOTO 260 ELSE IF I = 0 THEN 260
  30. 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
  31. 380 Y = Y + (ABS(K) AND Y): IF D%(X, Y) AND 2 ^ W * 16 THEN 460 ELSE IF K = 0 THEN 400
  32. 390 W = (W + K + 4) MOD 4: SWAP X, Y: IF K = 1 THEN X = D - X ELSE Y = D - Y
  33. 400 GOTO 260
  34. 410 WINDOW (1, 1)-(D, D): CLS : PAINT (D, D): FOR YT = 1 TO YD - 1: FOR XT = 2 TO XD - 2
  35. 420 IF D%(XT, YT) AND 1 THEN LINE (XT, YT)-(XT + 1, YT + 1), 0, B: PAINT (XT + .5, YT + .5), 0
  36. 430 NEXT XT, YT: XV = X: YV = Y: FOR K = 1 TO W: SWAP XV, YV: YV = D - YV: NEXT
  37. 440 CIRCLE (XV + .5, YV + .5), .4, , , , AH: PAINT (XV + .5, YV + .5)
  38. 450 IF INKEY$ = "" THEN 450 ELSE WINDOW (-.3, -.3)-(.3, .3): RETURN
  39. 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
  40. 470 LOCATE 14, 17: PRINT "Dit is de INgang. Je moet naar de UITgang.": GOTO 350
  41. 480 LOCATE 14, 22: PRINT "Je hebt de uitgang gevonden! Proficiat!"
  42. 490 IF INKEY$ = "" THEN 490 ELSE GOSUB 410: DEF SEG : SCREEN 0
  43.  
  44.