;ドラクエ風戦闘
oname="勇者" ;自分の名前
ohpmax=100 ;自分のHP最大値
ohp=ohpmax ;自分のHP
odef=0 ;自分の防御状態
ename="モンスター" ;敵の名前
ehpmax=100 ;敵のHP最大値
ehp=ehpmax ;敵のHP
edef=0 ;敵の防御状態
turn=0 ;行動フラグ
speak=0 ;会話進行状態
randomize ;乱数初期化
screen 0,300,200
*mainloop
redraw 0
color 255,255,255 : boxf ;背景白
gosub *drawstate
if turn=0 : gosub *ocommand ;自分行動選択
if turn=1 : gosub *oaction ;自分行動
if turn=2 : gosub *ecommand ;敵行動選択
if turn=3 : gosub *eaction ;敵行動
redraw
await 1
goto *mainloop
*drawstate ;両者のステータス表示
color
boxf 10,10,100,50
boxf 110,10,200,50
color 255,255,255
boxf 11,11,99,49
boxf 111,11,199,49
color
pos 12,12 : mes oname+"\nHP:"+ohp+"/"+ohpmax
pos 112,12 : mes ename+"\nHP:"+ehp+"/"+ehpmax
return
*ocommand ;自分行動選択
color : boxf 10,110,90,190
color 255,255,255 : boxf 11,111,89,189
color : pos 40,115 : mes "攻撃\n防御\n回復\n逃走"
stick key
if key&2 : osel-- : if osel=-1 : osel=3
if key&8 : osel++ : if osel=4 : osel=0
if key&32 { ;Enterキーが押されたら行動へ
turn=1
speak=0
odef=0 ;防御解除
}
color 255 : pos 20,osel*18+115 : mes ">>"
return
*oaction ;自分行動
color : boxf 10,120,290,190
color 255,255,255 : boxf 11,121,289,189
color : pos 20,130
stick key
if key&32 : speak++ ;Enterキーで進行
if osel=0 { ;攻撃
if speak=0 : mes oname+"の攻撃"
if speak=1 {
rnd dmg,10 : dmg+6 ;ダメージ計算
if edef=1 : dmg=dmg/2 ;防御状態なら半減
ehp-dmg : if ehp<0 : ehp=0 ;0以下なら0に
speak++
}
if speak=2 : mes ename+"に"+dmg+"のダメージ"
if speak=3 : if ehp=0 : speak++ : else : turn=2
if speak=4 : mes ename+"をやっつけた"
if speak=5 : end
}
if osel=1 { ;防御
if speak=0 : mes oname+"は身を守っている"
if speak=1 : odef=1 : turn=2 ;防御フラグオン
}
if osel=2 { ;回復
if speak=0 : mes oname+"は呪文を唱えた"
if speak=1 {
rnd car,10 : car+10 ;回復量計算
ohp+car : if ohp>ohpmax : ohp=ohpmax ;MAXを超えたらMAXに
speak++
}
if speak=2 : mes oname+"は"+car+"回復した"
if speak=3 : turn=2
}
if osel=3 {
if speak=0 : rnd esc,2 : speak++
if speak=1 : mes oname+"は逃げ出した"
if speak=2 {
if esc=0 : end
if esc=1 : mes "しかし回り込まれてしまった"
}
if speak=3 : turn=2
}
return
*ecommand ;敵行動選択
rnd esel,3 ;逃走は無し
turn=3
speak=0
edef=0 ;防御解除
return
*eaction ;敵行動
color : boxf 10,120,290,190
color 255,255,255 : boxf 11,121,289,189
color : pos 20,130
stick key
if key&32 : speak++ ;Enterキーで進行
if esel=0 { ;攻撃
if speak=0 : mes ename+"の攻撃"
if speak=1 {
rnd dmg,10 : dmg+16 ;ダメージ計算
if odef=1 : dmg=dmg/2 ;防御状態なら半減
ohp-dmg : if ohp<0 : ohp=0 ;0以下なら0に
speak++
}
if speak=2 : mes oname+"に"+dmg+"のダメージ"
if speak=3 : if ohp=0 : speak++ : else : turn=0
if speak=4 : mes oname+"はやられてしまった"
if speak=5 : end
}
if esel=1 { ;防御
if speak=0 : mes ename+"は身を守っている"
if speak=1 : edef=1 : turn=0 ;防御フラグオン
}
if esel=2 { ;回復
if speak=0 : mes ename+"は呪文を唱えた"
if speak=1 {
rnd car,10 : car+6 ;回復量計算
ehp+car : if ehp>ehpmax : ehp=ehpmax ;MAXを超えたらMAXに
speak++
}
if speak=2 : mes ename+"は"+car+"回復した"
if speak=3 : turn=0
}
return
|