2017年 10月8日
戦闘部隊は最大でそれぞれ 3部隊ずつあるので、どの順番で戦うか、というプログラムね。
これが意外とややこしくて、てこずった。
部隊数が敵より少ない場合、順番にもう一度繰り返し戦う。
ソース。
*battle ; 戦闘メイン ////////////////////////////////
btvf=0 ; 勝利フラグ
repeat 1 ; -------------------------------------------------
dim ff1,4 ; forceフラグ、攻撃側
dim ff2,4 ; forceフラグ、防衛側
repeat 3 : cnt2=cnt ; 部隊が存在するか
repeat 3
if mu(kn1*10+cnt2*3+cnt+1)=0 : continue
ff1(cnt2+1)=1 : break
loop
repeat 3
if mu(kn2*10+cnt2*3+cnt+1)=0 : continue
ff2(cnt2+1)=1 : ff2(0)=-1 : break
loop
loop
if ff2(0)=0 : btvf=1 : break; 防衛部隊が無いので勝利
; 戦闘部隊差配 -------------
fc1=0 : fc2=0 ; 部隊No.
repeat 3 ; 攻撃側
if ff1(fc1\3+1)=0 : fc1+ : continue
bf=0 ; 不戦勝フラグ
repeat 3 ; 防衛側
if ff2(fc2\3+1)=1 : gosub *fight : fc2+ : bf=1 : break
fc2+
loop
if bf=0 : btvf+ ; 不戦勝
fc1+
loop
repeat 3 ; 防衛側
if fc2>=3 : break ; 全部隊戦闘したので終わり
if ff2(fc2\3+1)=0 : fc2+ : continue
bf=0 ; 不戦負フラグ
repeat 3 ; 攻撃側
if ff1(fc1\3+1)=1 : gosub *fight : fc1+ : bf=1 : break
fc1+
loop
if bf=0 : btvf- ; 不戦負
fc2+
loop
loop ;------------------------------------------------------
return
*fight ; 戦闘 ///////////////////////////////////////
fg1=fc1\3+1
fg2=fc2\3+1
dim fn1,4 ; 攻撃側ユニットNp.
dim fn2,4 ; 防衛側ユニットNp.
repeat 3,1 ; ユニットNo.ひかえ
fn1(cnt)=mu(kn1*10+(fg1-1)*3+cnt)
fn2(cnt)=mu(kn2*10+(fg2-1)*3+cnt)
loop
return
btvf=勝敗数。
ff=どの部隊が存在するか。
1は攻撃側、2は防衛側。
fc=部隊の順番カウント。
部隊が敵より少ない場合に、順番に戦わせるため。
部隊数は fc\(余り)3+1で求める。
攻撃側と防御側、それぞれ 3回ずつで判定する。
fg=今戦っている部隊No.
fn=戦うユニットNo.
攻撃側

防衛側

1戦目。左が攻撃側、右が防衛側。

2戦目

3戦目

3戦目は防衛側が第 2部隊をもう一度出している。
1部隊しかなければ 3戦出る。
まだ戦闘が出来てないので、たぶん 1戦目でやられるだろうから、実際には 3戦目は不戦勝とかそんな感じ。
あ、そうそう、部隊は前衛、中衛、後衛で出来ていて、射程の概念がある。