スタンダードなブロックくずしタイプのゲームを作ってみたぞ。
Aボタンでボール発射。ブロックやカベに反射するボールを、十字ボタン左右で動かすパドルで受け止めよう。ボールを落としてしまうとミスになるぞ。
キミはボール10個をなくす前に、全部のブロックを壊すことができるかな?
CHKCHR
を使って、ブロックのどこに当たったのかが文字情報でわかり、それ次第でボールの反射を制御するしくみなのじゃな。
- ’┌─────────┐
- ’│フ゛ロッククス゛シ│
- ’└─────────┘
- CLEAR
- VISIBLE 1,1,0,0,1,0
- SPPAGE 0:SPCLR
- ’
- DIM B$(2,2)
- ’
- DATA ” ”
- DATA ” ”
- ’
- DATA ”┌─┐”
- DATA ”└─┘”
- ’
- FOR I=0 TO 1
- FOR J=0 TO 1
- READ B$(I,J)
- NEXT
- NEXT
- ’---
- DIM CL(8)
- DATA 3,4,9,13,12
- FOR I=0 TO 4
- READ CL(I)
- NEXT
- ’---
- FLW=-1:REQ=1
- ’---
- @LOOP
- OLDB=B:B=BUTTON()
- IF FLW==REQ THEN @SKIP
- FLW=REQ
- ON FLW GOSUB @GI,@TI,@CI,@EI
- @SKIP
- ON FLW GOSUB @GM,@TM,@CM,@EM
- VSYNC 1
- GOTO @LOOP
- ’---
- @GM
- VX=0
- IF B==16 THEN BS=1
- IF B AND 4 THEN VX=-1
- IF B AND 8 THEN VX=1
- IF VX==0 THEN @BMOVE
- PX=PX+VX*6
- IF PX<16 THEN PX=16
- IF PX>239 THEN PX=239
- ’---
- @BMOVE
- IF BS==0 THEN @PUTALL
- ’---タマイト゛ウ
- OLDBY=BY
- BX=BX+(BVX*SPD)
- BY=BY+(BVY*SPD)
- ’---タマトフ゛ロック
- X=FLOOR(BX/8)
- Y=FLOOR(BY/8)
- C=CHKCHR(X,Y)
- IF C==-1 THEN @CHKWALL
- C$=CHR$(C)
- IF C$==”└” THEN @HITL
- IF C$==”┘” THEN @HITL
- IF C$==”┌” THEN @HITH
- IF C$==”┐” THEN @HITH
- IF C$==”─” THEN @HIT
- GOTO @CHKWALL
- ’---フ゛ロックテ゛ハンシャ
- @HITL
- IF BVY<0 THEN @HIT
- GOTO @HITX
- @HITH
- IF BVY>0 THEN @HIT
- @HITX
- BVX=-BVX
- GOTO @HIT2
- ’---フ゛ロックハカイ
- @HIT
- BVY=-BVY
- ’---
- @HIT2
- BEEP 8
- I=FLOOR((Y-4)/2)
- SC=SC+((4-I)*10)
- I=(I*10)+FLOOR((X-1)/3)
- T=0:GOSUB @PUTBLK
- ’---クリア
- BLK=BLK-1
- IF BLK==0 THEN REQ=2
- ’---タマトカヘ゛
- @CHKWALL
- IF BX<16 THEN BX=16:GOSUB @REVX
- IF BX>239 THEN BX=239:GOSUB @REVX
- IF BY<16 THEN BY=16:GOSUB @REVY
- IF BY>224 THEN @DEAD
- IF OLDBY>PY THEN @PUTALL
- IF BY<PY THEN @PUTALL
- ’---フ゜レイヤ-トノハンテイ
- X=ABS(BX-PX)
- IF X>20 THEN @PUTALL
- ’---ハンシャ
- GOSUB @REVY2
- BY=PY-1
- GOTO @PUTALL
- ’---タマショキカ
- @DEAD
- BS=0:BVY=-2:BY=PY-1
- LF=LF-1:SPD=1.0
- BEEP 5
- ’---ケ゛-ムオ-ハ゛-
- IF LF<0 THEN REQ=3:LF=0
- ’---
- @PUTALL
- GOSUB @PUTBAR
- GOSUB @PUTBALL
- GOSUB @PUTSTAT
- RETURN
- ’---
- @REVX
- BVX=-BVX:BEEP 8
- SPD=SPD+0.05
- RETURN
- ’---
- @REVY
- SPD=SPD+0.1
- @REVY2
- BVY=-BVY:BEEP 8
- RETURN
- ’---
- @PUTBLK
- X=FLOOR(I%10)*3+1
- Y=FLOOR(I/10)
- COLOR CL(Y)
- Y=Y*2+4
- FOR J=0 TO 1
- LOCATE X,Y+J
- PRINT B$(T,J)
- NEXT
- COLOR 0
- RETURN
- ’---
- @PUTBAR
- SPOFS 1,PX-16,PY
- SPOFS 2,PX,PY
- RETURN
- ’---
- @PUTBALL
- IF BS==0 THEN BX=PX:BY=PY-1
- SPOFS 0,BX-8,BY-8
- RETURN
- ’---
- @GI
- VISIBLE 0,1,0,0,0,0
- CLS
- BGMPLAY 0
- ’
- BX=128:BY=22*8:BS=0
- BVX=2:BVY=-2
- SPSET 0,252,2,0,0,0
- SPANIM 0,2,4,0
- ’---
- PX=128:PY=22*8
- SC=0:LF=9:SPD=1.0
- SPSET 1,272,12,0,0,1
- SPSET 2,272,12,1,0,1
- ’
- COLOR 8
- FOR I=0 TO 31:PRINT”В”;:NEXT
- FOR I=1 TO 22
- LOCATE 0,I:PRINT”В”
- LOCATE 31,I:PRINT”В”;
- NEXT
- COLOR 0
- ’---
- T=1:BLK=0
- FOR I=0 TO 10*4-1
- GOSUB @PUTBLK
- BLK=BLK+1
- NEXT
- ’---
- GOSUB @PUTALL
- ’---
- VISIBLE 1,1,0,0,1,0
- RETURN
- ’---
- @PUTSTAT
- LOCATE 0,23
- PRINT”SCORE:”;SC;
- LOCATE 24,23
- PRINT”LEFT:”;LF;
- RETURN
- ’┌────┐
- ’│タイトル│
- ’└────┘
- @TI
- CLS:SPCLR
- BGMPLAY 15
- LOCATE 0,6
- PRINT” ВВВл Вл ВВВВлВВВВлВ Вл”
- PRINT” ВлВ В Вл В Вл лВ ВВ ”
- PRINT” ВВВВлВ В В В ВВВлл”
- PRINT” Вл В В В В В ВлВВл”
- PRINT” ВВВВ ВВВВлВВВВ ВВВВлВ лВ ”
- PRINT” л лл лл лл ллл лл”
- LOCATE 8,14
- PRINT”PUSH ANY BUTTON”
- LOCATE 4,22
- PRINT”(C)2011 SmileBoom Co.Ltd.”
- RETURN
- ’---
- @TM
- IF OLDB!=0 THEN RETURN
- IF B==0 THEN RETURN
- ’---
- REQ=0
- RETURN
- ’┌───┐
- ’│クリア│
- ’└───┘
- @CI
- BGMPLAY 4
- RETURN
- ’---
- @CM
- IF BGMCHK() THEN RETURN
- IF B!=0 THEN RETURN
- REQ=1
- RETURN
- ’┌─────────┐
- ’│ケ゛-ムオ-ハ゛-│
- ’└─────────┘
- @EI
- BGMPLAY 6
- SPCLR
- LOCATE 11,12
- PRINT”GAME OVER”
- RETURN
- ’---
- @EM
- IF BGMCHK() THEN RETURN
- IF B!=0 THEN RETURN
- REQ=1
- RETURN