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

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