スネークゲーム by もりちゃん

再生

 BASICゲームの定番、スネークゲームのプチコンバージョンを作ってくれたぞ。
 十字ボタンでヘビを動かして、赤いリンゴを取っていこう。
 リンゴを取れば取るほどヘビの体は長くなっていく。カベやブロックはもちろん、自分の体にぶつかってもゲームオーバーなので、先に進むほど難しくなっていくしくみだ。
 ときどき出現しては消えてしまう黄色のダイヤは、パワーアップアイテム。一定時間のパワーアップ中はブロックも食べてしまえるぞ。ジャマ物が減るだけじゃなく、スコアにもリンゴの半分(5点)プラスになるので、ぜひ活用していきたいね。

私が作りました

もりちゃん

JR-100/200使いでした。リハビリを兼ねて作成してみました。


 CHECK POiNT 

博士
スネークゲーム、スネーキー、ヘビゲーム……名前もさまざまじゃが、「エサを食べて体が伸びていく」システムの定番ゲームじゃな。かつてYouTubeにもお遊びで追加されたこともあるのじゃよ。

インテリ
基本は一緒でも、いろんなバリエーションがあるのがスネークゲーム。このプログラムでは、エサや障害物がどこからともなく現われたり、パワーアップして障害物を破壊できるのが特徴だよ。

ワンパク
カベがイキナリ出てきたらどうしようかと思ったがよォ、意外になんとかなるもんだな!

博士
いやいや、これはプログラムでプレイヤーキャラの前にトツゼン出てこないように制御されてるのじゃよ。ワンパク君が急に上手になったわけではないぞい。

ワンパク
ウグググ……そうか、108行目か! チキショー!

神崎
親切設計だけど、欲を言えばパワーアップが終わる瞬間がプレイヤーにもわかるともっといいね。カウントダウンの変数CNTPが少なくなってきたら色を変えるとか音で知らせるとかかな?

