public Analyze(string dbFile, int battleType, double userPara, bool selfDefined) { para = userPara; this.battleType = battleType; ah = new AccessHandler(dbFile); curDir = Environment.CurrentDirectory; initalFailed = true; raceData = ah.SelectToDataTable("select pokemon.hp,pokemon.attack,pokemon.defense,pokemon.specialAttack,pokemon.specialDefense,pokemon.speed,battleType" + battleType + ".ranking,battleType" + battleType + ".nature1,battleType" + battleType + ".nu1,battleType" + battleType + ".nature2,battleType" + battleType + ".nu2,battleType" + battleType + ".nature3,battleType" + battleType + ".nu3 from battleType" + battleType + " inner join [;database=" + curDir + "/Data/PokeData.mdb].pokemon on pokemon.poke_id = battleType" + battleType + ".poke_id"); rankingDetails = ah.SelectToDataTable("select * from battleType" + battleType + ""); total = 0; if (selfDefined) { SelfDefinedModelParser sdmp; try { sdmp = new SelfDefinedModelParser("Data/SelfDefinedModel.txt"); } catch { SelfDesignedMsg sdm = new SelfDesignedMsg("Sorry~ 小女子找不到您定义模型的文件...\r\n请确认文件Data/SelfDefinedModel.txt的存在~", false); sdm.ShowDialog(); return; } ArrayList selfModel = sdmp.getModelLists(); if (selfModel == null) { return; } if (selfModel.Count < rankingDetails.Rows.Count) { SelfDesignedMsg sdm = new SelfDesignedMsg("您定义的模型数据不足哦~ 请至少定义" + rankingDetails.Rows.Count + "条", false); sdm.ShowDialog(); return; } model = new double[rankingDetails.Rows.Count + 1]; model[0] = 0; for (int i = 1; i <= rankingDetails.Rows.Count; i++) { model[i] = (double)selfModel[i - 1]; total += model[i]; } } else { model = new double[rankingDetails.Rows.Count + 1]; model[0] = 0; for (int i = 1; i <= rankingDetails.Rows.Count; i++) { model[i] = Math.Pow(i, para); total += model[i]; } } initalFailed = false; }
//使用率统计 public KeyValuePair <string, double>[] useageRateTop(int limitation) { DataTable rankingNames = ah.SelectToDataTable("select pokemon.chi,battleType" + battleType + ".ranking from battleType" + battleType + " inner join [;database=" + curDir + "/Data/PokeData.mdb].pokemon on pokemon.poke_id = battleType" + battleType + ".poke_id order by battleType" + battleType + ".ranking"); limitation = Math.Min(limitation, rankingNames.Rows.Count); KeyValuePair <string, double>[] ur = new KeyValuePair <string, double> [limitation]; for (int i = 1; i <= limitation; i++) { ur[i - 1] = new KeyValuePair <string, double>(rankingNames.Rows[i - 1][0].ToString(), model[i] / total); } return(ur); }
//mega配比统计 public ArrayList megaUsageRate(AccessHandler ah) { ArrayList res = new ArrayList(); double totalMegaRate = 0; HashSet <string> megaSet = new HashSet <string>(GlobalConstants.MEGASTONES); foreach (DataRow row in rankingDetails.Rows) { double weight = model[(int)row[1]] / total; if (megaSet.Contains(row[14].ToString())) { double megaRate = weight * (double)(row[15]); string pkId = row[0].ToString() + ".1"; if (row[14].ToString().Equals("Charizardite Y") || row[14].ToString().Equals("Mewtwonite Y")) { pkId = row[0].ToString() + ".2"; } DataTable dt = ah.SelectToDataTable("select chi from pokemon where poke_id = " + pkId); if (dt.Rows.Count > 0) { res.Add(new KeyValuePair <string, double>(dt.Rows[0][0].ToString(), megaRate)); totalMegaRate += megaRate; } } if (megaSet.Contains(row[16].ToString())) { double megaRate = weight * (double)(row[17]); string pkId = row[0].ToString() + ".1"; if (row[16].ToString().Equals("Charizardite Y") || row[16].ToString().Equals("Mewtwonite Y")) { pkId = row[0].ToString() + ".2"; } DataTable dt = ah.SelectToDataTable("select chi from pokemon where poke_id = " + pkId); if (dt.Rows.Count > 0) { res.Add(new KeyValuePair <string, double>(dt.Rows[0][0].ToString(), megaRate)); totalMegaRate += megaRate; } } if (megaSet.Contains(row[18].ToString())) { double megaRate = weight * (double)(row[19]); string pkId = row[0].ToString() + ".1"; if (row[18].ToString().Equals("Charizardite Y") || row[18].ToString().Equals("Mewtwonite Y")) { pkId = row[0].ToString() + ".2"; } DataTable dt = ah.SelectToDataTable("select chi from pokemon where poke_id = " + pkId); if (dt.Rows.Count > 0) { res.Add(new KeyValuePair <string, double>(dt.Rows[0][0].ToString(), megaRate)); totalMegaRate += megaRate; } } if ((double)row[0] == 384) { for (int i = 20; i < 80; i += 3) { if ((string)row[i] == "Dragon Ascent") { double megaRate = weight * (double)(row[i + 2]); res.Add(new KeyValuePair <string, double>("烈空坐", megaRate)); totalMegaRate += megaRate; break; } } } } res.Add(new KeyValuePair <string, double>("total", totalMegaRate)); return(res); }