戦闘部隊の差配プログラムができた


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戦目は不戦勝とかそんな感じ。
 
 
 あ、そうそう、部隊は前衛、中衛、後衛で出来ていて、射程の概念がある。
 
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です