食べ歩きゲーム by ブリスター・ジョン

再生

 スマイルブーム公式ブログでコラム連載中のブリスター・ジョン氏が発売日翌日にスマイルブーム本社まで持ってきたのがこのプログラム。
 いわゆるスネークゲームのバリエーションで、十字ボタンで操作して伸びていく自分のカラダに当たるとゲームオーバーだ。
 画面上のハートマークを全部取ればステージクリア。ステージが進むほどハートの数も増えていくぞ。

私が作りました

ブリスター・ジョン

25年前の私は配列変数の理屈はわかっても、どう使えばいいのかがどうしても理解できないダメな子で、とうとう「あるけあるけゲーム」を自分で作れませんでした。時は流れていま、作り始めてみると不思議なくらい簡単にできてしまったのです。そうか、フラグの概念を知ったからか? おーい当時の僕、聞こえるかーい! お前は25年後にやりとげたぞー!


 CHECK POiNT 

博士
マイコン全盛期にとうとう未完成だったプログラムを、いま完成させて投稿とは泣かせるわい。
ここでは二次配列とフラグの考え方を使っておるんじゃな。たとえばFOOD(12,8)の中身がとすれば、横12縦8の位置にハートマークがある、ということじゃ。

インテリ
プチコンならCHKCHRでその座標にハートマークがあるか直接調べられるから、あえて配列を使う必要はないんだけど……。

博士
ま、まあその通りじゃがそこがロマンなんじゃろうの。

ワンパク
ファック! ボタンを押したハズなのに動かないコトが時々あるのはどうしてだ?

神崎
スピード調整でVSYNCを10使っているせいかな? VSYNCの待機中にボタンを押しても取得されないんだね。

博士
ふむ。ここはあえてVSYNC 1にして、10回に1回だけ動くようにループを作るのがいいじゃろうな。その間受け付けたボタン入力を反映すれば解決じゃ。

プログラムリスト

  1. ’===WALKING===
  2. ’---ショキセッテイ
  3. CLEAR
  4. COLOR 0
  5. SPEED=10
  6. FOODMAX=5
  7. DIM ENEMY(32,24)
  8. DIM FOOD(32,24)
  9. STAGE=1
  10. ’---マッフ゜ヒ゛ョウカ゛
  11. @MAP
  12. CLS
  13. ’ヘンスウ ショキカ
  14. FOR I=0 TO 31
  15. FOR J=0 TO 23
  16. ENEMY(I,J)=0
  17. FOOD(I,J)=0
  18. NEXT
  19. NEXT
  20. ’カヘ゛
  21. FOR I=0 TO 31
  22. LOCATE I,0:PRINT”╂”;
  23. ENEMY(I,0)=1
  24. LOCATE I,22:PRINT”╂”;
  25. ENEMY(I,22)=1
  26. NEXT
  27. FOR I=1 TO 21
  28. LOCATE 0,I:PRINT”╂”;
  29. ENEMY(0,I)=1
  30. LOCATE 31,I:PRINT”╂”;
  31. ENEMY(31,I)=1
  32. NEXT
  33. LOCATE 0,0:PRINT”STAGE:”;STAGE;
  34. ’エサ
  35. COLOR 12
  36. FOODNOW=FOODMAX+STAGE-1
  37. FOR I=1 TO FOODNOW
  38. @FDAGAIN
  39. FX=RND(30)+1
  40. FY=RND(21)+1
  41. LOCATE FX,FY:PRINT”а”;
  42. IF FOOD(FX,FY)==1 THEN @FDAGAIN
  43. FOOD(FX,FY)=1
  44. NEXT
  45. ’フ゜レイヤ-
  46. PX=15:PY=11
  47. LOCATE PX,PY
  48. COLOR 0
  49. PRINT”@”;
  50. BODYCOL=3
  51. B1=0
  52. ’---ニュウリョク
  53. @INBTN
  54. B=BUTTON()
  55. IF B==0 AND B1==0 THEN @INBTN
  56. BGM=BGMCHK()
  57. IF BGM==0 THEN BGMPLAY 7
  58. IF B==0 THEN B=B1
  59. ’---イト゛ウ
  60. @MOVE
  61. COLOR BODYCOL
  62. LOCATE PX,PY:PRINT”┿”;
  63. COLOR 0
  64. ENEMY(PX,PY)=1
  65. IF B==1 THEN PY=PY-1:B1=B
  66. IF B==2 THEN PY=PY+1:B1=B
  67. IF B==4 THEN PX=PX-1:B1=B
  68. IF B==8 THEN PX=PX+1:B1=B
  69. LOCATE PX,PY
  70. PRINT”@”;
  71. IF ENEMY(PX,PY)==1 THEN @GAMEOVER
  72. IF FOOD(PX,PY)==1 THEN GOSUB @GETFOOD
  73. VSYNC SPEED
  74. GOTO @INBTN
  75. ’---エサ ケ゛ット
  76. @GETFOOD
  77. BEEP 7
  78. FOODNOW=FOODNOW-1
  79. IF FOODNOW==0 THEN @STAGECLR
  80. BODYCOL=BODYCOL+1
  81. IF BODYCOL==16 THEN BODYCOL=2
  82. RETURN
  83. ’---ステ-シ゛クリア
  84. @STAGECLR
  85. BGMPLAY 4
  86. LOCATE 11,11
  87. PRINT”STAGE CLEAR”;
  88. VSYNC 150
  89. STAGE=STAGE+1
  90. GOTO @MAP
  91. ’---ケ゛-ムオ-ハ゛-
  92. @GAMEOVER
  93. BEEP 13
  94. VSYNC 12
  95. BGMPLAY 6
  96. LOCATE 11,11
  97. PRINT”GAME OVER”;
  98. END