home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 070.IBM_GOLF.BAS < prev    next >
BASIC Source File  |  1979-12-31  |  7KB  |  169 lines

  1. 100 REM
  2. 110 REM "Mini-Golf Simulation" (Generic MS-BASIC Version)
  3. 120 REM (C) Copyright 1989, One Thousand Magazine
  4. 130 REM and Randy Hawkins, All Rights Reserved
  5. 140 REM
  6. 150 SCREEN 1: COLOR 0, 1: KEY OFF: CLS
  7. 160 DIM WHO$(5), SCORE(5), BALL(7), HOLD(124), ARROW(124)
  8. 170 CIRCLE (4, 4), 3: PAINT (4, 4), 3, 3: GET (1, 1)-(7, 7), BALL
  9. 180 REM
  10. 190 REM How many players and who are they?
  11. 200 REM
  12. 210 RANDOMIZE TIMER: CLS
  13. 220 PRINT "Welcome to OTM's Mini-Golf Game": GOSUB 1630
  14. 230 PRINT : PRINT "How many will play (1-5)? █";
  15. 240 A$ = INKEY$: IF A$ < "1" OR A$ > "5" THEN 240
  16. 250 LOCATE 9, 27: PRINT A$: PRINT : NP = VAL(A$): FOR A = 1 TO NP
  17. 260 PRINT "Player #"; CHR$(A + 48); : INPUT WHO$(A)
  18. 270 WHO$(A) = LEFT$(WHO$(A), 17): NEXT A: PRINT
  19. 280 REM
  20. 290 REM Start play by displaying one of 18 holes
  21. 300 REM
  22. 310 FOR HOLE = 1 TO 18: CLS : X = INT((HOLE + 3) / 4)
  23. 320 Y = HOLE - (X - 1) * 4: ON X GOTO 330, 340, 350, 360, 370
  24. 330 ON Y GOSUB 1090, 1110, 1140, 1160: GOTO 410
  25. 340 ON Y GOSUB 1180, 1220, 1260, 1280: GOTO 410
  26. 350 ON Y GOSUB 1300, 1320, 1380, 1410: GOTO 410
  27. 360 ON Y GOSUB 1440, 1450, 1480, 1540: GOTO 410
  28. 370 ON Y GOSUB 1560, 1590
  29. 380 REM
  30. 390 REM Display hole info, ball, and hole for each player
  31. 400 REM
  32. 410 SCORE(0) = SCORE(0) + PAR
  33. 420 FOR PL = 1 TO NP: ANGLE = 0: STROKE = 0: X = BX: Y = BY
  34. 430 FOR A = 1 TO 4: LOCATE A, 1: PRINT STRING$(39, 32): NEXT A
  35. 440 LOCATE 1, 8: PRINT "Player: "; WHO$(PL)
  36. 450 PRINT "Current Score:"; SCORE(PL)
  37. 460 LOCATE 3, 3: PRINT "Hole Number:"; HOLE; "(Par";
  38. 470 PRINT STR$(PAR); ")": LOCATE 4, 7: PRINT "Strokes:"; STROKE
  39. 480 PUT (X - 3, Y - 3), BALL: CIRCLE (HX, HY), 4, 2: PAINT (HX, HY), 2, 2
  40. 490 REM
  41. 500 REM Display arrow and select direction
  42. 510 REM
  43. 520 GET (270, 0)-(300, 30), HOLD: PUT (270, 0), HOLD
  44. 530 DRAW "BM285,15 TA" + STR$(ANGLE) + "0 C15 BR5 R10 H2 D4 E2"
  45. 540 GET (270, 0)-(300, 30), ARROW: PUT (270, 0), ARROW: PUT (270, 0), HOLD
  46. 550 PUT (X - 15, Y - 15), ARROW: DEF SEG = 0: POKE 1050, PEEK(1052)
  47. 560 A$ = INKEY$: IF A$ = "" THEN 560 ELSE IF VAL(A$) THEN 700
  48. 565 IF A$ = CHR$(27) THEN 1610
  49. 570 IF ASC(A$) THEN 560 ELSE A$ = MID$(A$, 2, 1)
  50. 580 REM
  51. 590 REM Move arrow and re-draw
  52. 600 REM
  53. 610 IF A$ = "H" THEN ANGLE = ANGLE + SGN(COS(ANGLE / 5.72))
  54. 620 IF A$ = "K" THEN ANGLE = ANGLE + SGN(SIN(ANGLE / 5.72))
  55. 630 IF A$ = "P" THEN ANGLE = ANGLE - SGN(COS(ANGLE / 5.72))
  56. 640 IF A$ = "M" THEN ANGLE = ANGLE - SGN(SIN(ANGLE / 5.72))
  57. 650 ANGLE = ANGLE - 36 * (ANGLE < 0) + 36 * (ANGLE = 36)
  58. 660 PUT (X - 15, Y - 15), ARROW: GOTO 520
  59. 670 REM
  60. 680 REM Start the ball rolling
  61. 690 REM
  62. 700 SPEED = VAL(A$) * 20: PUT (X - 15, Y - 15), ARROW
  63. 710 DX = 2 * COS(ANGLE / 5.72): DY = -2 * SIN(ANGLE / 5.72)
  64. 720 SCORE(PL) = SCORE(PL) + 1: LOCATE 2, 15: PRINT SCORE(PL)
  65. 730 STROKE = STROKE + 1: LOCATE 4, 15: PRINT STROKE
  66. 740 SPEED = SPEED - 1: IF SPEED < 1 THEN 520
  67. 750 NX = POINT(X + DX + SGN(DX) * 3, Y)
  68. 760 NY = POINT(X, Y + DY + SGN(DY) * 3)
  69. 770 IF (NX = 2) + (NY = 2) THEN 850 ELSE Q = TIMER
  70. 780 IF (NX <> 0) * (NX <> 3) THEN DX = -DX: SOUND 100, .1
  71. 790 IF (NY <> 0) * (NY <> 3) THEN DY = -DY: SOUND 100, .1
  72. 800 PUT (X - 3, Y - 3), BALL: X = X + DX: Y = Y + DY
  73. 810 PUT (X - 3, Y - 3), BALL: WHILE TIMER - Q < .01: WEND: GOTO 740
  74. 820 REM
  75. 830 REM Ball is in the hole
  76. 840 REM
  77. 850 DX = (HX - X) / 10: DY = (HY - Y) / 10
  78. 860 FOR A = 1 TO 10: PUT (X - 3, Y - 3), BALL
  79. 870 X = X + DX: Y = Y + DY: PUT (X - 3, Y - 3), BALL
  80. 880 SOUND (11 - A) * 100, .1: NEXT A: BEEP: A = TIMER
  81. 890 WHILE TIMER - A < 3: WEND: NEXT PL
  82. 900 CLS : LOCATE 8, 3: PRINT "Par Thru"; HOLE; "holes ";
  83. 910 WHILE POS(0) < 35: PRINT CHR$(46); : WEND
  84. 920 PRINT USING "###"; SCORE(0): FOR PL = 1 TO NP
  85. 930 LOCATE PL + 9, 3: PRINT WHO$(PL); CHR$(32);
  86. 940 WHILE POS(0) < 35: PRINT CHR$(46); : WEND
  87. 950 PRINT USING "###"; SCORE(PL): NEXT PL: A = TIMER
  88. 960 WHILE TIMER - A < 5: WEND: NEXT HOLE
  89. 970 REM
  90. 980 REM Announce winners and quit
  91. 990 REM
  92. 1000 PRINT : IF NP = 1 THEN 1052 ELSE A = 1
  93. 1010 FOR PL = 2 TO NP: IF SCORE(PL) < SCORE(A) THEN A = PL
  94. 1020 NEXT PL: PRINT TAB(13); "Congratulations"
  95. 1030 FOR PL = 1 TO NP: IF SCORE(PL) > SCORE(A) THEN 1050
  96. 1040 PRINT TAB(20 - LEN(WHO$(PL)) / 2); WHO$(PL)
  97. 1050 NEXT PL
  98. 1052 PRINT : PRINT SPC(10); "Play Again (Y/N)? █";
  99. 1054 A$ = INKEY$: IF A$ = "Y" OR A$ = "y" THEN 210
  100. 1056 IF A$ = "N" OR A$ = "n" THEN 1610 ELSE 1054
  101. 1060 REM
  102. 1070 REM Holes #1 thru #5
  103. 1080 REM
  104. 1090 LINE (8, 71)-(311, 179), 1, BF: LINE (12, 75)-(307, 175), 0, BF
  105. 1100 BX = 23: BY = 85 + RND * 80: HX = 290: HY = 125: PAR = 2: RETURN
  106. 1110 LINE (8, 71)-(241, 179), 1, BF: CIRCLE (237, 125), 70, 1
  107. 1115 PAINT (300, 125), 1, 1: CIRCLE (237, 125), 66, 0
  108. 1120 PAINT (237, 125), 0, 0: LINE (12, 75)-(237, 175), 0, BF
  109. 1125 BX = 23: BY = 85 + RND * 80
  110. 1130 HX = 237: HY = 125: PAR = 2: RETURN
  111. 1140 LINE (8, 46)-(311, 184), 1, BF: LINE (12, 50)-(307, 180), 0, BF
  112. 1150 BX = 23: BY = 65: HX = 290: HY = 165: PAR = 3: RETURN
  113. 1160 GOSUB 1090: LINE (62, 105)-(250, 110), 1, BF
  114. 1170 LINE (62, 140)-(250, 145), 1, BF: RETURN
  115. 1180 GOSUB 1110: LINE (155, 95)-(160, 155), 1, BF: RETURN
  116. 1190 REM
  117. 1200 REM Holes #6 thru #10
  118. 1210 REM
  119. 1220 GOSUB 1140: LINE (90, 90)-(237, 140), 1, BF
  120. 1225 LOCATE 13, 13: PRINT STRING$(17, 32);
  121. 1230 LOCATE 14, 13: PRINT "      O N E      ";
  122. 1240 LOCATE 15, 13: PRINT " T H O U S A N D ";
  123. 1250 LOCATE 16, 13: PRINT " M A G A Z I N E ";
  124. 1255 LOCATE 17, 13: PRINT STRING$(17, 32); : RETURN
  125. 1260 GOSUB 1090: FOR A = 70 TO 220 STEP 75
  126. 1270 LINE (A, 105)-(A + 30, 145), 1, BF: NEXT A: RETURN
  127. 1280 GOSUB 1110: LINE (100, 75)-(140, 115), 1, BF
  128. 1290 LINE (100, 135)-(140, 175), 1, BF: RETURN
  129. 1300 GOSUB 1140: LINE (12, 92)-(260, 96), 1, BF
  130. 1310 LINE (59, 136)-(307, 140), 1, BF: RETURN
  131. 1320 GOSUB 1090: CIRCLE (120, 175), 50, 1, 0, 3.14
  132. 1330 CIRCLE (207, 75), 50, 1, 3.14, 6.28: PAINT (120, 165), 1, 1
  133. 1340 PAINT (207, 85), 1, 1: RETURN
  134. 1350 REM
  135. 1360 REM Holes #11 thru #15
  136. 1370 REM
  137. 1380 GOSUB 1110: LINE (60, 110)-(100, 140), 1, BF
  138. 1390 LINE (140, 75)-(180, 110), 1, BF
  139. 1400 LINE (140, 140)-(180, 175), 1, BF: RETURN
  140. 1410 GOSUB 1140: LINE (86, 50)-(92, 130), 1, BF
  141. 1420 LINE (154, 100)-(160, 180), 1, BF
  142. 1430 LINE (220, 50)-(226, 130), 1, BF: HY = 65: RETURN
  143. 1440 GOSUB 1140: LINE (12, 135)-(207, 180), 1, BF
  144. 1445 LINE (0, 139)-(203, 199), 0, BF: HX = 230: RETURN
  145. 1450 GOSUB 1110: CIRCLE (90, 125), 25, 1
  146. 1460 CIRCLE (170, 125), 25, 1: PAINT (90, 125), 1, 1
  147. 1470 PAINT (170, 125), 1, 1: RETURN
  148. 1480 GOSUB 1140: FOR A = 1 TO 5
  149. 1490 CIRCLE (A * 53, 180 - A * 22), 10, 1
  150. 1500 PAINT (A * 53, 180 - A * 22), 1, 1: NEXT A: RETURN
  151. 1510 REM
  152. 1520 REM Holes #16 thru #18
  153. 1530 REM
  154. 1540 GOSUB 1140: LINE (12, 120)-(110, 180), 1, BF
  155. 1545 LINE (0, 124)-(106, 199), 0, BF: LINE (210, 120)-(307, 180), 1, BF
  156. 1550 LINE (214, 124)-(319, 199), 0, BF: HX = 160: RETURN
  157. 1560 GOSUB 1110: FOR A = 1 TO 4
  158. 1570 LINE (40 + A * 30, 50 + A * 25)-(46 + A * 30, 75 + A * 25), 1, BF
  159. 1580 NEXT A: RETURN
  160. 1590 GOSUB 1140: LINE (82, 50)-(237, 120), 1, BF
  161. 1600 LINE (86, 46)-(233, 116), 0, BF: HY = 65: RETURN
  162. 1610 SCREEN 0: WIDTH 80: CLS: LOCATE 12, 30
  163. 1620 PRINT "One Moment Please...": RUN "menu"
  164. 1630 PRINT: PRINT "Use the arrow keys to aim your shot"
  165. 1640 PRINT "(if the up arrow key does not work,"
  166. 1650 PRINT "use the PG UP key).  Press a number"
  167. 1660 PRINT "from 1 (easy) to 9 (hard) to putt"
  168. 1670 PRINT "the ball.  Good luck!": RETURN
  169.