PATPAT by すがぁら。

再生

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

私が作りました

すがぁら。
Twitter

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


 CHECK POiNT 

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

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

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

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

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

プログラムリスト

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