home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 069.MAZERUN.BAS < prev    next >
BASIC Source File  |  1979-12-31  |  4KB  |  117 lines

  1. 100 '
  2. 110 'MazeRun by Randy Hawkins
  3. 120 'for ONE THOUSAND Magazine
  4. 130 '
  5. 132 COMMON RH: IF RH = 0 THEN SYSTEM
  6. 134 CLEAR: KEY (17) ON: KEY 17, CHR$(0) + CHR$(1)
  7. 136 ON KEY (17) GOSUB 1020
  8. 140 SCREEN 0: WIDTH 80: COLOR 14,0,0
  9. 150 DIM X(300), Y(300), M$(5)
  10. 160 '
  11. 170 'Prepare Screen Border
  12. 180 '
  13. 190 CLS: LOCATE 2,2,0: PRINT STRING$(77,219)
  14. 200 FOR A = 3 TO 23: LOCATE A,2: PRINT CHR$(219)
  15. 210 LOCATE A,78: PRINT CHR$(219): NEXT
  16. 220 LOCATE 24,2: PRINT STRING$(77,219);
  17. 230 '
  18. 240 'Start at Center Spot, Search for Blank
  19. 250 '
  20. 260 X = 14: Y = 40: LOCATE X,Y: PRINT CHR$(219);
  21. 270 X(0) = X: Y(0) = Y: K = 1: RANDOMIZE TIMER
  22. 280 IF SCREEN(X,Y+2) <> 219 THEN 370
  23. 290 IF SCREEN(X,Y-2) <> 219 THEN 370
  24. 300 IF SCREEN(X+2,Y) <> 219 THEN 370
  25. 310 IF SCREEN(X-2,Y) <> 219 THEN 370
  26. 320 K = K - 1: X = X(K): Y = Y(K)
  27. 330 IF K THEN 280 ELSE 530
  28. 340 '
  29. 350 'Move from Current in Random Direction
  30. 360 '
  31. 370 ON INT(RND*4)+1 GOTO 380,390,400,410
  32. 380 DX = -1: DY = 0: GOTO 420
  33. 390 DX = +1: DY = 0: GOTO 420
  34. 400 DX = 0: DY = -1: GOTO 420
  35. 410 DX = 0: DY = +1: GOTO 420
  36. 420 IF SCREEN(X+DX*2,Y+DY*2) = 219 THEN 370
  37. 430 '
  38. 440 'Draw Line from Current to Clear Spot
  39. 450 '
  40. 460 X = X + DX: Y = Y + DY: LOCATE X,Y: PRINT CHR$(219);
  41. 470 X = X + DX: Y = Y + DY: LOCATE X,Y: PRINT CHR$(219);
  42. 480 X(K) = X: Y(K) = Y: IF (K AND 7) = 0 THEN SOUND K*10,.1
  43. 490 K = K + 1: GOTO 280
  44. 500 '
  45. 510 'Scatter Targets Across Board
  46. 520 '
  47. 530 T$ = "MazeRun": L = LEN(T$): FOR A = 1 TO L
  48. 540 X = 3 + RND(1) * 21: Y = 3 + RND(1) * 74
  49. 550 IF SCREEN(X,Y) = 219 THEN 540
  50. 560 LOCATE X,Y: COLOR 11: PRINT MID$(T$,A,1);: NEXT A
  51. 570 COLOR 8: FOR A = 1 TO L: LOCATE 1, 2*A
  52. 580 PRINT MID$(T$,A,1);: NEXT A: LOCATE 1, 62
  53. 590 COLOR 15: PRINT "Time: 000 seconds"
  54. 600 '
  55. 610 'Initialize Position and Clock
  56. 620 '
  57. 630 PCOPY 0,1: K$ = CHR$(0) + "H" + CHR$(0) + "K"
  58. 640 K$ = K$ + CHR$(0) + "P" + CHR$(0) + "M": GOSUB 1200
  59. 650 M$(1) = "": M$(2) = "Begin When"
  60. 660 M$(3) = "the Rising": M$(4) = "Tone Stops"
  61. 670 M$(5) = "": GOSUB 1100: FOR A = 100 TO 800
  62. 680 SOUND A,.1: NEXT A: PCOPY 1,0: X = 13: Y = 39
  63. 690 DX = 0: DY = 0: T = TIMER: L = LEN(T$): GOTO 900
  64. 700 '
  65. 710 'Check Keyboard and Move
  66. 720 '
  67. 730 DEF SEG = 0: POKE 1050, PEEK(1052)
  68. 740 LOCATE 1,68: PRINT USING "###"; TIMER-T;
  69. 750 IF TIMER - T > 998 THEN 950
  70. 760 I$ = INKEY$: IF I$ = "" THEN 740
  71. 770 A = INSTR(K$,I$): IF A = 0 THEN 730
  72. 780 IF A = 1 THEN DX = -1: DY = 0
  73. 790 IF A = 3 THEN DX = 0: DY = -1
  74. 800 IF A = 5 THEN DX = +1: DY = 0
  75. 810 IF A = 7 THEN DX = 0: DY = +1
  76. 820 IF SCREEN(X+DX,Y+DY) = 219 THEN 730
  77. 830 IF SCREEN(X+DX,Y+DY) = 32 THEN 890
  78. 840 '
  79. 850 'Ran Over Letter, Move It Up Top
  80. 860 '
  81. 870 A$ = CHR$(SCREEN(X+DX,Y+DY)): LOCATE 1,2*INSTR(T$,A$)
  82. 880 COLOR 11,0: PRINT A$;: SOUND 1000,1: L = L - 1
  83. 890 LOCATE X,Y: COLOR 11,0: PRINT CHR$(32);
  84. 900 X = X + DX: Y = Y + DY: LOCATE X,Y: COLOR 20,7
  85. 910 PRINT CHR$(120);: COLOR 15,0: IF L THEN 730
  86. 920 '
  87. 930 'Game Over, Announce Score
  88. 940 '
  89. 950 M$(1) = "Great! You finished": M$(2) = "in only"
  90. 960 M$(2) = M$(2) + STR$(INT(TIMER-T+.5)) + " seconds!"
  91. 970 M$(3) = "": M$(4) = "Want to try this"
  92. 980 M$(5) = "maze again (Y or N)?": GOSUB 1100
  93. 990 DEF SEG = 0: POKE 1050, PEEK(1052)
  94. 1000 A$ = INKEY$: IF A$ = "Y" OR A$ = "y" THEN 650
  95. 1010 IF A$ <> "N" AND A$ <> "n" THEN 1000
  96. 1020 M$(1) = "": M$(2) = "Would you like"
  97. 1030 M$(3) = "to try a new": M$(4) = "maze (Y or N)?"
  98. 1040 M$(5) = "": GOSUB 1100: POKE 1050, PEEK(1052)
  99. 1050 A$ = INKEY$: IF A$ = "Y" OR A$ = "y" THEN 134
  100. 1060 IF A$ = "N" OR A$ = "n" THEN 1065 ELSE 1050
  101. 1065 CLS: LOCATE 12,30: PRINT "One Moment Please...": RUN "menu"
  102. 1070 '
  103. 1080 'Display Message in a Box
  104. 1090 '
  105. 1100 COLOR 0,7: FOR A=11 TO 15: LOCATE A,29
  106. 1110 PRINT STRING$(23,32);: LOCATE A,40-LEN(M$(A-10))/2
  107. 1120 PRINT M$(A-10);: NEXT A: COLOR 14,0: RETURN
  108. 1200 M$(1) = "": M$(2) = "Are you using": M$(3) = "Tandy's Enhanced"
  109. 1210 M$(4) = "Keyboard (Y or N)?": M$(5) = "": GOSUB 1100: A$ = INKEY$
  110. 1220 A$ = INKEY$: IF A$ = "N" OR A$ = "n" THEN RETURN
  111. 1230 IF A$ <> "Y" AND A$ <> "y" THEN 1220 ELSE K$ = CHR$(0) + "G"
  112. 1240 K$ = K$ + CHR$(0) + "S" + CHR$(0) + "O" + CHR$(0) + "Q"
  113. 1250 M$(1) = "On your keyboard,": M$(2) = "HOME = move up"
  114. 1260 M$(3) = "DELETE = move left": M$(4) = "END = move down"
  115. 1270 M$(5) = "PAGE UP = move right": GOSUB 1100: T = TIMER
  116. 1280 WHILE T > TIMER - 5: WEND: RETURN
  117.