public static DigivolveDNA GetChild(string parent1Str, string parent2Str) { var parent1 = DNATables.DigimonTempsNotRookie.FirstOrDefault(x => x.NameEng == parent1Str); var parent2 = DNATables.DigimonTempsNotRookie.FirstOrDefault(x => x.NameEng == parent2Str); var parent11 = parent1; var parent22 = parent2; if (parent11.Rank != parent22.Rank) { if (parent11.Rank > parent22.Rank) { var tmp = parent11; parent11 = parent22; parent22 = tmp; } do { parent22 = Down(parent22, DNATables.DigimonTempsNotRookie); } while (parent11.Rank != parent22.Rank); } Dictionary<string, List<string>> dic; switch (parent11.Rank) { case Rank.Champion: dic = DNATables.ChampTableDictionary; break; case Rank.Ultimate: dic = DNATables.UltimaTableDictionary; break; case Rank.Mega: dic = DNATables.MegaTableDictionary; break; default: throw new ArgumentOutOfRangeException(); } var listDic = dic.ToList(); //получили строчку с вариантами var list = dic[parent11.SourceCode]; //получаем индекс var index22 = listDic.IndexOf(listDic.FirstOrDefault(x => x.Key == parent22.SourceCode)); var strResult = list[index22]; DigimonTemp result; switch (parent11.Rank) { case Rank.Champion: result = DNATables.DigimonTemps.FirstOrDefault(x => x.Rank == Rank.Rookie && x.ResultCode == strResult); break; case Rank.Ultimate: result = DNATables.DigimonTemps.FirstOrDefault(x => x.Rank == Rank.Champion && x.ResultCode == strResult); break; case Rank.Mega: result = DNATables.DigimonTemps.FirstOrDefault(x => x.Rank == Rank.Ultimate && x.ResultCode == strResult); break; default: throw new ArgumentOutOfRangeException(); } if (result == null // && !DB.DigivolvesDNA.Any( // x => x.DigimonParent1Id == parent1.NameEng && x.DigimonParent2Id == parent2.NameEng) // && !DB.DigivolvesDNA.Any( // x => x.DigimonParent2Id == parent1.NameEng && x.DigimonParent1Id == parent2.NameEng) //&& strResult != "МУ" ) { if (strResult == "МУ") { var mutations = GetMutation(); if (!Enumerable.Any<DigivolveDNA>(mutations, x => x.DigimonParent1Id == parent1.NameEng && x.DigimonParent2Id == parent2.NameEng) && !Enumerable.Any<DigivolveDNA>(mutations, x => x.DigimonParent2Id == parent1.NameEng && x.DigimonParent1Id == parent2.NameEng)) { throw new ApplicationException("В таблице мутаций нет этого сочетания"); } } Console.WriteLine("Parent1={0}(Rank={4})\tParent2={1}(Rank={5})\tParent11={2}(Rank={6})\tParent22={3}(Rank={7})", parent1.NameEng, parent2.NameEng, parent11.NameEng, parent22.NameEng, parent1.Rank, parent2.Rank, parent11.Rank, parent22.Rank); return null; } var dnaResult = new DigivolveDNA(parent1.NameEng, parent2.NameEng, result.NameEng); return dnaResult; }
public static DigivolveDNA GetChild(string parent1Str, string parent2Str) { var parent1 = DNATables.DigimonTempsNotRookie.FirstOrDefault(x => x.NameEng == parent1Str); var parent2 = DNATables.DigimonTempsNotRookie.FirstOrDefault(x => x.NameEng == parent2Str); var parent11 = parent1; var parent22 = parent2; if (parent11.Rank != parent22.Rank) { if (parent11.Rank > parent22.Rank) { var tmp = parent11; parent11 = parent22; parent22 = tmp; } do { parent22 = Down(parent22, DNATables.DigimonTempsNotRookie); } while (parent11.Rank != parent22.Rank); } Dictionary <string, List <string> > dic; switch (parent11.Rank) { case Rank.Champion: dic = DNATables.ChampTableDictionary; break; case Rank.Ultimate: dic = DNATables.UltimaTableDictionary; break; case Rank.Mega: dic = DNATables.MegaTableDictionary; break; default: throw new ArgumentOutOfRangeException(); } var listDic = dic.ToList(); //получили строчку с вариантами var list = dic[parent11.SourceCode]; //получаем индекс var index22 = listDic.IndexOf(listDic.FirstOrDefault(x => x.Key == parent22.SourceCode)); var strResult = list[index22]; DigimonTemp result; switch (parent11.Rank) { case Rank.Champion: result = DNATables.DigimonTemps.FirstOrDefault(x => x.Rank == Rank.Rookie && x.ResultCode == strResult); break; case Rank.Ultimate: result = DNATables.DigimonTemps.FirstOrDefault(x => x.Rank == Rank.Champion && x.ResultCode == strResult); break; case Rank.Mega: result = DNATables.DigimonTemps.FirstOrDefault(x => x.Rank == Rank.Ultimate && x.ResultCode == strResult); break; default: throw new ArgumentOutOfRangeException(); } if (result == null // && !DB.DigivolvesDNA.Any( // x => x.DigimonParent1Id == parent1.NameEng && x.DigimonParent2Id == parent2.NameEng) // && !DB.DigivolvesDNA.Any( // x => x.DigimonParent2Id == parent1.NameEng && x.DigimonParent1Id == parent2.NameEng) //&& strResult != "МУ" ) { if (strResult == "МУ") { var mutations = GetMutation(); if (!Enumerable.Any <DigivolveDNA>(mutations, x => x.DigimonParent1Id == parent1.NameEng && x.DigimonParent2Id == parent2.NameEng) && !Enumerable.Any <DigivolveDNA>(mutations, x => x.DigimonParent2Id == parent1.NameEng && x.DigimonParent1Id == parent2.NameEng)) { throw new ApplicationException("В таблице мутаций нет этого сочетания"); } } Console.WriteLine("Parent1={0}(Rank={4})\tParent2={1}(Rank={5})\tParent11={2}(Rank={6})\tParent22={3}(Rank={7})", parent1.NameEng, parent2.NameEng, parent11.NameEng, parent22.NameEng, parent1.Rank, parent2.Rank, parent11.Rank, parent22.Rank); return(null); } var dnaResult = new DigivolveDNA(parent1.NameEng, parent2.NameEng, result.NameEng); return(dnaResult); }