home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / commodore-scene-files / Coverdisks / CDU / V3D07.D64 / maze.basic (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  2.4 KB  |  96 lines

  1. 10 REM BASIC MAZE PROGRAM
  2. 100 POKE 53280,0:POKE 53281,11
  3. 110 PRINT"[147][205]AZE [208]ROGRAM"
  4. 120 PRINT"[183][183][183][183][183][183][183][183][183][183][183][183]"
  5. 130 PRINT"[212]HIS IS A [194][193][211][201][195] EQUIVALENT OF THE"
  6. 140 PRINT"MACHINE CODE MAZE GENERATOR. [193]LTHOUGH"
  7. 150 PRINT" NOT IDENTICAL, IT USES A VERY SIMILAR"
  8. 160 PRINT" ALGORITHM AND METHOD OF STORING DATA."
  9. 170 PRINT"[196]IMENSIONS:"
  10. 180 PRINT"[205]AXIMUM: 18,10"
  11. 190 PRINT"[205]INIMUM: 1,1"
  12. 200 PRINT"[214]ISIBLE [195]HARACTERS 33-132, 161-255"
  13. 210 INPUT"[196]IMENSIONS:   18,10[157][157][157][157][157][157][157]";H,V
  14. 215 IF H<1 OR V<1 OR H>18 OR V>10 THEN PRINT"[196]IMENSIONS OUT OF RANGE !":GOTO 210
  15. 220 INPUT"[195]HARACTER:    255[157][157][157][157][157]";C
  16. 225 IF C<33 OR C>255 THEN PRINT" [212]RY A DIFFERENT CHARACTER.":GOTO 220
  17. 230 PRINT"[147][212]HIS WILL TAKE AROUND";INT(H*V/3+1);"SECONDS."
  18. 240 TI$="000000"
  19. 997 :
  20. 998 :
  21. 999 REM MAIN LOOP
  22. 1000 GOSUB 10000 : REM SETUP VARIABLES
  23. 1010 GOSUB 5000  : REM PRINT TIME
  24. 1020 IF DC>0 THEN GOSUB 2010
  25. 1030 M%(R,S)=M%(R,S) OR 4
  26. 1040 DC=T(RND(1)*T)
  27. 1050 IF T>0 THEN P=P+1:P%(P)=DC
  28. 1060 IF DC=1 THEN S=S-1:M%(R,S)=M%(R,S) OR 1:GOTO 1110
  29. 1070 IF DC=2 THEN M%(R,S)=M%(R,S) OR 1:S=S+1:GOTO 1110
  30. 1080 IF DC=3 THEN R=R-1:M%(R,S)=M%(R,S) OR 2:GOTO 1110
  31. 1090 IF DC=4 THEN M%(R,S)=M%(R,S) OR 2:R=R+1:GOTO 1110
  32. 1100 GOSUB 3010:GOTO 1120: REM DEADEND!
  33. 1110 M%(R,S)=M%(R,S) OR O
  34. 1120 IF P>0 THEN 1010
  35. 1130 GOSUB 4010: REM FINISHED, PRINT OUT     BOARD.
  36. 1140 POKE 198,0: REM CLEAR KEYBOARD
  37. 1150 GET K$:IF K$="" THEN 1150
  38. 1160 RUN
  39. 1999 :
  40. 2000 REM CHECK AVAILABLE DIRECTIONS
  41. 2010 T(0)=0:T=0
  42. 2020 IF S>0 THEN IF M%(R,S-1)=0 THEN T(T)=1:T=T+1
  43. 2030 IF S<V THEN IF M%(R,S+1)=0 THEN T(T)=2:T=T+1
  44. 2040 IF R>0 THEN IF M%(R-1,S)=0 THEN T(T)=3:T=T+1
  45. 2050 IF R<H THEN IF M%(R+1,S)=0 THEN T(T)=4:T=T+1
  46. 2060 RETURN
  47. 2999 :
  48. 3000 REM BACKTRACK THRU MAZE
  49. 3010 G=1
  50. 3020 Q=P%(P):GOSUB 5000 : REM REPEAT...
  51. 3030 IF Q=1 THEN S=S+1  : REM DOWN
  52. 3040 IF Q=2 THEN S=S-1  : REM UP
  53. 3050 IF Q=3 THEN R=R+1  : REM RIGHT
  54. 3060 IF Q=4 THEN R=R-1  :REM LEFT
  55. 3070 GOSUB 2010
  56. 3080 P=P-1:IF P=0 THEN G=0
  57. 3090 IF T>0 THEN G=0
  58. 3100 IF G THEN 3020     : REM UNTIL G=0
  59. 3110 RETURN
  60. 3999 :
  61. 4000 REM PRINT MAZE
  62. 4010 M%(H,V)=M%(H,V) OR 1
  63. 4020 PRINT"[147]":GOSUB 5000
  64. 4030 PRINTC$;" ";
  65. 4040 FOR I=1 TO H:PRINTC$;C$;:NEXT:PRINTC$
  66. 4050 FOR J=0 TO V
  67. 4060 PRINT C$;
  68. 4070 FOR I=0 TO H
  69. 4080 IF M%(I,J) AND 2 THEN PRINT"  ";:GOTO 4100
  70. 4090 PRINT" ";C$;
  71. 4100 NEXT I:PRINT
  72. 4110 FOR I=0 TO H
  73. 4120 IF M%(I,J) AND 1 THEN PRINTC$;" ";:GOTO 4140
  74. 4130 PRINTC$;C$;
  75. 4140 NEXT I:PRINT C$
  76. 4150 NEXT J
  77. 4160 RETURN
  78. 5000 PRINT"[212]IME:";TI$
  79. 5010 RETURN
  80. 10000 DIM P%((H+1)*(V+1)),M%(H,V),T%(3)
  81. 10010 DC=1:C$=CHR$(C)
  82. 10020 RETURN
  83. 20000 REM VARIABLES
  84. 20010 REM M%(H,V)-MAZE DATA
  85. 20020 REM P%(P)  -MAZE MOVEMENTS
  86. 20030 REM P      -POSITION IN P%(-)
  87. 20040 REM H,V    -HORIZ VERT DIMENSIONS
  88. 20050 REM R,S    -POSITION IN M%(-,-)
  89. 20060 REM I,J    -LOOP COUNTERS
  90. 20070 REM C$     -CHARACTER
  91. 20080 REM DC     -DIRECTION CHOSEN 1-4
  92. 20090 REM T      -NO. OF DIFFERENT
  93. 20100 REM                DIRECTIONS
  94. 20110 REM T(T)   -DIFFERENT DIRECTIONS
  95. 20120 REM         AVAILABLE
  96.