예제 #1
0
 // 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];
             }
         }
     }
 }
예제 #2
0
 // 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];
             }
         }
     }
 }
예제 #3
0
 // ステージ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;
             }
         }
     }
 }
예제 #4
0
        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);
        }
예제 #5
0
 // 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);
     }
 }
예제 #6
0
        // ステージ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;
                    }
                }
            }
        }
예제 #7
0
        // ステージ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);
                        }
                    }
                }
            }
        }