PATPAT by すがぁら。

再生

 サイドビュー型のシンプルなパットゴルフゲームだ。
 まずはプレイするホール数を選ぼう。メイン画面が表示されたら、Lボタンで素振りの開始。上下するショットゲージのちょうどいい強さを見計らって、Rボタンで打ち込もう。ボールがカップに向かって転がっていくぞ。
 ホールごとにある規定打数(パー)を上回らないよう、少ない打数のカップインでハイスコアを狙おう。

私が作りました

すがぁら。
Twitter

20年近く前に組んだパットゴルフゲームを、プチコンに移植してみました。
Lボタンでショットゲージが動くので、球の強さを決定してRボタンでショットします。
距離によってパーがかわります。
97〜100行目で、球の強さの計算をしています。ゲームバランスが悪い場合は調整してみてください。
目指せ、ホールインワン!


 CHECK POiNT 

博士
ゴルフゲームもある種BASICの定番ゲームじゃな。特にパットゴルフはゴルフゲームのキモ、スイングのパワー調整をお手軽に楽しめて良いとっかかりじゃ。

神崎
横視点だから、ショットの方向を決める操作が必要なくできているんだね。

博士
ウム、うまい割り切り方じゃな。このプログラムではボールとカップも文字でできているのが味わい深いのう。

ワンパク
ムムム……? オレは同じ強さで打ってるハズなのに、転がり方が違うときがあるぜ。ナットクいかねーな!

インテリ
98〜101行目で、ショットの強さをある程度ランダムで揺らすようにしてあるね。変化が付いてゲーム性に一役かっているけど、内部で処理するより「風向き」のような要素として表に出ているとより本格的だし、ワンパク君も納得だったかな?

