2017年 10月8日
戦闘部隊は最大でそれぞれ 3部隊ずつあるので、どの順番で戦うか、というプログラムね。
これが意外とややこしくて、てこずった。
部隊数が敵より少ない場合、順番にもう一度繰り返し戦う。
ソース。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
*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戦目は不戦勝とかそんな感じ。
あ、そうそう、部隊は前衛、中衛、後衛で出来ていて、射程の概念がある。