Example #1
0
        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;
        }
Example #2
0
        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);
        }