プログラムリスト

  1. ’
  2. ’ PATPAT
  3. ’
  4. ’ショキ ショリ
  5. @SHOKI
  6. VISIBLE 1,1,0,0,0,1
  7. CLS:GCLS:CLEAR
  8. HC=1:SC=0
  9. GOSUB @TITLE
  10. ’
  11. ’ ホールノ ショキセッテイ
  12. ’
  13. @HOLE
  14. BEEP 42
  15. CLS
  16. GFILL 0,0,255,90,4
  17. GFILL 0,90,255,255,10
  18. GFILL 150,3,250,70,0
  19. GBOX 150,3,250,70,0
  20. GFILL 70,3,140,30,0
  21. GBOX 70,3,140,30,0
  22. GFILL 20,36,35,130,0
  23. GBOX 20,36,35,130,0
  24. BL=1 ’タマノ ショキイチ
  25. SH=0 ’ショットカウント リセット
  26. LOCATE BL,18
  27. COLOR 0:PRINT ”.”
  28. CP=FLOOR(RND(20)+8)
  29. IF CP<10 THEN PER=2
  30. IF CP>9 THEN PER=3
  31. IF CP>17 THEN PER=4
  32. IF CP>25 THEN PER=5
  33. ’
  34. ’ 1タ゛ コ゛トノ ホール ショリ
  35. ’
  36. @SET
  37. LOCATE CP,18
  38. COLOR 1:PRINT ”●”
  39. LOCATE 10,1
  40. COLOR 15:PRINT ”К:スインク゛”
  41. LOCATE 10,2
  42. COLOR 15:PRINT ”К:ショット”
  43. LOCATE 20,1
  44. COLOR 15:PRINT HC;” ホール”
  45. LOCATE 20,3
  46. COLOR 15:PRINT ”キョリ :”;CP
  47. LOCATE 20,4
  48. COLOR 15:PRINT ”ハ゜ー :”;PER
  49. LOCATE 20,6
  50. COLOR 15:PRINT ” スコア:”;SC
  51. LOCATE 20,7
  52. COLOR 15:PRINT ”ショット:”;SH
  53. ’
  54. ’ スインク゛ ショリ
  55. ’
  56. @BTN
  57. B = BUTTON()
  58. IF B == 256 GOTO @PLAY
  59. GOTO @BTN
  60. ’
  61. ’ ハ゜ワーケ゛ーシ゛ ト ショット
  62. ’
  63. @PLAY
  64. FOR TM = 0 TO 10000:NEXT TM
  65. FOR LV=0 TO 10
  66. FOR TM = 0 TO 1500
  67. X=BUTTON()
  68. IF X == 512 GOTO @SHOT
  69. NEXT TM
  70. LOCATE 3,15-LV
  71. COLOR 7:PRINT”┿”
  72. NEXT LV
  73. FOR LV =10 TO 0 STEP -1
  74. FOR TM = 0 TO 1500
  75. X=BUTTON()
  76. IF X == 512 GOTO @SHOT
  77. NEXT TM
  78. LOCATE 3,15-LV
  79. COLOR 7:PRINT” ”
  80. NEXT LV
  81. GOTO @SET
  82. ’
  83. ’ ホ゛ールノ ヒキョリ セッテイ
  84. ’
  85. @SHOT
  86. BEEP 29:SH=SH+1
  87. LOCATE 20,7
  88. COLOR 15:PRINT ”ショット:”;SH
  89. IF LV<3 THEN LV=RND(LV/2)+1
  90. IF LV>2 THEN LV=RND(LV)+LV-1
  91. IF LV>6 THEN LV=RND(LV/3)+LV
  92. IF LV>8 THEN LV=RND(LV/2)+LV*1.2
  93. LV=FLOOR(LV)
  94. IF BL<CP GOTO @PTN1A
  95. IF BL>CP GOTO @PTN2A
  96. ’
  97. ’ ホ゛ールカ゛ カッフ゜ノ ヒタ゛リカ゛ワ
  98. ’
  99. @PTN1A
  100. FOR H=1 TO LV
  101. IF BL>27 THEN Y=H:GOTO @PTN1B
  102. BL=BL+1
  103. FOR TM=1 TO 3000:NEXT TM
  104. LOCATE BL,18
  105. COLOR 15:PRINT ”.”
  106. LOCATE BL-1,18
  107. PRINT ” ”
  108. LOCATE CP,18
  109. COLOR 1:PRINT ”●”
  110. NEXT H
  111. GOTO @HOLEIN
  112. @PTN1B
  113. FOR H=Y TO LV
  114. CP=CP-1
  115. FOR TM=1 TO 3000:NEXT TM
  116. LOCATE CP,18
  117. COLOR 15:PRINT ”●”
  118. LOCATE CP+1,18
  119. PRINT ” ”
  120. NEXT H
  121. GOTO @HOLEIN
  122. ’
  123. ’ ホ゛ールカ゛ カッフ゜ノ ミキ゛カ゛ワ
  124. ’
  125. @PTN2A
  126. FOR H=1 TO LV
  127. IF BL<1 THEN Y=H:GOTO @PTN2B
  128. BL=BL-1
  129. FOR TM=1 TO 3000:NEXT TM
  130. LOCATE BL,18
  131. COLOR 15:PRINT ”.”
  132. LOCATE BL+1,18
  133. PRINT ” ”
  134. LOCATE CP,18
  135. COLOR 1:PRINT ”●”
  136. NEXT H
  137. GOTO @HOLEIN
  138. @PTN2B
  139. FOR H=Y TO LV
  140. CP=CP+1
  141. FOR TM=1 TO 3000:NEXT TM
  142. LOCATE CP,18
  143. COLOR 15:PRINT ”●”
  144. LOCATE CP-1,18
  145. PRINT ” ”
  146. NEXT H
  147. GOTO @HOLEIN
  148. ’
  149. ’ カッフ゜イン ハンテイ
  150. ’
  151. @HOLEIN
  152. FOR LV=0 TO 10
  153. LOCATE 3,15-LV
  154. PRINT ” ”
  155. NEXT LV
  156. IF BL!=CP GOTO @SET
  157. BEEP 23
  158. FOR TM=0 TO 50000:NEXT TM
  159. SC=SC+SH-PER
  160. LOCATE 20,6
  161. COLOR 15:PRINT ” スコア:   ”
  162. LOCATE 20,6
  163. COLOR 15:PRINT ” スコア:”;SC;” ”
  164. HC=HC+1
  165. IF HC<=HL GOTO @HOLE
  166. @ENDING
  167. LOCATE 7,12:COLOR 15
  168. PRINT ”PUSH [START] TO TITLE”
  169. ST=BUTTON()
  170. IF ST == 1024 GOTO @SHOKI
  171. GOTO @ENDING
  172. @TITLE
  173. COLOR 5:LOCATE 0,3
  174. PRINT ”┿┿┿┰ ┝┿┿┰ ┿┿┿┿┿│┿┿┿┰ ┝┿┿┰ ┿┿┿┿┿│”;
  175. PRINT ”───┿│┿┌─┿│──┿┌─┘───┿│┿┌─┿│──┿┌─┘”;
  176. PRINT ”   ┿│┿│ ┿│  ┿│     ┿│┿│ ┿│  ┿│  ”;
  177. PRINT ”┿┿┿┸ ┿┿┿┿│  ┿│  ┿┿┿┸ ┿┿┿┿│  ┿│  ”;
  178. PRINT ”┿┌─  ┿┌─┿│  ┿│  ┿┌─  ┿┌─┿│  ┿│  ”;
  179. PRINT ”┿│   ┿│ ┿│  ┿│  ┿│   ┿│ ┿│  ┿│  ”;
  180. PRINT ”─┘   ─┘ ─┘  ─┘  ─┘   ─┘ ─┘  ─┘  ”;
  181. LOCATE 7,12
  182. COLOR 15
  183. PRINT ”SELECT COURSE”
  184. LOCATE 9,14:PRINT ”A: 1HOLE”
  185. LOCATE 9,15:PRINT ”B: 3HOLES”
  186. LOCATE 9,16:PRINT ”X: 9HOLES”
  187. LOCATE 9,17:PRINT ”Y:18HOLES”
  188. ST=BUTTON()
  189. IF ST == 16 THEN HL=1:RETURN
  190. IF ST == 32 THEN HL=3:RETURN
  191. IF ST == 64 THEN HL=9:RETURN
  192. IF ST == 128 THEN HL=18:RETURN
  193. GOTO @TITLE