SC | スコア |
PC | 主人公の色 |
PX,PY | 主人公の座標 |
PW | 主人公の体力 |
LM | 三角コーンの最大個数 |
LX,LY | 三角コーンの座標 |
LC[] | 三角コーンの色 |
LD[],LT[] | 角コーンの回転角、回転速度 |
LR[] | レーザーの長さ |
LS | 新規発生三角コーンに割り当てるスプライト番号 |
CO[] | 各種色情報 |
NI | ゲーム開始から出てきた三角コーンの数 |
NC | 次の三角コーンが出てくるまでの待ちカウンタ |
GX,GY | 主人公のスプライトの位置調整用 |
DX,DY,NX,NY | 当たり判定用変換座標 |
VX,VY | 汎用ベクトル |
'
' "LASERS" by OBONO
'
ACLS:BACKCOLOR RGB(48,64,48):GPRIO 0
LM=16:DIM LC[LM],LD[LM],LT[LM],LR[LM],CO[4]
CO[0]=RGB(255,128,192) 'スプライト あか
CO[1]=RGB(128,192,255) 'スプライト あお
CO[2]=RGB(255, 64,128) 'レーザー あか
CO[3]=RGB( 64,128,255) 'レーザー あお
' ゲーム の しょきか
@INIT:CLS:SPCLR
SC=0:PC=0:PX=200:PY=120:PW=16:NI=0:NC=0:LS=0
FOR I=0 TO LM-1
SPSET I,363:SPHOME I,8,8:SPSCALE I,2,2
SPOFS I,-20,0:LR[I]=0
NEXT
SPSET LM,310:SPSCALE LM,2,2:SPSET LM+1,1236
SPANIM LM,"I",16,310,16,311,0:BGMPLAY 25
' しゅじんこう の そうさ
@LOOP:GCLS:STICK OUT VX,VY
PX=MIN(MAX(PX+VX*2,16),384):GX=16
PY=MIN(MAX(PY-VY*2,16),224):GY=16
IF BUTTON(2) AND #A THEN PC=(PC+1) MOD 2
' レーザー の しょり
FOR I=0 TO LM-1
SPOFS I OUT LX,LY
C=LC[I]:R=LR[I]:D=LD[I]+LT[I]
IF (SPCHK(I) AND #CHKXY)==0 THEN R=R-30
R=MIN(MAX(R+6,0),480):DX=PX-LX:DY=PY-LY
VX=SIN(RAD(D)):VY=-COS(RAD(D))
NX=DX*VX+DY*VY:NY=DX*VY-DY*VX
IF NX>=0 && NX<R && ABS(NY)<=12 THEN
R=NX
IF PC==C THEN
SC=SC+1:BEEP 62,C*500,,PX/3.125
ELSE
PW=PW-1:BEEP 111,-RND(2000),,PX/3.125
GX=19-RND(7):GY=19-RND(7)
ENDIF
ENDIF
FOR Y=0 TO 1:FOR X=0 TO 1
GLINE LX-X,LY-Y,LX+VX*R-X,LY+VY*R-Y,CO[C+2]
NEXT:NEXT
LD[I]=D:LR[I]=R:SPROT I,D:SPCOLOR I,CO[C]
NEXT
' あたらしい コーン はっせい
IF NC<=0 THEN
C=RND(2):LC[LS]=C:LD[LS]=RND(360)
LT[LS]=(RNDF()*2+1)*(RND(2)*2-1):LR[LS]=0
X=RND(2)*440:SPOFS LS,X-20,RND(240)
SPANIM LS,"XY",-300+RND(100),420-X,RND(240)
NI=NI+1:NC=MAX(90-NI/4,30):LS=(LS+1) MOD LM
BEEP 37,C*500,,X/3.46
ENDIF
' いろいろ
SC=SC+1/8:PW=MIN(MAX(PW+1/64,0),16):NC=NC-1
LOCATE 0,0,-1:? "スコア ";FLOOR(SC):? "コーン ";NI
SPOFS LM,PX-GX,PY-GY:SPCOLOR LM,CO[PC]
SPOFS LM+1,PX-16,PY-19:SPSCALE LM+1,PW/8,1/4
VSYNC:IF PW>0 THEN @LOOP
' ゲーム オーバー
SPSTOP:SPCHR LM,312:BGMSTOP:BEEP 127
@END:IF BUTTON(2) AND #B THEN @INIT ELSE @END
' EOF