テニスゲーム by ノトホホ(SPECIAL THANKS: すがやみつる)

再生

 マイコン少年のバイブル『こんにちはマイコン』第2巻で解説された「アラシ テニス ゲーム」を知っているかな? シンプルな中にもBASICで作るアクションゲームの基本をすべておさえた名作だ。
 このプログラムは、そのプチコン版。『こんにちはマイコン』の作者すがやみつる先生の何気ないひとことに発奮したノトホホ君が移植したものなのだ。
 十字ボタン左右でラケット移動、画面中をはね返るボールを打ち返し続けよう。もちろん打ちもらしてボールを落とせばミスになってしまうぞ。

作ったのはこの人

ノトホホ
Twitter

多感な少年時代にカシオ製マイコンFP-1100に出会い、BASICプログラムに夢中になる。その後、現在まで息をするようにプログラムを打ち、息切れをするようにプログラムを打たない日々。座右の銘は「Syntax Error」。


 CHECK POiNT 

ワンパク
ちょっとスピードが早すぎるんじゃねえか? なかなかボールに追いつけねえぜ。シット!

博士
なるほど、このプログラムはPC-6001からの「ベタ移植」に近いんじゃが、DSiとPC-6001の処理速度の違いが出てしまうのじゃな。

神崎
『こんにちはマイコン』ではFOR I=0 TO 50:NEXT Iみたく中に何もないループを作って時間つぶしをするといいって書いてあるよ。

インテリ
プチコンだと別の方法もあるね。VSYNC命令で、フレーム(画面更新周期)の数を指定すればその間動作が止まるんだ。

博士
さよう! 75行目に@WAITというルーチンがあるじゃろう。こういう時のために用意してあるのじゃな。12行目の変数の値を大きくすればそれだけ遅くなるということじゃ。