プログラムリスト

  1. ’┌─────┐
  2. ’│SNAKE│
  3. ’└─────┘
  4. VISIBLE 1,1,0,0,0,1
  5. GPAGE 0:GCOLOR 0:GCLS
  6. CLEAR:MAX=40
  7. DIM X(MAX),Y(MAX)
  8. @START
  9. CLS:BGMSTOP:COLOR 5
  10. FOR I=0 TO 31
  11. LOCATE I, 0:PRINT ”┿”;
  12. LOCATE I,22:PRINT ”┿”;
  13. NEXT I
  14. LOCATE 0,1
  15. FOR I=0 TO 20
  16. PRINT ”┿”;
  17. FOR J=1 TO 30
  18. PRINT ” ”;
  19. NEXT J
  20. PRINT ”┿”;
  21. NEXT I
  22. COLOR 0
  23. LOCATE  0,23:PRINT ”SCORE:0”;
  24. LOCATE 15,23:PRINT ”HIGH-SCORE:”;HI;
  25. FOR I=0 TO 3
  26. X(I)=I+13:Y(I)=10
  27. NEXT I
  28. FOR I=4 TO MAX-1
  29. X(I)=0:Y(I)=0
  30. NEXT I
  31. POS=3:L=4:SC=0:CNT=0:SPD=9:SCOL=11
  32. XX=1:YY=0:XD=0:YD=0:CNTD=0:CNTP=0
  33. GOSUB @DRAW
  34. COLOR 3
  35. LOCATE 12,12:PRINT ”READY!?”;
  36. FOR I=0 TO 2
  37. BEEP 16:VSYNC 60
  38. NEXT I
  39. COLOR 13
  40. LOCATE 12,12:PRINT ”  GO!  ”;
  41. BEEP 18:VSYNC 60
  42. LOCATE 12,12:PRINT ”       ”;
  43. GOSUB @ESA
  44. BGMPLAY 8
  45. @LOOP
  46. BTN1=0
  47. FOR I=0 TO SPD
  48. VSYNC 1:BTN1=BUTTON()
  49. IF BTN1 THEN BTN=BTN1
  50. NEXT I
  51. IF BTN==1 AND YY!= 1 THEN XX= 0:YY=-1
  52. IF BTN==2 AND YY!=-1 THEN XX= 0:YY= 1
  53. IF BTN==4 AND XX!= 1 THEN XX=-1:YY= 0
  54. IF BTN==8 AND XX!=-1 THEN XX= 1:YY= 0
  55. XO=X(POS):YO=Y(POS)
  56. POSC=POS-L+1
  57. IF POSC<0 THEN POSC=POSC+MAX
  58. POS=POS+1
  59. IF POS>=MAX THEN POS=0
  60. X(POS)=XO+XX:Y(POS)=YO+YY
  61. C=CHKCHR(X(POS),Y(POS))
  62. IF C==ASC(”Ш”) THEN GOSUB @ESAGET:GOTO @NEXT1
  63. IF C==ASC(”б”) THEN GOSUB @DIAGET:GOTO @NEXT1
  64. IF C==ASC(”В”) AND CNTP>0 THEN GOSUB @BREAK:GOTO @NEXT1
  65. IF C!=ASC(” ”) THEN GOTO @LOST
  66. @NEXT1
  67. LOCATE X(POSC),Y(POSC):PRINT ” ”;
  68. COLOR SCOL
  69. LOCATE X(POS),Y(POS):PRINT ”●”;
  70. CNT=CNT+1
  71. IF CNT>50 THEN GOSUB @IWA
  72. IF CNTD>0 THEN GOSUB @DIACNT
  73. IF CNTP>0 THEN GOSUB @POWERUP
  74. IF CNTD==0 AND CNTP==0 AND RND(200)==0 THEN GOSUB @DIA
  75. GOTO @LOOP
  76. @DRAW
  77. POSC=POS
  78. COLOR SCOL
  79. FOR I=0 TO L-1
  80. LOCATE X(POSC),Y(POSC):PRINT ”●”;
  81. POSC=POSC-1
  82. IF POSC<0 THEN POSC=MAX-1
  83. NEXT I
  84. RETURN
  85. @ESA
  86. EX=RND(30)+1:EY=RND(21)+1
  87. IF CHKCHR(EX,EY) != ASC(” ”) THEN GOTO @ESA
  88. COLOR 13
  89. LOCATE EX,EY:PRINT ”Ш”;
  90. SPD=SPD-0.3
  91. IF SPD < 1 THEN SPD=1
  92. RETURN
  93. @ESAGET
  94. BEEP 4,8000:SC=SC+10:L=L+1
  95. IF L>=MAX THEN L=MAX-1
  96. COLOR 0
  97. LOCATE 6,23:PRINT SC;
  98. GOSUB @ESA
  99. RETURN
  100. @IWA
  101. EX=RND(30)+1:EY=RND(21)+1
  102. IF CHKCHR(EX,EY) != ASC(” ”) THEN CNT=CNT-1:RETURN
  103. IF ABS(EX-X(POS))<5 AND ABS(EY-Y(POS))<5 THEN CNT=CNT-1:RETURN
  104. CNT=0:BEEP 17:COLOR 8
  105. LOCATE EX,EY:PRINT ”В”;
  106. RETURN
  107. @DIA
  108. XD=RND(30)+1:YD=RND(21)+1
  109. IF CHKCHR(XD,YD) != ASC(” ”) THEN GOTO @DIA
  110. CNTD=50:BEEP 5:COLOR 3
  111. LOCATE XD,YD:PRINT ”б”;
  112. RETURN
  113. @DIACNT
  114. CNTD=CNTD-1
  115. IF CNTD==0 THEN LOCATE XD,YD:PRINT ” ”;
  116. RETURN
  117. @DIAGET
  118. BGMPLAY 3:CNTP=100
  119. SCOL=3:GOSUB @DRAW
  120. RETURN
  121. @POWERUP
  122. CNTP=CNTP-1
  123. IF CNTP==0 THEN SCOL=11:GOSUB @DRAW:BGMPLAY 8
  124. RETURN
  125. @BREAK
  126. BEEP 13:SC=SC+5:COLOR 0
  127. LOCATE 6,23:PRINT SC;
  128. RETURN
  129. @LOST
  130. BGMSTOP:BEEP 30,,127
  131. VSYNC 30:BEEP 34:COLOR 0
  132. LOCATE 11,10:PRINT ”GAME OVER”
  133. VSYNC 100:HICOL=0
  134. LOCATE 6,14:PRINT ”PUSH А:RESTART Б:END”
  135. IF SC > HI THEN HICOL=1:HI=SC:BGMPLAY 9
  136. @LOST1
  137. IF HICOL THEN COLOR RND(16):LOCATE 10,12:PRINT ”HIGH-SCORE!!”
  138. BTN=BUTTON()
  139. IF BTN == 16 THEN @START
  140. IF BTN != 32 THEN @LOST1
  141. COLOR 0:BGMSTOP
  142. END