BASICゲームの定番、スネークゲームのプチコンバージョンを作ってくれたぞ。
十字ボタンでヘビを動かして、赤いリンゴを取っていこう。
リンゴを取れば取るほどヘビの体は長くなっていく。カベやブロックはもちろん、自分の体にぶつかってもゲームオーバーなので、先に進むほど難しくなっていくしくみだ。
ときどき出現しては消えてしまう黄色のダイヤは、パワーアップアイテム。一定時間のパワーアップ中はブロックも食べてしまえるぞ。ジャマ物が減るだけじゃなく、スコアにもリンゴの半分(5点)プラスになるので、ぜひ活用していきたいね。
もりちゃん
JR-100/200使いでした。リハビリを兼ねて作成してみました。
CNTP
が少なくなってきたら色を変えるとか音で知らせるとかかな?
- ’┌─────┐
- ’│SNAKE│
- ’└─────┘
- VISIBLE 1,1,0,0,0,1
- GPAGE 0:GCOLOR 0:GCLS
- CLEAR:MAX=40
- DIM X(MAX),Y(MAX)
- @START
- CLS:BGMSTOP:COLOR 5
- FOR I=0 TO 31
- LOCATE I, 0:PRINT ”┿”;
- LOCATE I,22:PRINT ”┿”;
- NEXT I
- LOCATE 0,1
- FOR I=0 TO 20
- PRINT ”┿”;
- FOR J=1 TO 30
- PRINT ” ”;
- NEXT J
- PRINT ”┿”;
- NEXT I
- COLOR 0
- LOCATE 0,23:PRINT ”SCORE:0”;
- LOCATE 15,23:PRINT ”HIGH-SCORE:”;HI;
- FOR I=0 TO 3
- X(I)=I+13:Y(I)=10
- NEXT I
- FOR I=4 TO MAX-1
- X(I)=0:Y(I)=0
- NEXT I
- POS=3:L=4:SC=0:CNT=0:SPD=9:SCOL=11
- XX=1:YY=0:XD=0:YD=0:CNTD=0:CNTP=0
- GOSUB @DRAW
- COLOR 3
- LOCATE 12,12:PRINT ”READY!?”;
- FOR I=0 TO 2
- BEEP 16:VSYNC 60
- NEXT I
- COLOR 13
- LOCATE 12,12:PRINT ” GO! ”;
- BEEP 18:VSYNC 60
- LOCATE 12,12:PRINT ” ”;
- GOSUB @ESA
- BGMPLAY 8
- @LOOP
- BTN1=0
- FOR I=0 TO SPD
- VSYNC 1:BTN1=BUTTON()
- IF BTN1 THEN BTN=BTN1
- NEXT I
- IF BTN==1 AND YY!= 1 THEN XX= 0:YY=-1
- IF BTN==2 AND YY!=-1 THEN XX= 0:YY= 1
- IF BTN==4 AND XX!= 1 THEN XX=-1:YY= 0
- IF BTN==8 AND XX!=-1 THEN XX= 1:YY= 0
- XO=X(POS):YO=Y(POS)
- POSC=POS-L+1
- IF POSC<0 THEN POSC=POSC+MAX
- POS=POS+1
- IF POS>=MAX THEN POS=0
- X(POS)=XO+XX:Y(POS)=YO+YY
- C=CHKCHR(X(POS),Y(POS))
- IF C==ASC(”Ш”) THEN GOSUB @ESAGET:GOTO @NEXT1
- IF C==ASC(”б”) THEN GOSUB @DIAGET:GOTO @NEXT1
- IF C==ASC(”В”) AND CNTP>0 THEN GOSUB @BREAK:GOTO @NEXT1
- IF C!=ASC(” ”) THEN GOTO @LOST
- @NEXT1
- LOCATE X(POSC),Y(POSC):PRINT ” ”;
- COLOR SCOL
- LOCATE X(POS),Y(POS):PRINT ”●”;
- CNT=CNT+1
- IF CNT>50 THEN GOSUB @IWA
- IF CNTD>0 THEN GOSUB @DIACNT
- IF CNTP>0 THEN GOSUB @POWERUP
- IF CNTD==0 AND CNTP==0 AND RND(200)==0 THEN GOSUB @DIA
- GOTO @LOOP
- @DRAW
- POSC=POS
- COLOR SCOL
- FOR I=0 TO L-1
- LOCATE X(POSC),Y(POSC):PRINT ”●”;
- POSC=POSC-1
- IF POSC<0 THEN POSC=MAX-1
- NEXT I
- RETURN
- @ESA
- EX=RND(30)+1:EY=RND(21)+1
- IF CHKCHR(EX,EY) != ASC(” ”) THEN GOTO @ESA
- COLOR 13
- LOCATE EX,EY:PRINT ”Ш”;
- SPD=SPD-0.3
- IF SPD < 1 THEN SPD=1
- RETURN
- @ESAGET
- BEEP 4,8000:SC=SC+10:L=L+1
- IF L>=MAX THEN L=MAX-1
- COLOR 0
- LOCATE 6,23:PRINT SC;
- GOSUB @ESA
- RETURN
- @IWA
- EX=RND(30)+1:EY=RND(21)+1
- IF CHKCHR(EX,EY) != ASC(” ”) THEN CNT=CNT-1:RETURN
- IF ABS(EX-X(POS))<5 AND ABS(EY-Y(POS))<5 THEN CNT=CNT-1:RETURN
- CNT=0:BEEP 17:COLOR 8
- LOCATE EX,EY:PRINT ”В”;
- RETURN
- @DIA
- XD=RND(30)+1:YD=RND(21)+1
- IF CHKCHR(XD,YD) != ASC(” ”) THEN GOTO @DIA
- CNTD=50:BEEP 5:COLOR 3
- LOCATE XD,YD:PRINT ”б”;
- RETURN
- @DIACNT
- CNTD=CNTD-1
- IF CNTD==0 THEN LOCATE XD,YD:PRINT ” ”;
- RETURN
- @DIAGET
- BGMPLAY 3:CNTP=100
- SCOL=3:GOSUB @DRAW
- RETURN
- @POWERUP
- CNTP=CNTP-1
- IF CNTP==0 THEN SCOL=11:GOSUB @DRAW:BGMPLAY 8
- RETURN
- @BREAK
- BEEP 13:SC=SC+5:COLOR 0
- LOCATE 6,23:PRINT SC;
- RETURN
- @LOST
- BGMSTOP:BEEP 30,,127
- VSYNC 30:BEEP 34:COLOR 0
- LOCATE 11,10:PRINT ”GAME OVER”
- VSYNC 100:HICOL=0
- LOCATE 6,14:PRINT ”PUSH А:RESTART Б:END”
- IF SC > HI THEN HICOL=1:HI=SC:BGMPLAY 9
- @LOST1
- IF HICOL THEN COLOR RND(16):LOCATE 10,12:PRINT ”HIGH-SCORE!!”
- BTN=BUTTON()
- IF BTN == 16 THEN @START
- IF BTN != 32 THEN @LOST1
- COLOR 0:BGMSTOP
- END