// AirsListをLeaveAirsListに記録する private static void MemoLeaveList(Fleet friendFleet, AirsList airsList, KammusuList kammusuList, LeaveAirsList leaveAirsList) { for (int i = 0; i < airsList.Count; ++i) { for (int j = 0; j < airsList[i].Count; ++j) { bool allBrokenFlg = true; bool hasPAPBWB = false; for (int k = 0; k < friendFleet.Unit[i].Kammusu[j].SlotCount; ++k) { if (friendFleet.Unit[i].Kammusu[j].Weapon[k].IsStage2) { hasPAPBWB = true; if (airsList[i][j][k] != 0) { allBrokenFlg = false; } } ++leaveAirsList[i][j][k][airsList[i][j][k]]; } if (allBrokenFlg && hasPAPBWB) { ++kammusuList[i][j]; } } } }
// AirsListをコピーする private static void CopyAirsList(AirsList src, AirsList dst) { for (int i = 0; i < src.Count; ++i) { for (int j = 0; j < src[i].Count; ++j) { for (int k = 0; k < src[i][j].Count; ++k) { dst[i][j][k] = src[i][j][k]; } } } }
// ステージ1撃墜処理(自軍) private static void St1FriendBreak(Fleet friend, int unitCount, AirsList friendAirsList, AirWarStatus airWarStatus) { for (int i = 0; i < unitCount; ++i) { for (int j = 0; j < friend.Unit[i].Kammusu.Count; ++j) { for (int k = 0; k < friend.Unit[i].Kammusu[j].Weapon.Count; ++k) { if (!friend.Unit[i].Kammusu[j].Weapon[k].IsStage1) { continue; } int breakCount = friendAirsList[i][j][k] * RandInt(St1FriendBreakMin[(int)airWarStatus], St1FriendBreakMax[(int)airWarStatus]) / 256; friendAirsList[i][j][k] -= breakCount; } } } }
private static int NowAirValueX(Fleet fleet, int unitCount, AirsList airslist) { int airValue = 0; for (int ui = 0; ui < unitCount; ++ui) { var kammusuList = fleet.Unit[ui].Kammusu; for (int ki = 0; ki < kammusuList.Count; ++ki) { var weaponList = kammusuList[ki].Weapon; for (int wi = 0; wi < kammusuList[ki].SlotCount; ++wi) { airValue += weaponList[wi].AirValueX(airslist[ui][ki][wi]); } } } return(airValue); }
// KammusuListとLeaveAirsListをAirsListから作成する private static void MakeLists(AirsList airsList, out KammusuList kammusuList, out LeaveAirsList leaveAirsList) { kammusuList = new KammusuList(); leaveAirsList = new LeaveAirsList(); for (int i = 0; i < airsList.Count; ++i) { var tempList = new List <List <List <int> > >(); kammusuList.Add(Enumerable.Repeat(0, airsList[i].Count).ToList()); for (int j = 0; j < airsList[i].Count; ++j) { var tempList2 = new List <List <int> >(); for (int k = 0; k < airsList[i][j].Count; ++k) { var tempList3 = Enumerable.Repeat(0, airsList[i][j][k] + 1).ToList(); tempList2.Add(tempList3); } tempList.Add(tempList2); } leaveAirsList.Add(tempList); } }
// ステージ1撃墜処理(敵軍) private static void St1EnemyBreak(Fleet enemy, int unitCount, AirsList enemyAirsList, AirWarStatus airWarStatus) { int St1EnemyBreakConstantNow = St1EnemyBreakConstant[(int)airWarStatus]; for (int i = 0; i < unitCount; ++i) { for (int j = 0; j < enemy.Unit[i].Kammusu.Count; ++j) { for (int k = 0; k < enemy.Unit[i].Kammusu[j].Weapon.Count; ++k) { if (!enemy.Unit[i].Kammusu[j].Weapon[k].IsStage1) { continue; } // 例の式で計算 // https://docs.google.com/spreadsheets/d/1RTOztxst5pFGCi-Qr8dw6DZwYw0jd8fkymGg44dapAk/edit int breakCount = (int)(enemyAirsList[i][j][k] * (0.35 * RandInt(0, St1EnemyBreakConstantNow) + 0.65 * RandInt(0, St1EnemyBreakConstantNow)) / 10); enemyAirsList[i][j][k] -= breakCount; } } } }
// ステージ2撃墜処理(敵軍) private static void St2EnemyBreak(Fleet enemy, Fleet friend, int unitCount, AirsList enemyAirsList, CutInType cutInType) { // 迎撃艦を一覧を算出し、それぞれの撃墜量を出す var breakPer = friend.BreakPer; var breakFixed = friend.BreakFixed(cutInType); // 撃墜処理 for (int i = 0; i < unitCount; ++i) { for (int j = 0; j < enemy.Unit[i].Kammusu.Count; ++j) { for (int k = 0; k < enemy.Unit[i].Kammusu[j].Weapon.Count; ++k) { if (!enemy.Unit[i].Kammusu[j].Weapon[k].IsStage2) { continue; } // 迎撃艦を選択する int selectKammusuIndex = RandInt(0, breakPer.Count - 1); // 割合撃墜 if (RandInt(0, 1) == 1) { int breakCount = (int)(breakPer[selectKammusuIndex] * enemyAirsList[i][j][k]); enemyAirsList[i][j][k] -= breakCount; } // 固定撃墜 if (RandInt(0, 1) == 1) { int breakCount = breakFixed[selectKammusuIndex] + 1; breakCount += CutInAddBonus[(int)cutInType]; enemyAirsList[i][j][k] = Math.Max(enemyAirsList[i][j][k] - breakCount, 0); } } } } }