Пример #1
0
        // 基地航空隊の読み込み処理
        private void LoadBasedAirUnit()
        {
            var ofd = new Microsoft.Win32.OpenFileDialog()
            {
                FileName = "bau_data.bau",
                Filter   = "基地航空隊情報(*.bau)|*.bau|すべてのファイル(*.*)|*.*",
                Title    = "読み込むのファイルを選択"
            };

            if ((bool)ofd.ShowDialog())
            {
                try {
                    // ファイルを読み込み
                    using (var sr = new System.IO.StreamReader(ofd.FileName)) {
                        // テキストとして読み込んでパース
                        string output  = sr.ReadToEnd();
                        var    bauData = new BasedAirUnitData(output);
                        #region 基地航空隊の情報を初期化
                        for (int ui = 0; ui < 3; ++ui)
                        {
                            BasedAirUnitMode[ui].Value = 0;
                            for (int wi = 0; wi < 4; ++wi)
                            {
                                BasedAirUnitIndex[ui][wi].Value = 0;
                                BasedAirUnitMas[ui][wi].Value   = 0;
                                BasedAirUnitRf[ui][wi].Value    = 0;
                            }
                        }
                        #endregion
                        // 基地航空隊の情報を書き込む
                        for (int ui = 0; ui < bauData.Weapon.Count; ++ui)
                        {
                            // 出撃回数
                            int count = bauData.SallyCount[ui];
                            BasedAirUnitMode[ui].Value = count;
                            // 装備情報
                            var weaponList = bauData.Weapon[ui];
                            for (int wi = 0; wi < weaponList.Count; ++wi)
                            {
                                var weapon = weaponList[wi];
                                BasedAirUnitIndex[ui][wi].Value = BasedAirUnitList.IndexOf($"{weapon.Name}:{weapon.AntiAir}:{weapon.BAURange}");
                                BasedAirUnitMas[ui][wi].Value   = weapon.Mas;
                                BasedAirUnitRf[ui][wi].Value    = weapon.Rf;
                            }
                        }
                    }
                } catch (Exception e) {
                    Console.WriteLine(e.ToString());
                    MessageBox.Show("ファイルを開けませんでした", "AWSK");
                }
            }
        }
Пример #2
0
        // 基地航空隊のデータを取得
        private BasedAirUnitData GetBasedAirUnitData()
        {
            // 作成
            var basedAirUnitData = new BasedAirUnitData();

            for (int ui = 0; ui < 3; ++ui)
            {
                // チェックを入れてない編成は無視する
                if (!BasedAirUnitFlg[ui].Value)
                {
                    continue;
                }
                //
                var temp = new List <WeaponData>();
                for (int wi = 0; wi < 4; ++wi)
                {
                    // 「なし」が選択されている装備は無視する
                    if (BasedAirUnitIndex[ui][wi].Value == 0)
                    {
                        continue;
                    }
                    // 装備名を取り出す
                    string name = BasedAirUnitList[BasedAirUnitIndex[ui][wi].Value].Split(":".ToCharArray())[0];
                    // 装備名から装備情報を得る
                    var weapon = DataStore.WeaponDataByName(name);
                    weapon.Mas = BasedAirUnitMas[ui][wi].Value;
                    weapon.Rf  = BasedAirUnitRf[ui][wi].Value;
                    weapon.Refresh();
                    temp.Add(weapon);
                }
                if (temp.Count > 0)
                {
                    basedAirUnitData.Weapon.Add(temp);
                    basedAirUnitData.SallyCount.Add(BasedAirUnitMode[ui].Value);
                }
            }
            return(basedAirUnitData);
        }
Пример #3
0
        // 航空戦の基地航空隊におけるシミュレーションを行う
        public static void BasedAirUnitSimulation(
            BasedAirUnitData friend,
            FleetData enemy,
            int simulationCount,
            out Dictionary <int, double> finalAAV,
            out List <List <List <int> > > awsCount)
        {
            // 出力先を準備する
            finalAAV = new Dictionary <int, double>();          //最終的な制空値のデータ
            awsCount = new List <List <List <int> > >();        //制空状況をカウントする配列
            for (int si = 0; si < friend.SallyCount.Count; ++si)
            {
                var temp1 = new List <List <int> >();
                for (int ci = 0; ci < friend.SallyCount[si]; ++ci)
                {
                    var temp2 = new List <int> {
                        0, 0, 0, 0, 0
                    };
                    temp1.Add(temp2);
                }
                awsCount.Add(temp1);
            }
            // テンポラリな変数を用意する
            var friendAntiAirValue = new List <int>();                  //基地航空隊の制空値を記録した配列

            for (int si = 0; si < friend.SallyCount.Count; ++si)
            {
                friendAntiAirValue.Add(CalcAntiAirValue(friend.Weapon[si], friend.GetSlotData()[si]));
            }
            // シミュレーションを行う
            for (int li = 0; li < simulationCount; ++li)
            {
                // 基地航空隊・敵艦隊のデータから、スロット毎の搭載数を読み取る
                var enemySlotData = enemy.GetSlotData();
                // 指定した回数だけ基地航空隊をぶつける
                for (int si = 0; si < friend.SallyCount.Count; ++si)
                {
                    for (int ci = 0; ci < friend.SallyCount[si]; ++ci)
                    {
                        // 敵艦隊の制空値を計算する
                        int enemyAntiAirValue = CalcAntiAirValue(enemy, enemySlotData, true);
                        // 制空状況を判断する
                        var airWarStatus = JudgeAirWarStatus(friendAntiAirValue[si], enemyAntiAirValue);
                        ++awsCount[si][ci][(int)airWarStatus];
                        // St1撃墜を行う
                        LostEnemySlotBySt1(enemy, ref enemySlotData, airWarStatus);
                    }
                }
                // 最終制空値を読み取る
                int aav = CalcAntiAirValue(enemy, enemySlotData, true);
                if (finalAAV.ContainsKey(aav))
                {
                    ++finalAAV[aav];
                }
                else
                {
                    finalAAV[aav] = 1;
                }
            }
            finalAAV = finalAAV.OrderBy((x) => x.Key).ToDictionary(pair => pair.Key, pair => pair.Value / simulationCount);
        }