横スクロールのアクションゲーム。十字ボタン右でひたすら前に進み、ステージの端にあるドアに辿り着くのが目的だ。
次々と現われる魔法使いをXボタンで攻撃、避けるにはAボタン(または十字ボタン上)でジャンプ!
画面上端がステージの進行度、下の緑のバーはプレイヤーの残りライフだ。攻撃を受け続けてライフが無くなればゲームオーバー。ステージクリアするとある程度回復できるので、うまく生き延びてハイスコアを目指そう!
たけぽん
スプライト機能を持ったパソコンを持っていたことがなかったため、はじめてスプライトを扱いました。使い方が変なところがあるかもしれません。
’
」で始まる妙な行があるんだが……REM
(’
)文をうまく使ってプチコンの画面サイズで打ちやすいように作ってあるのじゃよ。親切設計じゃのう。
- ’WIZ FIGHT by タケホ゜ン
- ’カ゛メンカラ ハミタ゛ストコロ 5キ゛ョウアリ
- ’ツキ゛ノキ゛ョウノ ’ ノアトヲイレル
- CLS:CLEAR:VISIBLE 1,1,0,1,1,0
- BGPAGE 0:BGCLIP 0,20,31,21
- BGOFS 1,0,0:HI=0:SPPAGE 0
- DIM WX(5),WY(5),WJ(5),WD(5)
- DIM FX(10),FY(10),FJ(10)
- DIM FD(10),HS(10),HJ(10)
- DIM HH(10),HF(10)
- ’ИИ ┷ト スヘ゜-ス 32モシ゛ツ゛ツイレテネ ИИ
- DA$=”┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷┷(空白32文字分)”
- ’┷┷┷┷┷┷┷┷(空白20文字分)
- ’ ”
- FOR K=0 TO 9
- READ HS(K),HJ(K),HH(K),HF(K)
- NEXT
- DATA 1,2,0,0,1,3,0,1,2,5,7,0
- DATA 2,7,3,2,2,3,8,2,5,8,8,1
- DATA 3,5,2,4,3,1,9,3,5,7,5,4
- DATA 7,9,7,6
- SPSET 0,64,4,0,0,2
- SPSCALE 0,200:SPANIM 0,4,10,0
- SPSET 1,21,4,0,0,1
- SPSET 2,22,4,0,0,1
- SPSCALE 1,200:SPSCALE 2,200
- SPSET 3,88,4,0,0,2
- SPSET 4,59,9,0,0,2
- SPSCALE 3,200:SPSCALE 4,200
- SPSET 5,61,7,0,0,2
- SPANIM 3,2,45,4:SPSCALE 5,200
- FOR K=0 TO 4
- SPSET 10+K,104,2,0,0,1
- SPSCALE 10+K,200
- SPANIM 10+K,4,10,0
- NEXT
- SPSET 16,121,2,0,0,2
- SPSCALE 16,200
- FOR K=0 TO 9
- SPSET 20+K,44,3,0,0,1
- SPSCALE 20+K,200
- SPANIM 20+K,2,10,0
- NEXT
- @HAJIME
- RO=0:SC=0:ML=0
- DDR=32:FL=200:WWW=5000
- @START
- BGMSTOP:GOSUB @ALLOFF
- GOSUB @RENGA:RE=0
- MY=16:MJ=0:MK=0:MK2=0:DD=0
- SPOFS 0,16,MY*8:COLOR 15
- LOCATE 12,5:PRINT ”READY!”
- FOR K=0 TO 50000:NEXT:CLS
- BGMPLAY 0:GOSUB @DRAWSTA
- @MAIN
- BGOFS 1,RE*8,0:GOSUB @WIZDRAW
- SPOFS 0,16,MY*8:GOSUB @DOOR
- GOSUB @FIREDRAW
- GOSUB @DRAWSTA
- IF ML>=FL THEN @STAGECL
- YR=0:GOSUB @HANTEI
- GOSUB @FHANTEI
- IF DD==1 THEN @DAMAGE
- @MAI1
- GOSUB @KEYIN
- ’ИИ ナカ゛イ 2キ゛ョウ ИИ
- IF BK==1 AND MK==0 AND MK2==0 THEN MK=1:MK2=1
- ’ THEN MK=1:MK2=1
- IF BK==0 AND MK2==1 THEN MK2=0
- ’0
- GOSUB @KEN
- GOSUB @DRAWDAM
- GOSUB @GAUGE
- GOSUB @MJCHANGE:MGO=0
- ON MJ GOTO @JJ,@MJ1,@MJ2,@MJ3
- @JJ
- GOTO @MAIN2
- @MJ1
- GOSUB @SCROLL:GOTO @MAIN2
- @MJ2
- MY=MY-5+MD:MD=MD+1
- IF MD>9 THEN MJ=0
- GOTO @MAIN2
- @MJ3
- GOSUB @SCROLL:MY=MY-5+MD
- MD=MD+1:IF MD<10 GOTO @MAIN2
- MJ=1:IF BR!=1 THEN MJ=0
- @MAIN2
- GOSUB @WJCHANGE
- GOSUB @WIZMOVE
- GOSUB @FJCHANGE
- GOSUB @FIREMOVE
- FOR K=0 TO WWW:NEXT
- SPOFS 3,0,-32:GOSUB @WIZDIE
- IF MK==2 GOTO @MKOFF
- IF MK!=1 GOTO @MAIN
- MK=2:SPOFS 1,0,-32:GOTO @MAIN
- @MKOFF
- MK=0:SPOFS 2,0,-32:GOTO @MAIN
- @SCROLL
- RE=RE+1:IF RE>7 THEN RE=0
- SC=SC+1:MGO=1:ML=ML+1:RETURN
- @DRAWSTA
- COLOR 15:LOCATE 0,23
- PRINT ”STAGE ”;RO+1;
- LOCATE 19,23
- PRINT ”SCORE ”;SC;:COLOR 3
- LOCATE 9,23:PRINT ”HI ”;HI;
- RETURN
- @DRAWDAM
- COLOR 4:LOCATE 0,22
- PRINT MID$(DA$,32-DDR,32);
- RETURN
- @GAUGE
- COLOR 11:K=ML*31/FL
- LOCATE K,0:PRINT ” г”;:RETURN
- @ALLOFF
- CLS:FOR K=0 TO 4:WJ(K)=0
- SPOFS 10+K,0,-32:NEXT
- FOR K=0 TO 9:FJ(K)=0
- SPOFS 20+K,0,-32:NEXT
- SPOFS 0,0,-32:SPOFS 1,0,-32
- SPOFS 2,0,-32:SPOFS 3,0,-32
- SPOFS 16,0,-32:SPOFS 4,0,-32
- SPOFS 5,0,-32
- GOSUB @DRAWDAM
- GOSUB @DRAWSTA
- RETURN
- @RENGA
- FOR K=0 TO 39
- BGPUT 1,K,20,471,2,0,0
- BGPUT 1,K,21,503,2,0,0
- NEXT
- FOR K=0 TO 4
- BGPUT 1,K*8,20,470,2,0,0
- BGPUT 1,K*8,21,502,2,0,0
- NEXT:RETURN
- @DOOR
- IF ML<FL-24 THEN RETURN
- SPOFS 4,(FL+2-ML)*8,16*8
- RETURN
- @KEYIN
- B=BUTTON():BK=0:BJ=0:BR=0
- IF B AND 64 THEN BK=1
- IF B AND 16 THEN BJ=1
- IF B AND 1 THEN BJ=1
- IF B AND 8 THEN BR=1
- RETURN
- @MJCHANGE
- ’ИИ 2キ゛ョウナカ゛イノカ゛アル ИИ
- IF MJ==0 AND BJ==1 THEN MJ=2:MD=1:BEEP 8,1028,30,32
- ’MD=1:BEEP 8,1028,30,32
- IF MJ==0 AND BR==1 THEN MJ=1
- IF MJ==1 AND BJ==1 THEN MJ=3:MD=1:BEEP 8,1028,30,32
- ’MD=1:BEEP 8,1028,30,32
- IF MJ==1 AND BR==0 THEN MJ=0
- IF MJ==2 AND BR==1 THEN MJ=3
- IF MJ==3 AND BR==0 THEN MJ=2
- RETURN
- @KEN
- IF MK==2 GOTO @KEN2
- IF MK!=1 THEN RETURN
- BEEP 50,4096,127,30
- SPOFS 1,32,MY*8-16:RETURN
- @KEN2
- SPOFS 2,32,MY*8+16:RETURN
- @WIZDRAW
- FOR K=0 TO 4
- IF WJ(K)==0 GOTO @WIZ1
- SPOFS 10+K,WX(K)*8,WY(K)*8
- @WIZ1
- NEXT
- RETURN
- @FIREDRAW
- FOR K=0 TO 9
- IF FJ(K)==0 GOTO @FIRE1
- SPOFS 20+K,FX(K)*8,FY(K)*8
- @FIRE1
- NEXT
- RETURN
- @WJCHANGE
- FOR K=0 TO 4
- IF WJ(K)>1 GOTO @WJ1
- IF WJ(K)==1 GOTO @WJ2
- J=RND(70):I=HS(RO)
- IF J>=1 GOTO @WJ1
- WJ(K)=1:WX(K)=28:WY(K)=16
- SPOFS 10+K,WX(K)*8,WY(K)*8
- WD(K)=0:K=4:GOTO @WJ1
- @WJ2
- J=RND(50):I=HF(RO)
- IF J>=I THEN @WJ1
- WD(K)=0:WJ(K)=2
- J=RND(10):I=HH(RO)
- IF J<I THEN WJ(K)=3
- @WJ1
- NEXT
- RETURN
- @FJCHANGE
- J=RND(20):I=HF(RO)
- IF J>=I THEN RETURN
- FOR K=0 TO 9
- IF FJ(K)>0 GOTO @FJ1
- I=0:J=RND(5)
- @FJ3
- IF WJ(J)>0 GOTO @FJ2
- I=I+1:IF I>5 GOTO @FJ1
- J=J+1:IF J>4 THEN J=0
- GOTO @FJ3
- @FJ2
- IF WX(J)<20 GOTO @FJ1
- FX(K)=WX(J):FY(K)=WY(J)
- I=RND(15):FJ(K)=1
- IF I<RO THEN FJ(K)=2
- K=9
- @FJ1
- NEXT
- RETURN
- @FIREMOVE
- FOR K=0 TO 9
- IF FJ(K)==0 THEN @FM0
- FX(K)=FX(K)-FJ(K)-MGO-1
- IF FX(K)>-3 THEN @FM0
- FJ(K)=0:SPOFS 20+K,0,-32
- @FM0
- NEXT
- RETURN
- @WIZMOVE
- FOR K=0 TO 4
- IF WJ(K)==0 THEN @WM0
- WX(K)=WX(K)-1-MGO
- IF WX(K)<-2 THEN @WM5
- IF WJ(K)==3 THEN @WM3
- IF WJ(K)==2 THEN @WM2
- GOTO @WM0
- @WM2
- WY(K)=WY(K)-3+WD(K)
- WD(K)=WD(K)+1
- IF WD(K)>6 THEN WJ(K)=1
- GOTO @WM0
- @WM3
- WY(K)=WY(K)-5+WD(K)
- WD(K)=WD(K)+1
- IF WD(K)>10 THEN WJ(K)=1
- GOTO @WM0
- @WM5
- WJ(K)=0:SPOFS 10+K,0,-32
- @WM0
- NEXT
- RETURN
- @FHANTEI
- FOR K=0 TO 9
- IF FJ(K)==0 THEN @FH1
- IF FX(K)>3 THEN @FH1
- IF FX(K)<1 THEN @FH1
- IF FY(K)<MY-1 THEN @FH1
- IF FY(K)>MY+1 THEN @FH1
- DD=1:DDR=DDR-5
- @FH1
- NEXT
- RETURN
- @HANTEI
- FOR K=0 TO 4
- IF WJ(K)==0 THEN @HA1
- IF WY(K)<MY-4 THEN @HA1
- IF WY(K)>MY+5 THEN @HA1
- IF WX(K)>8 THEN @HA1
- IF WX(K)<4 THEN @HA2
- IF MK==0 THEN @HA2
- YR=1:YRX=WX(K):YRY=WY(K)
- SPOFS 16,YRX*8,YRY*8
- SPOFS 10+K,0,-32:WJ(K)=0
- SC=SC+100:BEEP 37,4096,127,64
- @HA1
- NEXT
- RETURN
- @HA2
- IF WY(K)<MY-2 THEN @HA1
- IF WY(K)>MY THEN @HA1
- IF WY(K)>3 THEN @HA1
- IF WY(K)<0 THEN @HA1
- IF MK>0 THEN @HA1
- DD=1:DDR=DDR-2
- GOTO @HA1
- @WIZDIE
- IF YR!=1 THEN RETURN
- SPOFS 16,0,-32:YR=0:RETURN
- @DAMAGE
- DD=0:BEEP 11,2000,50,64
- SPOFS 0,0,-32:SPOFS 3,16,MY*8
- IF DDR<1 THEN @OVER
- GOSUB @DRAWDAM
- GOTO @MAI1
- @STAGECL
- SPOFS 0,16,16*8:BGMPLAY 18
- FOR K=0 TO 60000:NEXT
- GOSUB @ALLOFF
- SPOFS 0,88,16*8
- SPOFS 5,17*8,16*8:COLOR 15
- LOCATE 11,5
- PRINT ”C L E A R !”
- IF RO<9 THEN @ALLO1
- COLOR 12:LOCATE 10,8
- PRINT ”GOOD PLAYER!”
- @ALLO1
- FOR K=0 TO 10000:NEXT
- BGMSTOP
- FOR I=1 TO RO+1
- BEEP 5,8000,80,64
- DDR=DDR+1
- IF DDR>32 THEN DDR=32
- GOSUB @DRAWDAM
- FOR J=0 TO 15000:NEXT
- NEXT
- FOR K=0 TO 50000:NEXT:ML=0
- WWW=WWW-200:WWW=ABS(WWW)
- RO=RO+1:IF RO>9 THEN RO=0
- GOTO @START
- @OVER
- BGMPLAY 3
- FOR K=0 TO 40000:NEXT
- GOSUB @ALLOFF
- SPOFS 3,16,MY*8:BGMPLAY 6
- COLOR 3:LOCATE 11,5
- PRINT ”GAME OVER”
- COLOR 2:LOCATE 10,15
- PRINT ”HIT A BUTON”
- IF SC<HI THEN @OV1
- COLOR 3:LOCATE 10,8
- PRINT ”HIGH SCORE!!”:HI=SC
- @OV1
- K=BUTTON()
- IF K!=0 THEN @OV1
- @OV2
- K=BUTTON()
- IF K AND 16 THEN @HAJIME
- IF K AND 1024 THEN @BGSTOP
- GOTO @OV2
- @BGSTOP
- BGMSTOP:END