スマイルブーム公式ブログでコラム連載中のブリスター・ジョン氏が発売日翌日にスマイルブーム本社まで持ってきたのがこのプログラム。
いわゆるスネークゲームのバリエーションで、十字ボタンで操作して伸びていく自分のカラダに当たるとゲームオーバーだ。
画面上のハートマークを全部取ればステージクリア。ステージが進むほどハートの数も増えていくぞ。
ブリスター・ジョン
25年前の私は配列変数の理屈はわかっても、どう使えばいいのかがどうしても理解できないダメな子で、とうとう「あるけあるけゲーム」を自分で作れませんでした。時は流れていま、作り始めてみると不思議なくらい簡単にできてしまったのです。そうか、フラグの概念を知ったからか? おーい当時の僕、聞こえるかーい! お前は25年後にやりとげたぞー!
FOOD(12,8)
の中身が1
とすれば、横12縦8の位置にハートマークがある、ということじゃ。CHKCHR
でその座標にハートマークがあるか直接調べられるから、あえて配列を使う必要はないんだけど……。VSYNC
を10使っているせいかな? VSYNCの待機中にボタンを押しても取得されないんだね。VSYNC 1
にして、10回に1回だけ動くようにループを作るのがいいじゃろうな。その間受け付けたボタン入力を反映すれば解決じゃ。
- ’===WALKING===
- ’---ショキセッテイ
- CLEAR
- COLOR 0
- SPEED=10
- FOODMAX=5
- DIM ENEMY(32,24)
- DIM FOOD(32,24)
- STAGE=1
- ’---マッフ゜ヒ゛ョウカ゛
- @MAP
- CLS
- ’ヘンスウ ショキカ
- FOR I=0 TO 31
- FOR J=0 TO 23
- ENEMY(I,J)=0
- FOOD(I,J)=0
- NEXT
- NEXT
- ’カヘ゛
- FOR I=0 TO 31
- LOCATE I,0:PRINT”╂”;
- ENEMY(I,0)=1
- LOCATE I,22:PRINT”╂”;
- ENEMY(I,22)=1
- NEXT
- FOR I=1 TO 21
- LOCATE 0,I:PRINT”╂”;
- ENEMY(0,I)=1
- LOCATE 31,I:PRINT”╂”;
- ENEMY(31,I)=1
- NEXT
- LOCATE 0,0:PRINT”STAGE:”;STAGE;
- ’エサ
- COLOR 12
- FOODNOW=FOODMAX+STAGE-1
- FOR I=1 TO FOODNOW
- @FDAGAIN
- FX=RND(30)+1
- FY=RND(21)+1
- LOCATE FX,FY:PRINT”а”;
- IF FOOD(FX,FY)==1 THEN @FDAGAIN
- FOOD(FX,FY)=1
- NEXT
- ’フ゜レイヤ-
- PX=15:PY=11
- LOCATE PX,PY
- COLOR 0
- PRINT”@”;
- BODYCOL=3
- B1=0
- ’---ニュウリョク
- @INBTN
- B=BUTTON()
- IF B==0 AND B1==0 THEN @INBTN
- BGM=BGMCHK()
- IF BGM==0 THEN BGMPLAY 7
- IF B==0 THEN B=B1
- ’---イト゛ウ
- @MOVE
- COLOR BODYCOL
- LOCATE PX,PY:PRINT”┿”;
- COLOR 0
- ENEMY(PX,PY)=1
- IF B==1 THEN PY=PY-1:B1=B
- IF B==2 THEN PY=PY+1:B1=B
- IF B==4 THEN PX=PX-1:B1=B
- IF B==8 THEN PX=PX+1:B1=B
- LOCATE PX,PY
- PRINT”@”;
- IF ENEMY(PX,PY)==1 THEN @GAMEOVER
- IF FOOD(PX,PY)==1 THEN GOSUB @GETFOOD
- VSYNC SPEED
- GOTO @INBTN
- ’---エサ ケ゛ット
- @GETFOOD
- BEEP 7
- FOODNOW=FOODNOW-1
- IF FOODNOW==0 THEN @STAGECLR
- BODYCOL=BODYCOL+1
- IF BODYCOL==16 THEN BODYCOL=2
- RETURN
- ’---ステ-シ゛クリア
- @STAGECLR
- BGMPLAY 4
- LOCATE 11,11
- PRINT”STAGE CLEAR”;
- VSYNC 150
- STAGE=STAGE+1
- GOTO @MAP
- ’---ケ゛-ムオ-ハ゛-
- @GAMEOVER
- BEEP 13
- VSYNC 12
- BGMPLAY 6
- LOCATE 11,11
- PRINT”GAME OVER”;
- END