プログラムリスト

  1. ’┌──────────────────┐
  2. ’│                  │
  3. ’│   アラシ テニス ケ゛-ム   │
  4. ’│                  │
  5. ’│ BY ISHINO ARASHI │
  6. ’│                  │
  7. ’│ イショク SmileBoomЖ  │
  8. ’│                  │
  9. ’└──────────────────┘
  10. ’--- カ゛メン ノ セッテイ
  11. VISIBLE 1,1,0,0,0,0
  12. W=4
  13. ’--- トクテンヲ セ゛ロニスル
  14. @RESET
  15. T=0
  16. ’--- ホ゛-ルノカス゛
  17. B=5
  18. ’--- ラケットトホ゛-ルノセッテイ
  19. R1$=”===”:R2$=”   ”
  20. B1$=”@”:B2$=” ”
  21. ’--- カ゛メンクリア
  22. CLS
  23. ’--- ラケットノヒョウシ゛
  24. @RETRY
  25. RX=13:RY=20
  26. LOCATE RX,RY
  27. PRINT R1$
  28. ’--- ラインヲヒク
  29. LOCATE 0,21
  30. PRINT”────────────────────────────────”;
  31. ’--- トクテンノヒョウシ゛
  32. LOCATE 1,22
  33. PRINT”トクテン:”;T;
  34. LOCATE 1,23:PRINT”ホ゛-ル:”;B-1;” TENNIS GAME”;
  35. ’--- ホ゛-ルノヒョウシ゛
  36. BX=RND(32)
  37. BY=1
  38. HO=RND(2)+1
  39. LOCATE BX,BY
  40. PRINT B1$;
  41. ’--- ラケットノイト゛ウ
  42. P=0
  43. ’--- メインル-フ゜
  44. @LOOP
  45. BT=BUTTON()
  46. IF BT AND 4 THEN GOSUB @MVLEFT
  47. IF BT AND 8 THEN GOSUB @MVRIGHT
  48. P=P+1:IF P<2 THEN @LOOP
  49. P=0
  50. LOCATE RX,RY:PRINT R1$;
  51. ’--- ホ゛-ルノイト゛ウ
  52. LOCATE BX,BY:PRINT B2$;
  53. ’--- 
  54. @CHKBALL
  55. IF BX==0 AND BY==0 THEN @REVLH
  56. IF BX==31 AND BY==0 THEN @REVRH
  57. IF BX==0 THEN @REVL
  58. IF BX==31 THEN @REVR
  59. IF BY==0 THEN @REVH
  60. IF BY>21 THEN @DEAD
  61. ’--- 
  62. @MVBALL
  63. IF HO==1 THEN BX=BX+1:BY=BY+1
  64. IF HO==2 THEN BX=BX-1:BY=BY+1
  65. IF HO==3 THEN BX=BX-1:BY=BY-1
  66. IF HO==4 THEN BX=BX+1:BY=BY-1
  67. IF CHKCHR(BX,BY)==ASC(”=”) THEN @REVPAD
  68. LOCATE BX,BY:PRINT B1$;
  69. ’--- ウエイト
  70. @WAIT
  71. VSYNC W
  72. GOTO @LOOP
  73. ’--- ラケット ヒタ゛リイト゛ウ
  74. @MVLEFT
  75. LOCATE RX,RY:PRINT R2$;
  76. RX=RX-1
  77. IF RX<0 THEN RX=0
  78. RETURN
  79. ’--- ラケット ミキ゛イト゛ウ
  80. @MVRIGHT
  81. LOCATE RX,RY:PRINT R2$;
  82. RX=RX+1
  83. IF RX>29 THEN RX=29
  84. RETURN
  85. ’--- ヒタ゛リウエスミ ハンテン
  86. @REVLH
  87. HO=1
  88. BEEP 8
  89. GOTO @MVBALL
  90. ’--- ミキ゛ウエスミ ハンテン
  91. @REVRH
  92. HO=2
  93. BEEP 8
  94. GOTO @MVBALL
  95. ’--- ヒタ゛リカヘ゛ ハンテン
  96. @REVL
  97. IF HO==2 THEN HO=1
  98. IF HO==3 THEN HO=4
  99. BEEP 8
  100. GOTO @MVBALL
  101. ’--- ミキ゛カヘ゛ ハンテン
  102. @REVR
  103. IF HO==1 THEN HO=2
  104. IF HO==4 THEN HO=3
  105. BEEP 8
  106. GOTO @MVBALL
  107. ’--- ウエ ハンテン
  108. @REVH
  109. IF HO==3 THEN HO=2
  110. IF HO==4 THEN HO=1
  111. BEEP 8
  112. GOTO @MVBALL
  113. ’--- ラケット ハンテン
  114. @REVPAD
  115. IF HO==1 THEN HO=4
  116. IF HO==2 THEN HO=3
  117. T=T+10
  118. LOCATE 6,22
  119. PRINT T;
  120. BEEP 8
  121. GOTO @CHKBALL
  122. ’--- ウチソコナッタ!
  123. @DEAD
  124. BEEP 5
  125. LOCATE RX,RY:PRINT R2$;
  126. B=B-1
  127. IF B<=0 THEN @GOVER
  128. VSYNC 60
  129. GOTO @RETRY
  130. ’--- ケ゛-ムオ-ハ゛-
  131. @GOVER
  132. CLS
  133. LOCATE 12,7
  134. PRINT”ケ゛-ムオ-ハ゛-”
  135. LOCATE 5,9
  136. PRINT”アナタノ トクテンハ ”;T;”テン テ゛ス。”;
  137. LOCATE 10,14
  138. PRINT”モウイチト゛ヤリマスカ?”;
  139. LOCATE 9,16
  140. PRINT”ハイ=(Y),イイエ=(N)”;
  141. ’---
  142. @KEYLOOP
  143. A$=INKEY$()
  144. IF A$==”” THEN @KEYLOOP
  145. IF A$==”Y” THEN @RESET
  146. IF A$!=”N” THEN @KEYLOOP
  147. END