internal void Append(FeiTing mostWanted) { this.Fire += mostWanted.Fire; this.Arm += mostWanted.Arm; this.Mane += mostWanted.Mane; this.Luck += mostWanted.Luck; }
internal void Remove(FeiTing mostHated) { this.Fire -= mostHated.Fire; this.Arm -= mostHated.Arm; this.Mane -= mostHated.Mane; this.Luck -= mostHated.Luck; }
internal int GetMostWantedValue(FeiTing args) { var items = new SortItem[] { new SortItem(args.Fire, 0), new SortItem(args.Arm, 0), new SortItem(args.Mane, 0), new SortItem(args.Luck, 0) }; var sortItems = items.OrderBy(t => t.Val).ToArray(); sortItems[0].Weight = 1; return(this.Fire * items[0].Weight + this.Arm * items[1].Weight + this.Mane * items[2].Weight + this.Luck * items[3].Weight); }
private void Button_Click(object sender, RoutedEventArgs e) { try { var addedFire = int.Parse(tbFire.Text); var addedArm = int.Parse(tbArm.Text); var addedMane = int.Parse(tbMane.Text); var addedLuck = int.Parse(tbLuck.Text); var ftNumber = int.Parse((FtNumber.SelectedItem as ComboBoxItem).Content.ToString()); var ftHot = int.Parse((FtHot.SelectedItem as ComboBoxItem).Content.ToString()); var ftArray = FTList.Where(t => t.IsChecked).ToArray(); var sumProperty = new FeiTing("sum", addedFire, addedArm, addedMane, addedLuck); if (ftArray.Length < ftNumber) { MessageBox.Show("选择数量过少"); return; } // 第一次捕获 var loadedList = new List <FeiTing>(); for (int i = 0; i < ftNumber; i++) { var mostWanted = GetMostWanted(ftArray.Where(t => !loadedList.Contains(t)), sumProperty); loadedList.Add(mostWanted); sumProperty.Append(mostWanted); } // 第二次微调 for (int i = 0; i < 10; i++) { var diff = sumProperty.GetAverageDiff(); if (diff < 2) { break; } var mostHated = GetMostHated(loadedList, sumProperty); var restList = ftArray.Where(t => !loadedList.Contains(t)); var isHit = false; foreach (var item in restList) { var tmpSumProperty = sumProperty.Clone() as FeiTing; tmpSumProperty.Remove(mostHated); tmpSumProperty.Append(item); var tmpDiff = tmpSumProperty.GetAverageDiff(); if (tmpDiff < diff) { loadedList.Remove(mostHated); sumProperty.Remove(mostHated); loadedList.Add(item); sumProperty.Append(item); isHit = true; break; } } if (!isHit) { break; } } sumProperty.Name = string.Join("、", loadedList.Select(t => t.Name)); var msg = string.Format("最佳飞艇组合:\n\t{0}\n四维属性:\n\t{1} {2} {3} {4}", sumProperty.Name, sumProperty.Fire + ftHot * ftNumber, sumProperty.Arm + ftHot * ftNumber, sumProperty.Mane + ftHot * ftNumber, sumProperty.Luck + ftHot * ftNumber); MessageBox.Show(msg); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private FeiTing GetMostHated(IEnumerable <FeiTing> list, FeiTing args) { var orderList = list.OrderBy(t => t.GetMostWantedValue(args)); return(orderList.FirstOrDefault()); }