SmileBASIC

プログラムリスト

SYS/GAME5VS

トップメニュー「SmileBASICでプログラムを作る」から、LOAD"SYS/GAME5VS"でプログラムが読み込まれます。キーボードの「EDIT」キーを押すと、このプログラムが自由に編集できます。


'
' GAME5VS        
' カクトウゲーム いしょくばん 
'

GOSUB @INIT

WHILE 1
GOSUB @TITLE

'--- MAIN
WHILE 1
 
 N=AN+I
 INOT=(I+1) MOD 2
 NNOT=AN+INOT
 XNOT=SPVAR(NNOT,VX)
 X1=1-(I*2)

 BT=0
 IF I==0 THEN BT=STKANDBTN()
 IF I==1 AND RND(2)==0 THEN BT=POW(2,RND(8))

 GOSUB @VPOP
 GOSUB @JUMP
 GOSUB @PUNCH
 GOSUB @DAMAGE
 GOSUB @MOVE
 GOSUB @HITCHK
 GOSUB @VPUSH

 VSYNC 1
 IF HP<=0 THEN BREAK

 I=(I+1) MOD 2
 
WEND


'--- 
BGMSTOP
SPCHR AN+I,496+2048+(I*8)
A=0
A1=-1
IF I==1 THEN A1=-A1

WHILE 1
 A=A+A1
 SPROT AN+I,A
 VSYNC 1
 IF A<-45 OR A>45 THEN BREAK
WEND

BGMPLAY 4
WAIT 180
WEND

'-----
@MOVE
IF (BT AND 1) THEN KEN=-50
IF (BT AND 2) THEN KEN=-8
IF (BT AND 4) THEN X=X-1
IF (BT AND 8) THEN X=X+1

IF ABS(X-XNOT)<128 THEN X=X-X1 '
IF X<64  THEN X=64
IF X>GRW-64 THEN X=GRW-64
SPOFS N,X,Y,Z

'GPSET X,1,RGB(255,5,5)

RETURN

'--- ショキカ
@INIT
XSCREEN 0
VISIBLE 1,1,1,1
GPRIO 1024

DIM NAM$[2]
NAM$[0]="YOU"
NAM$[1]="CPU"

JIMEN=24
JY=JIMEN*8-64

AN=4  'カラダ スプライトNO.
BN=2  'ブキ スプライトNO.
CN=0  'ヒバナ スプライトNO.

JMPMAX=10
PCHMAX=9
PCHHF=FLOOR(PCHMAX/2)
JMPHF=FLOOR(JMPMAX/2)

VX=0   'ザヒョウ
VY=1   '
VHP=2  'タイリョク
VJMP=3 'ジャンプ
VPCH=4 'パンチ
VKEN=5 'ケン ノ イチ
VDMG=6 'ダメージ

FOR I=0 TO 1
 N=AN+I
 SPSET N,496+2048+(I*8)  'MAN
 SCL=8
 SPSCALE N,SCL,SCL
 IF I THEN SPCOLOR N,RGB(128,128,255)

 N=BN+I
 SPSET N,142+2048  'SWORD
 SPROT N,-90+(I*180)
 SCL=4
 SPSCALE N,SCL,SCL

 N=CN+I
 SPSET N,1353+2048   'EFFECT
 SCL=4
 SPSCALE N,SCL,SCL
NEXT


'--- ハイケイ
GCLS

GRW=400
GRH=240

'SKY
FOR Y=0 TO JY-1
 C = 255*Y/(JY-1)
 GLINE 0,Y,399,Y,RGB(0,0,C)
NEXT

'GROUND
FOR Y=JY TO GRH-1
 C=255*(Y-JY)/((GRH-1)-JY)
 GLINE 0,Y,GRW-1,Y,RGB(C,C,0)
NEXT

Y=JY
C=0
J=0
WHILE Y<GRH
 GLINE 0,Y,399,Y,C
 J=J+2
 Y=Y+J
WEND

CX=200
C=RGB(64,64,0)
FOR X=0 TO 128 STEP 10
 GLINE CX+X,JY,CX+X*7,GRH-1,C
 GLINE CX-X,JY,CX-X*7,GRH-1,C
NEXT

'STARS
FOR I=1 TO 300
 C=RGB(RND(255),RND(255),255)
 GPSET RND(GRW),RND(JY),C
NEXT

'
LOGOSP=255:SPSET LOGOSP,4095:SPHIDE LOGOSP
'
RETURN

'---デ-タ ヨミコミ
@VPOP
X  =SPVAR(N,VX)
Y  =SPVAR(N,VY)
HP =SPVAR(N,VHP)
JMP=SPVAR(N,VJMP)
PCH=SPVAR(N,VPCH)
KEN=SPVAR(N,VKEN)
DMG=SPVAR(N,VDMG)
RETURN

'---デ-タ カクノウ
@VPUSH
SPVAR N,VX  ,X
SPVAR N,VY  ,Y
SPVAR N,VHP ,HP
SPVAR N,VJMP,JMP
SPVAR N,VPCH,PCH
SPVAR N,VKEN,KEN
SPVAR N,VDMG,DMG
RETURN

'--- 
@JUMP
IF JMP THEN
'--- ジャンプ チュウ
 Y=Y+(JMPHF-JMP)
 JMP=JMP-0.5
 IF JMP<0 THEN JMP=0
 RETURN
ENDIF

