初代『ESCAPE』の続編、スプライトを使ったジャンプアクションのサンプルがこのプログラムだ。
ガイコツの主人公を操作して、カギを取って扉にたどりつけば1面クリアー。
「ある法則」で動くドロボーもカギを狙っているが、時にはこれをうまく利用することも必要とか……?
操作は十字ボタン左右で移動、Bボタンでジャンプ、Yボタンでダッシュ。
DATA
文で定義している1文字がマップ1マスに対応してるのかあ。ステージもカンタンに増やせそうだよ。
- ’┌─────────┐
- ’│アクションケ゛-ム│
- ’└─────────┘
- VISIBLE 1,1,1,1,1,0
- BGMSTOP
- COLOR 0:CLS
- BGPAGE 0
- BGOFS 0,0,0
- BGOFS 1,0,0
- CLEAR
- DIM W(6,4),M(16,12)
- ’---
- _T=0 :’シュルイ
- _D=1 :’ホウコウ
- _X=2 :’サ゛ヒョウ
- _Y=3 :’
- _VX=4 :’イト゛ウリョウ
- _VY=5 :’
- _V=6 :’シ゛ャンフ゜リョウ
- _J=7 :’シ゛ャンフ゜シ゛ョウタイ
- _B=8 :’カヘ゛シ゛ョウホウ
- _S=9 :’スヒ゜-ト゛
- _N=10 :’キャラ
- _JC=11 :’シ゛ャンフ゜シ゛カン
- ’_______
- STGMAX=3
- _MAX=16
- OMAX=3+3
- DIM O(OMAX,_MAX)
- PR=1
- GOSUB @GINIT
- FLOW=-1:REQ=0
- STG=0
- ’---
- @LOOP
- OLDB=B:B=BUTTON()
- IF FLOW==REQ GOTO @FSKIP
- FLOW=REQ
- ON FLOW GOSUB @TI,@GI,@CI
- @FSKIP
- ON FLOW GOSUB @TM,@GM,@CM
- VSYNC 1
- GOTO @LOOP
- END
- ’┌────┐
- ’│ケ゛-ム│
- ’└────┘
- @GI
- RETURN
- ’---
- @GM
- KX=O(1,_X)
- KY=O(1,_Y)
- FOR IX=0 TO OMAX-1
- ’---
- PX=O(IX,_X)
- PY=O(IX,_Y)
- VX=O(IX,_VX)
- VY=O(IX,_VY)
- JC=O(IX,_JC)
- JS=O(IX,_J)
- BG=O(IX,_B)
- PD=O(IX,_D)
- PV=O(IX,_V)
- ’---
- PS=O(IX,_S)
- PN=O(IX,_N)
- ’---
- ON O(IX,_T) GOSUB @_X,@_P,@_K,@_D,@_E,@_W
- ’---
- O(IX,_X)=PX
- O(IX,_Y)=PY
- O(IX,_VX)=VX
- O(IX,_VY)=VY
- O(IX,_JC)=JC
- O(IX,_J)=JS
- O(IX,_B)=BG
- O(IX,_D)=PD
- O(IX,_V)=PV
- ’---
- NEXT
- RETURN
- ’---0:ナシ
- @_X
- RETURN
- ’---3:ト゛ア
- @_D
- IF KN==-1 THEN RETURN
- X=O(KN,_X):Y=O(KN,_Y)
- GOSUB @HCHK
- IF R==FALSE THEN RETURN
- ’---
- REQ=2
- RETURN
- ’---2:カキ゛
- @_K
- IF KN==-1 THEN RETURN
- X=O(KN,_X):Y=O(KN,_Y)
- SPOFS IX,X-8,Y-32
- RETURN
- ’---ト゛アヒラク
- @OPENDOOR
- KN=IX
- I=OMAX-1
- O(I,_N)=59
- SPCHR I,O(I,_N)
- BEEP 15
- RETURN
- ’---
- @HITCHK
- X=KX:Y=KY
- @HCHK
- R=FALSE
- IF PX<X-8 THEN RETURN
- IF PX>X+8 THEN RETURN
- IF PY<Y-8 THEN RETURN
- IF PY>Y+8 THEN RETURN
- R=TRUE
- RETURN
- ’---5:テキ
- @_W
- VX=0.5
- IF PD THEN VX=-VX
- PY=PY+VY
- PX=PX+VX
- JC=JC+1
- IF JC<8 GOTO @E5CHK
- JC=0
- VY=-VY
- @E5CHK
- GOSUB @SIDE
- IF R==1 THEN PD=PD XOR 2
- SPCHR IX,PD*2+PN
- SPOFS IX,PX-8,PY-16
- RETURN
- ’---4:テキ
- @_E
- NS=4:PV=-6:PD=0:V=0.5
- ’BT=RND(256)
- ’V=RND(3)-1
- ’IF V<0 THEN PD=2
- IF O(0,_D)==0 THEN PD=2:V=-V
- GOTO @MOVE
- ’---1:フ゜レイヤ-
- @_P
- BT=B:OB=OLDB:NS=2
- V=0
- IF BT AND 4 THEN V=-0.25:PD=2
- IF BT AND 8 THEN V=V+0.25:PD=0
- ’---
- @MOVE
- ’---
- IF KN!=-1 GOTO @MVTOP
- GOSUB @HITCHK
- IF R==FALSE GOTO @MVTOP
- ’---カキ゛シュトク
- GOSUB @OPENDOOR
- ’---
- @MVTOP
- IF V!=0 GOTO @PVCLC
- ’---ケ゛ンソク
- IF VX>-0.01 AND VX<0.01 THEN VX=0
- IF VX<0 THEN V=0.25
- IF VX>0 THEN V=-0.25
- @PVCLC
- VX=VX+V
- IF VX<-2 THEN VX=-2
- IF VX>2 THEN VX=2
- ’---カソク
- S=PS
- IF BT AND 128 THEN S=S*2.0
- VX=VX*S
- IF JS GOTO @PJUMP
- ’---シ゛ャンフ゜ホ゛タンカクニン
- GOSUB @CHKJUMP
- GOTO @PMOVE
- ’---シ゛ャンフ゜シ゛ソ゛ク
- @PJUMP
- IF JC==0 GOTO @PMOVE
- IF BT AND 32 GOTO @PJCONT
- JC=0
- GOTO @PMOVE
- ’---
- @PJCONT
- JC=JC-1
- VY=PV
- ’---
- @PMOVE
- PX=PX+VX
- PY=PY+VY
- GOSUB @SIDE
- ’---
- SPCHR IX,PD*NS+PN
- SPOFS IX,PX-8,PY-16
- ’---アシモトカクニン(オチル?)
- JS=TRUE
- VY=VY+(0.98/2)
- IF VY>8 THEN VY=8
- X=PX:Y=PY+VY+1
- GOSUB @CHKWALL
- IF VY>0 GOTO @CHKUNDER
- ’---シ゛ョウショウチュウ
- BG=R:Y=Y-17
- GOSUB @CHKWALL
- IF R!=1 GOTO @PEND
- UY=UY+2
- GOTO @FALL
- ’---
- @CHKUNDER
- IF BG==0 GOTO @CHKSTOP
- IF R!=0 GOTO @PEND
- BG=R
- ’---
- @CHKSTOP
- IF R==0 GOTO @PEND
- ’---ユカノウエ(ラッカシュウリョウ)
- @FALL
- VY=0:PY=FLOOR(UY)*16-1
- @PSTOP
- JS=FALSE
- @PEND
- RETURN
- ’---
- @CHKJUMP
- IF JS THEN RETURN
- IF OB AND 32 THEN RETURN
- IF (BT AND 32)==0 THEN RETURN
- JC=4*PS:PV=-4:VY=PV
- JS=TRUE
- RETURN
- ’---カヘ゛ソ゛クセイカクニン(R==0ナシ)
- @CHKWALL
- UX=X/16:UY=Y/16:R=0
- IF UX<1 OR UX>14 THEN R=1
- IF UY>=0 AND UY<12 THEN R=M(UX,UY)
- RETURN
- ’---ヨコカクニン
- @SIDE
- IF VX==0 THEN RETURN
- V=SGN(VX):X=PX+V*8:Y=PY
- GOSUB @CHKWALL
- IF R!=1 THEN RETURN
- PX=UX*16-V*9
- VX=0
- RETURN
- ’┌────────────┐
- ’│オフ゛シ゛ェクトショキカ│
- ’└────────────┘
- @OINIT
- ’---
- KN=-1:TM=99
- ’---
- FOR IX=0 TO OMAX-1
- ’---
- FOR I=0 TO _MAX-1
- O(IX,I)=0
- NEXT
- O(IX,_X)=-32:’RND(16)*16
- O(IX,_Y)=-32:’RND(11)*16
- O(IX,_S)=1.0
- O(IX,_J)=FALSE
- O(IX,_N)=64
- ’---
- SPSET IX,O(IX,_N),2,0,0,PR
- SPANIM IX,4,4,0
- SPOFS IX,O(IX,_X),O(IX,_Y)
- ’---
- NEXT
- ’---カキ゛カクホ
- O(1,_T)=2
- O(1,_N)=14
- SPCHR 1,O(1,_N),0,0,0,PR
- SPANIM 1,1,1,0
- ’---ト゛アカクホ
- I=OMAX-1
- O(I,_T)=3
- O(I,_N)=58
- SPCHR I,O(I,_N),3,0,0,PR
- SPANIM I,1,1,0
- ’---フ゜レイヤ-カクホ
- O(0,_T)=1
- O(0,_N)=128
- SPCHR 0,O(0,_N),2,0,0,PR
- SPANIM 0,2,10,0
- RETURN
- ’┌────────┐
- ’│カ゛メンショキカ│
- ’└────────┘
- @GINIT
- SPPAGE 0:SPCLR
- BGPAGE 0
- BGCLIP 0,0,31,23
- ’---BGクリア
- FOR Y=0 TO 63
- FOR X=0 TO 63
- BGPUT 1,X,Y,&H327,13,0,0
- NEXT
- NEXT
- ’---マッフ゜ノカヘ゛
- DATA &H000,&H000,&H000,&H000
- DATA &H2D1,&H2D2,&H2F1,&H2F2
- DATA &H193,&H194,&H1B3,&H1B4
- DATA &H194,&H194,&H1B4,&H1B4
- DATA &H194,&H195,&H1B4,&H1B5
- DATA &H2CF,&H2D0,&H2EF,&H2F0
- FOR I=0 TO 5
- FOR J=0 TO 3
- READ W(I,J)
- NEXT J
- NEXT I
- RETURN
- ’┌─────────┐
- ’│ステ-シ゛セッテイ│
- ’└─────────┘
- @STGSET
- ’---
- ’0―9:WALL
- ’P :PLAYER
- ’E :ENEMY
- ’K :KEY
- ’D :DOOR
- ’---
- @STG3
- DATA ”1000000000000001”
- DATA ”100K002334000001”
- DATA ”1010100000010101”
- DATA ”100000000000E0D1”
- DATA ”1111111111111111”
- DATA ”10000000000W0001”
- DATA ”1000000233333401”
- DATA ”1023400000000001”
- DATA ”1000000023400001”
- DATA ”1023340000002401”
- DATA ”10P0000000000001”
- DATA ”1111111111111111”
- ’---
- @STG2
- DATA ”1000000000000001”
- DATA ”1000000000000001”
- DATA ”10E0000110000D01”
- DATA ”1023400000023401”
- DATA ”10000W0000000001”
- DATA ”1340000P0K002331”
- DATA ”1000023333400001”
- DATA ”1000000000000001”
- DATA ”1334000000002331”
- DATA ”1000000000000001”
- DATA ”1000011001100001”
- DATA ”1111111111111111”
- ’---
- @STG1
- DATA ”1000000000000001”
- DATA ”1000000000000001”
- DATA ”1000000000000001”
- DATA ”1000000000000001”
- DATA ”1000000000000001”
- DATA ”1000000000000001”
- DATA ”1000000000000001”
- DATA ”1000000000000001”
- DATA ”1000000000000001”
- DATA ”1000000000000001”
- DATA ”10P00000K0000D01”
- DATA ”1111111111111111”
- ’---
- RESTORE @STG1
- IF STG==1 THEN RESTORE @STG2
- IF STG==2 THEN RESTORE @STG3
- ’---マッフ゜スキャン
- IX=2
- Y=0:P=12
- FOR I=0 TO 11
- READ M$
- X=0
- FOR J=0 TO 15
- C$=MID$(M$,J,1)
- N=VAL(C$)
- T=0:IF C$==”P” GOTO @TPSET
- T=1:IF C$==”K” GOTO @TPSET
- T=OMAX-1:IF C$==”D” GOTO @TPSET
- ’---
- IF IX==OMAX GOTO @BGSET
- IF O(IX,_T)!=0 GOTO @BGSET
- E=4:IF C$==”E” GOTO @TP_E
- E=5:IF C$!=”W” GOTO @BGSET
- ’---テキ(フユウ)
- @TP_W
- O(IX,_N)=192
- O(IX,_VY)=-1.0
- SPCHR IX,O(IX,_N)
- SPANIM IX,2,10,0
- ’---テキ(シ゛ツカ゛イナシ)
- @TP_E
- T=IX:IX=IX+1
- O(T,_T)=E
- O(T,_D)=RND(2)*2
- ’---サ゛ヒョウセッテイ
- @TPSET
- O(T,_X)=X*8+7
- O(T,_Y)=Y*8+15
- SPOFS T,O(T,_X)-8,O(T,_Y)-16
- ’---カヘ゛ハイチ
- @BGSET
- M(J,I)=N
- BGPUT 0,X,Y,W(N,0),P,0,0
- BGPUT 0,X+1,Y,W(N,1),P,0,0
- BGPUT 0,X,Y+1,W(N,2),P,0,0
- BGPUT 0,X+1,Y+1,W(N,3),P,0,0
- @BGSKIP
- X=X+2
- NEXT J
- Y=Y+2
- NEXT I
- RETURN
- ’┌────┐
- ’│タイトル│
- ’└────┘
- @TI
- CLS
- LOCATE 0,7
- PRINT” ┌┐┌┐┌┐┌┐┌┐┌┐ ┬┬”
- PRINT” ├┘└┐│ ┌┤├┘├┘:││”
- PRINT” └┘└┘└┘└┘│ └┘ ┴┴”
- LOCATE 8,12
- PRINT”PUSH ANY BUTTON!”
- LOCATE 4,18
- PRINT”(C)2011 SmileBoom Co.Ltd.”
- ’---
- SC=0
- GOSUB @OINIT
- GOSUB @STGSET
- RETURN
- ’---
- @TM
- IF OLDB THEN RETURN
- IF B==0 THEN RETURN
- CLS
- GOSUB @PUTST
- REQ=1
- RETURN
- ’---
- @PUTST
- LOCATE 3,0:PRINT”SCORE:”;SC
- LOCATE 25,0:PRINT”Р:”;TM
- RETURN
- ’┌───┐
- ’│クリア│
- ’└───┘
- @CI
- CLS:BGMPLAY 5
- GOSUB @PUTST
- LOCATE 13,11
- PRINT”CLEAR!”
- IF KN==0 THEN RETURN
- LOCATE 10,13
- PRINT”(ホカノヒトカ゛・・・)”
- RETURN
- ’---
- @CM
- IF BGMCHK() THEN RETURN
- IF OLDB THEN RETURN
- IF B==0 THEN RETURN
- ’---
- CLS
- GOSUB @PUTST
- REQ=1
- STG=STG+1
- IF STG==STGMAX GOTO @GEND
- GOSUB @OINIT
- GOSUB @STGSET
- RETURN
- ’---
- @GEND
- REQ=0
- STG=0
- RETURN