home *** CD-ROM | disk | FTP | other *** search
/ Aztec Shareware Collection / STRATEGY.ISO / trap / trap.bas < prev    next >
BASIC Source File  |  1993-08-22  |  9KB  |  179 lines

  1. 10 DEFINT A-Z: KEY OFF: SCREEN 0, 0, 0: PLAY "MB"
  2. 20 MM = 4: DIM LNAME$(20), LSCORE(20)
  3. 30 '
  4. 40 '---PRINT INSTRUCTIONS
  5. 50 '
  6. 60 COLOR 3, 0: PRINT "Welcome to TRAP Version 2 -- now in color"
  7. 70 PRINT "Would you like instructions?"; : GOSUB 1660
  8. 80 IF A$ = "N" THEN 320
  9. 90 PRINT : PRINT "You ("; : COLOR 2, 0: PRINT "@"; : COLOR 3, 0: PRINT ") can move in eight directions using the cursor pad."
  10. 100 PRINT "As you move you turn the doors ("; : COLOR 7, 0: PRINT "▄ ▌ ▐ ▀";
  11. 110 COLOR 3, 0: PRINT ") attached to the immovable hinges ("; : COLOR 0, 7: PRINT "■"; : COLOR 3, 0: PRINT ")."
  12. 120 PRINT "The object is to trap the monsters ("; : COLOR 4, 0: PRINT CHR$(15); : COLOR 3, 0: PRINT ") between four doors like this:"
  13. 130 PRINT
  14. 140 PRINT "          "; : COLOR 0, 7: PRINT "■"; : COLOR 7, 0: PRINT "▌"; : COLOR 0, 7: PRINT "■"; : COLOR 7, 0: PRINT
  15. 150 PRINT "          ▄"; : COLOR 4, 0: PRINT CHR$(15); : COLOR 7, 0: PRINT "▀"
  16. 160 PRINT "          "; : COLOR 0, 7: PRINT "■"; : COLOR 7, 0: PRINT "▐"; : COLOR 0, 7: PRINT "■"; : COLOR 7, 0: PRINT
  17. 170 PRINT
  18. 180 COLOR 3, 0: PRINT "The monsters are harmless and there is no way to die in this game.  However, if"
  19. 190 PRINT "you touch them, or hit them with a door you move, they will teleport away."
  20. 200 PRINT
  21. 210 PRINT "The object of the game is to trap all four monsters as quickly as possible."
  22. 201 PRINT "Press Q to quit the game at any time."
  23. 220 PRINT
  24. 230 PRINT "This game is now freeware.  Author:"
  25. 240 PRINT "          Bruce Brandt"
  26. 250 PRINT "          13 - 27th Ave SE"
  27. 260 PRINT "          Minneapolis, MN 55414-3101"
  28. 270 PRINT
  29. 280 PRINT "Type any key to continue": GOSUB 1660
  30. 290 '
  31. 300 '---START OF GAME:  RANDOMIZE; PRINT DOORS, PLAYER, MONSTERS
  32. 310 '
  33. 320 RANDOMIZE VAL(MID$(TIME$, 4, 2)) * 7 - VAL(RIGHT$(TIME$, 2)) * 43
  34. 330 CLS : COLOR 7, 0
  35. 340 PRINT " ▄       ▄   ▄     ▄     ▄ ▄       ▄                     ▄                   ▄  ";
  36. 350 PRINT "  ▐     ▌ ▐   ▐ ▐     ▐       ▌ ▐   ▐     ▌ ▐ ▐   ▐ ▐   ▌   ▌ ▐ ▐   ▐   ▌ ▌     ";
  37. 360 PRINT " ▄ ▄ ▀     ▄ ▄       ▀ ▄ ▄     ▀       ▀ ▄ ▀     ▀ ▄       ▄ ▀     ▀     ▄ ▀    ";
  38. 370 PRINT "      ▐ ▐     ▐   ▌ ▌     ▐ ▐ ▐ ▐   ▌ ▌ ▌   ▐ ▐         ▌ ▌ ▐     ▌   ▌ ▌     ▌ ";
  39. 380 PRINT " ▄   ▀     ▄   ▄ ▄   ▀ ▄       ▄   ▄   ▄   ▀     ▀   ▀       ▄ ▀   ▀       ▀    ";
  40. 390 PRINT "  ▐       ▌ ▐       ▌ ▌   ▐   ▌ ▐         ▌ ▌   ▐ ▐ ▐   ▌ ▌ ▌   ▌     ▌ ▌   ▌ ▌ ";
  41. 400 PRINT "     ▀ ▀                 ▀     ▄     ▀ ▄     ▀ ▀   ▄       ▄   ▄ ▀ ▀   ▄ ▀ ▄    ";
  42. 410 PRINT "▐     ▌ ▐   ▌ ▌   ▐   ▌   ▌ ▌   ▐ ▐ ▐   ▐     ▌   ▌ ▐   ▌ ▌   ▌   ▐   ▌     ▐   ";
  43. 420 PRINT "   ▀ ▄ ▀ ▄   ▄ ▀ ▀ ▄   ▀     ▀     ▄   ▄   ▀   ▀ ▄   ▄         ▄ ▀   ▄   ▀      ";
  44. 430 PRINT "  ▌     ▌ ▐     ▌ ▌ ▐ ▐   ▌   ▌ ▌ ▌   ▌ ▐ ▐   ▌ ▌   ▌   ▐   ▌   ▐ ▐     ▌ ▌ ▌ ▌ ";
  45. 440 PRINT "   ▀ ▄   ▄     ▄     ▄     ▀     ▄ ▄       ▄       ▄   ▀     ▀ ▄   ▄     ▄ ▄    ";
  46. 450 PRINT "▐ ▐   ▐   ▐ ▐     ▌ ▌     ▌ ▌ ▐     ▐   ▌ ▌   ▐       ▐   ▌ ▐   ▐   ▐ ▐       ▌ ";
  47. 460 PRINT " ▄   ▄   ▄     ▄       ▀   ▄ ▀ ▄   ▄     ▄   ▀   ▀ ▄ ▀     ▀   ▄             ▄  ";
  48. 470 PRINT "  ▐     ▌ ▐     ▐   ▌ ▐ ▐     ▌ ▐   ▐ ▐     ▐ ▐     ▐     ▐ ▐   ▐ ▐   ▌ ▌       ";
  49. 480 PRINT "             ▀     ▄ ▀ ▄     ▄ ▄   ▄       ▀     ▀     ▀ ▀ ▄       ▄   ▄ ▀ ▀    ";
  50. 490 PRINT "  ▌ ▌ ▌ ▐     ▌ ▌ ▌     ▐   ▌     ▌   ▌   ▌ ▌ ▌ ▐     ▐       ▐   ▌   ▌ ▐ ▐     ";
  51. 500 PRINT " ▄   ▄ ▀   ▀   ▄     ▀   ▄ ▄     ▄ ▄   ▀   ▄   ▀   ▀ ▀   ▀   ▀     ▄     ▄   ▀  ";
  52. 510 PRINT "  ▐     ▌ ▌ ▌ ▌       ▐     ▐   ▌   ▐     ▌   ▌   ▌ ▌ ▐ ▐   ▐ ▐   ▌   ▐         ";
  53. 520 PRINT "   ▄         ▄   ▀ ▀ ▀   ▄             ▀ ▄ ▄ ▄ ▀ ▄   ▀     ▀     ▄ ▄ ▀     ▀ ▀  ";
  54. 530 PRINT "▐     ▌ ▌ ▐     ▌     ▌ ▌ ▐ ▐   ▌             ▐   ▐   ▐     ▌ ▌       ▐   ▐ ▐   ";
  55. 540 PRINT "     ▄   ▀     ▄ ▀ ▀   ▄   ▄   ▄ ▀ ▀ ▀ ▀ ▄   ▄       ▀ ▄ ▀     ▀     ▀   ▀ ▄    ";
  56. 550 PRINT "  ▌   ▐ ▐     ▌ ▐   ▌ ▌ ▐   ▐   ▐   ▌   ▌ ▐         ▐     ▌ ▌ ▐     ▐   ▐   ▐   ";
  57. 560 PRINT "   ▀       ▀       ▄ ▄       ▄       ▀ ▄     ▄ ▀ ▀ ▀   ▄ ▄ ▄ ▀   ▀ ▀   ▀ ▄ ▄    ";
  58. 570 PRINT "  ▐   ▐     ▌ ▐   ▌     ▌   ▌ ▐ ▐     ▌ ▐     ▐ ▐     ▌     ▐   ▐ ▐   ▌       ▌ ";
  59. 580 LOCATE 25, 1
  60. 590 PRINT " ▀   ▀   ▀   ▀           ▀         ▀       ▀       ▀           ▀       ▀        ";
  61. 600 COLOR 0, 7: FOR X = 2 TO 24 STEP 2: FOR Y = 2 TO 78 STEP 2
  62. 610 LOCATE X, Y: PRINT "■"; : NEXT Y: NEXT X
  63. 620 '
  64. 630 X = 2 * INT(RND * 13) + 1
  65. 640 Y = 2 * INT(RND * 40) + 1
  66. 650 LOCATE X, Y: COLOR 26, 0: PRINT "@"; : COLOR 7, 0
  67. 660 '
  68. 670 FOR MI = 1 TO MM: GOSUB 1320: NEXT MI
  69. 680 SCORE = 0
  70. 690 '
  71. 700 '---MAIN LOOP:  SEE WHETHER MONSTERS OR PLAYER MOVES
  72. 710 '
  73. 720 A$ = INKEY$: IF A$ = "" AND T$ = TIME$ THEN 720
  74. 721 IF UCASE$(A$) = "Q" THEN CLS : END
  75. 730 IF T$ <> TIME$ THEN T$ = TIME$: GOSUB 1090
  76. 740 IF A$ <> "" THEN GOSUB 790
  77. 750 GOTO 720
  78. 760 '
  79. 770 '---SUBROUTINE:  PLAYER MOVES
  80. 780 '
  81. 790 XD = 0: YD = 0
  82. 800 IF LEFT$(A$, 1) = CHR$(0) THEN A$ = MID$(A$, 2) ELSE 890
  83. 810 IF A$ = "G" THEN XD = -1: YD = -1
  84. 820 IF A$ = "H" THEN XD = -1:
  85. 830 IF A$ = "I" THEN XD = -1: YD = 1
  86. 840 IF A$ = "K" THEN YD = -1
  87. 850 IF A$ = "M" THEN YD = 1
  88. 860 IF A$ = "O" THEN XD = 1: YD = -1
  89. 870 IF A$ = "P" THEN XD = 1
  90. 880 IF A$ = "Q" THEN XD = 1: YD = 1
  91. 890 IF XD = 0 AND YD = 0 THEN PLAY "L64N40N41N42": RETURN
  92. 900 IF X + XD < 1 OR X + XD > 25 OR Y + YD < 1 OR Y + YD > 79 THEN PLAY "L64N10N17N24": RETURN
  93. 910 IF (X + XD) MOD 2 = 0 AND (Y + YD) MOD 2 = 0 THEN PLAY "L64N30N44N30": RETURN
  94. 920 LOCATE X, Y: PRINT " "; : XT = X: YT = Y: X = X + XD: Y = Y + YD: F$ = "@": GOSUB 960: RETURN
  95. 930 '
  96. 940 '---SUBROUTINE:  DOORS MOVE
  97. 950 '
  98. 960 XT = XT + XD: YT = YT + YD: C = SCREEN(XT, YT): LOCATE XT, YT
  99. 970 IF F$ = "@" THEN COLOR 2, 0: PRINT F$; : COLOR 7, 0:  ELSE PRINT F$;
  100. 980 IF C = 32 THEN RETURN
  101. 990 IF C = 220 THEN XD = 1: IF YD = -1 THEN F$ = "▐" ELSE F$ = "▌"
  102. 1000 IF C = 221 THEN YD = -1: IF XD = -1 THEN F$ = "▄" ELSE F$ = "▀"
  103. 1010 IF C = 222 THEN YD = 1: IF XD = -1 THEN F$ = "▄" ELSE F$ = "▀"
  104. 1020 IF C = 223 THEN XD = -1: IF YD = -1 THEN F$ = "▐" ELSE F$ = "▌"
  105. 1030 IF C <> 15 THEN 960
  106. 1040 FOR MI = 1 TO MM: IF MX(MI) = XT AND MY(MI) = YT THEN GOSUB 1320: RETURN
  107. 1050 NEXT MI
  108. 1060 '
  109. 1070 '---SUBROUTINE:  MONSTERS MOVE
  110. 1080 '
  111. 1090 MA = 0: FOR MI = 1 TO MM
  112. 1100 XT = MX(MI): YT = MY(MI)
  113. 1110 IF XT > 1 THEN MF(1) = SCREEN(XT - 1, YT) ELSE MF(1) = 0
  114. 1120 IF XT < 25 THEN MF(2) = SCREEN(XT + 1, YT) ELSE MF(2) = 0
  115. 1130 IF YT > 1 THEN MF(3) = SCREEN(XT, YT - 1) ELSE MF(3) = 0
  116. 1140 IF YT < 79 THEN MF(4) = SCREEN(XT, YT + 1) ELSE MF(4) = 0
  117. 1150 IF MF(1) = 2 OR MF(2) = 2 OR MF(3) = 2 OR MF(4) = 2 THEN GOSUB 1320: GOTO 1220
  118. 1160 IF MF(1) <> 32 AND MF(2) <> 32 AND MF(3) <> 32 AND MF(4) <> 32 THEN 1250
  119. 1170 MC = INT(RND * 4) + 1: IF MF(MC) <> 32 THEN 1170
  120. 1180 IF MC = 1 THEN MX(MI) = XT - 1
  121. 1190 IF MC = 2 THEN MX(MI) = XT + 1
  122. 1200 IF MC = 3 THEN MY(MI) = YT - 1
  123. 1210 IF MC = 4 THEN MY(MI) = YT + 1
  124. 1220 MA = 1
  125. 1230 LOCATE XT, YT: PRINT " ";
  126. 1240 LOCATE MX(MI), MY(MI): COLOR 4, 0: PRINT CHR$(15); : COLOR 7, 0
  127. 1250 NEXT MI
  128. 1260 IF MA = 0 THEN 1400
  129. 1270 SCORE = SCORE + 1
  130. 1280 RETURN
  131. 1290 '
  132. 1300 '---SUBROUTINE:  MONSTERS TELEPORT
  133. 1310 '
  134. 1320 MX(MI) = 2 * INT(RND * 13) + 1
  135. 1330 MY(MI) = 2 * INT(RND * 40) + 1
  136. 1340 IF SCREEN(MX(MI), MY(MI)) <> 32 THEN 1320
  137. 1350 LOCATE MX(MI), MY(MI): COLOR 4, 0: PRINT CHR$(15); : COLOR 7, 0: PLAY "L32N83N6"
  138. 1360 RETURN
  139. 1370 '
  140. 1380 '---END OF GAME:  DISPLAY TIME ELAPSED, TOP SCORES
  141. 1390 '
  142. 1400 CLS : COLOR 3, 0: LOCATE 3, 5: PRINT "Game over.  Elapsed time is "; SCORE; "seconds."
  143. 1410 LOCATE 5: PRINT "These were the top players:"
  144. 1420 ON ERROR GOTO 1730
  145. 1430 OPEN "TRAP.TOP" FOR INPUT AS #1
  146. 1440 INPUT #1, NTOP
  147. 1450 FOR I = 1 TO NTOP: INPUT #1, LSCORE(I), LNAME$(I): NEXT I
  148. 1460 CLOSE #1
  149. 1470 ON ERROR GOTO 0
  150. 1480 FOR I = 1 TO NTOP: PRINT I; ")", LSCORE(I), LNAME$(I): NEXT I
  151. 1490 FOR I = 1 TO NTOP: IF SCORE < LSCORE(I) THEN 1510
  152. 1500 NEXT I: PRINT "Your score does not rank.": GOTO 1590
  153. 1510 FOR II = NTOP TO I + 1 STEP -1: LSCORE(II) = LSCORE(II - 1): LNAME$(II) = LNAME$(II - 1): NEXT II
  154. 1520 IF INKEY$ <> "" THEN 1520
  155. 1530 INPUT "What is your name"; LNAME$(I): LSCORE(I) = SCORE
  156. 1540 CLS : LOCATE 5: PRINT "These are the new top players:"
  157. 1550 FOR I = 1 TO NTOP: PRINT I; ")", LSCORE(I), LNAME$(I): NEXT I
  158. 1560 OPEN "TRAP.TOP" FOR OUTPUT AS #1: WRITE #1, NTOP
  159. 1570 FOR I = 1 TO NTOP: WRITE #1, LSCORE(I), LNAME$(I): NEXT I
  160. 1580 CLOSE #1
  161. 1590 PRINT "Would you like to play again?";
  162. 1600 GOSUB 1660
  163. 1610 IF A$ = "Y" THEN 330
  164. 1620 COLOR 7, 0: END
  165. 1630 '
  166. 1640 '---SUBROUTINE:  GET RESPONSE
  167. 1650 '
  168. 1660 A$ = INKEY$: IF A$ = "" THEN 1660
  169. 1670 IF A$ = "y" THEN A$ = "Y"
  170. 1680 IF A$ = "n" THEN A$ = "N"
  171. 1690 RETURN
  172. 1700 '
  173. 1710 '---ERROR TRAP IF NO SCORES FILE
  174. 1720 '
  175. 1730 NTOP = 15
  176. 1740 FOR I = 1 TO NTOP: LSCORE(I) = 30000: LNAME$(I) = "---": NEXT I
  177. 1750 RESUME 1470
  178.  
  179.