IF DMG THEN RETURN
IF Y<JY+64 THEN Y=Y+JMPMAX
IF Y>JY+64 THEN Y=JY+64:JMP=0
IF (BT AND 16) THEN
'--- ジャンプ スタ-ト
 JMP=JMPMAX
 'BEEP 8
 RETURN
ENDIF
RETURN


'--- アタリ ハンテイ
@HITCHK
X2=(X1*40)
IF PCH<=PCHHF THEN X2=0
KX=X+X2        'ケン ノ ザヒョウ
KY=Y+KEN
SPOFS BN+I,KX,KY,KZ

IF SPCHK(CN+I) THEN RETURN
IF DMG THEN RETURN
IF PCH<=PCHHF THEN RETURN

IF ABS(KX-XNOT)>96 THEN RETURN

DMGNOT=SPVAR(NNOT,VDMG)
IF DMGNOT THEN RETURN  'アイテガ ダメージチュウ

KENNOT=SPVAR(NNOT,VKEN)
IF ABS(KEN-KENNOT)<8 THEN
'--- ボウギョ
 KX2=KX+RND(60)-30
 KY2=KY+RND(60)-30
 PCH=PCHHF
 N=CN+I
 C=1356+2048
 T=10
 SPCOLOR N,RGB(128,255,255,255)
 SPANIM N,"XY",1,KX,KY,-T*4,KX2,KY2,1,999,999
 SPANIM N,"I",T,C,T,C+1,T,C+2,T,C+3,1
 BEEP 8
 RETURN
ENDIF

SPVAR NNOT,VDMG,8  'コウゲキ ヒット
RETURN


'--- ダメージ
@DAMAGE
IF DMG==0 THEN RETURN
X=X-X1
DMG=DMG-1
IF DMG THEN RETURN
HP=HP-1
IF HP<0 THEN HP=0
GOSUB @PRTHP
RETURN

'--- コウゲキ
@PUNCH
IF PCH THEN
'--- コウゲキ チュウ
 X=X+(PCH-PCHHF)*X1
 IF PCH<PCHHF THEN SPCHR N,496+2048+(I*8)
 PCH=PCH-1
 IF PCH<0 THEN PCH=0
 RETURN
ENDIF

IF DMG THEN RETURN
IF (BT AND 32)==0 THEN RETURN
PCH=PCHMAX
BEEP 1
SPCHR N,497+2048+(I*8)
RETURN


'--- タイリョク ヒョウジ
@PRTHP
HX=(I*30)+4
COLOR 15
LOCATE HX,0
PRINT NAM$[I]

FOR TMP=0 TO 10
 IF HP>TMP THEN COLOR 5 ELSE COLOR 2
 LOCATE TMP+HX,1,-200
 PRINT ""
NEXT
RETURN



'--- 
@TITLE
Z=-32
KZ=-80
KZ2=-150

BGMSTOP
CLS
'
SPOFS LOGOSP,340,200,-32:SPSHOW LOGOSP
'
FOR I=0 TO 1
 N=AN+I
 X=((GRW-128)*I)+64
 Y=JY+64
 HP=11
 KEN=-16
 DMG=0
 PCH=0
 SPOFS N,X,Y,Z
 GOSUB @VPUSH

 SPOFS BN+I,999,999,KZ
 SPOFS CN+I,999,999,KZ2
NEXT

WAIT 20
COLOR 15
RESTORE @TITLE2

FOR Y=3 TO 99
 READ A$
 IF A$=="END" THEN BREAK
 X=25-(LEN(A$)/2)
 LOCATE X,Y,-100
 PRINT A$
NEXT

@TITLE2
DATA "         "
DATA "     "
DATA "        "
DATA "         "
DATA "        "
DATA " "
DATA "        "
DATA "      "
DATA "      "
DATA "        "
DATA "      "
DATA "KAKUTOU GAME"
DATA ""
DATA "HOW TO PLAY"
DATA ""
DATA "[A]BUTTON:ジャンプ"
DATA ""
DATA "[B]BUTTON:コウゲキ"
DATA ""
DATA "[]BUTTON:イドウ"
DATA ""
DATA "[]BUTTON:ケン カマエ"
DATA ""
DATA ""
DATA "PUSH ANY BUTTON"
DATA ""
DATA "END"

'--- オジギ
A=0
A1=1

WHILE 1
 A=A+A1
 IF A<=0 OR A>=30 THEN A1=-A1
 SPROT AN+0,A
 SPROT AN+1,-A

 VSYNC 2
 BT=STKANDBTN()
 IF BT THEN BREAK
WEND

SPROT AN+0,0
SPROT AN+1,0
CLS

J=20
FOR I=0 TO 8
 BEEP 58
 WAIT J+5
 J=J/2
NEXT
FOR I=0 TO 1
 GOSUB @PRTHP
NEXT
BGMPLAY 1

A$="[A]ジャンプ  [B]コウゲキ  []イドウ  []カマエ"
X=25-(LEN(A$)/2)
Y=28
COLOR 1
LOCATE X,Y,-200
PRINT A$

I=0
RETURN

'-----
DEF STKANDBTN()
 SLV=0.2  'THRESHOLD
 BTN=BUTTON()
 STICK OUT SX,SY
 IF (SY>SLV)  THEN BTN=BTN OR 1
 IF (SY<-SLV) THEN BTN=BTN OR 2
 IF (SX<-SLV) THEN BTN=BTN OR 4
 IF (SX>SLV)  THEN BTN=BTN OR 8
 RETURN BTN
END