예제 #1
0
        private SortedList <IHistorial> historial(int cuenta = 0)
        {
            var historial = new SortedList <IHistorial>();

            historial.AddRange(HistorialDeposito.Where(c => cuenta == 0 ? true : cuenta == c.CuentaOrigen || cuenta == c.CuentaDestino));
            historial.AddRange(HistorialRetiro.Where(c => cuenta == 0 ? true : cuenta == c.CuentaOrigen));
            return(historial);
        }
예제 #2
0
        private void load()
        {
            // Calculate default multiplier control points
            var lastTimingPoint     = new TimingControlPoint();
            var lastDifficultyPoint = new DifficultyControlPoint();

            // Merge timing + difficulty points
            var allPoints = new SortedList <ControlPoint>(Comparer <ControlPoint> .Default);

            allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints);
            allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints);

            // Generate the timing points, making non-timing changes use the previous timing change
            var timingChanges = allPoints.Select(c =>
            {
                var timingPoint     = c as TimingControlPoint;
                var difficultyPoint = c as DifficultyControlPoint;

                if (timingPoint != null)
                {
                    lastTimingPoint = timingPoint;
                }

                if (difficultyPoint != null)
                {
                    lastDifficultyPoint = difficultyPoint;
                }

                return(new MultiplierControlPoint(c.Time)
                {
                    Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier,
                    TimingPoint = lastTimingPoint,
                    DifficultyPoint = lastDifficultyPoint
                });
            });

            double lastObjectTime = (Objects.LastOrDefault() as IHasEndTime)?.EndTime ?? Objects.LastOrDefault()?.StartTime ?? double.MaxValue;

            // Perform some post processing of the timing changes
            timingChanges = timingChanges
                            // Collapse sections after the last hit object
                            .Where(s => s.StartTime <= lastObjectTime)
                            // Collapse sections with the same start time
                            .GroupBy(s => s.StartTime).Select(g => g.Last()).OrderBy(s => s.StartTime);

            DefaultControlPoints.AddRange(timingChanges);

            // If we have no control points, add a default one
            if (DefaultControlPoints.Count == 0)
            {
                DefaultControlPoints.Add(new MultiplierControlPoint {
                    Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier
                });
            }

            DefaultControlPoints.ForEach(c => applySpeedAdjustment(c, Playfield));
        }
예제 #3
0
        protected override Playfield <ManiaHitObject, ManiaJudgement> CreatePlayfield()
        {
            double lastSpeedMultiplier = 1;
            double lastBeatLength      = 500;

            // Merge timing + difficulty points
            var allPoints = new SortedList <ControlPoint>(Comparer <ControlPoint> .Default);

            allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints);
            allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints);

            // Generate the timing points, making non-timing changes use the previous timing change
            var timingChanges = allPoints.Select(c =>
            {
                var timingPoint     = c as TimingControlPoint;
                var difficultyPoint = c as DifficultyControlPoint;

                if (timingPoint != null)
                {
                    lastBeatLength = timingPoint.BeatLength;
                }

                if (difficultyPoint != null)
                {
                    lastSpeedMultiplier = difficultyPoint.SpeedMultiplier;
                }

                return(new TimingChange
                {
                    Time = c.Time,
                    BeatLength = lastBeatLength,
                    SpeedMultiplier = lastSpeedMultiplier
                });
            });

            double lastObjectTime = (Objects.LastOrDefault() as IHasEndTime)?.EndTime ?? Objects.LastOrDefault()?.StartTime ?? double.MaxValue;

            // Perform some post processing of the timing changes
            timingChanges = timingChanges
                            // Collapse sections after the last hit object
                            .Where(s => s.Time <= lastObjectTime)
                            // Collapse sections with the same start time
                            .GroupBy(s => s.Time).Select(g => g.Last()).OrderBy(s => s.Time)
                            // Collapse sections with the same beat length
                            .GroupBy(s => s.BeatLength * s.SpeedMultiplier).Select(g => g.First())
                            .ToList();

            return(new ManiaPlayfield(Columns ?? (int)Math.Round(Beatmap.BeatmapInfo.Difficulty.CircleSize), timingChanges)
            {
                Anchor = Anchor.Centre,
                Origin = Anchor.Centre,
                // Invert by default for now (should be moved to config/skin later)
                Scale = new Vector2(1, -1)
            });
        }
예제 #4
0
        protected override void ApplyBeatmap()
        {
            // Calculate default multiplier control points
            var lastTimingPoint     = new TimingControlPoint();
            var lastDifficultyPoint = new DifficultyControlPoint();

            // Merge timing + difficulty points
            var allPoints = new SortedList <ControlPoint>(Comparer <ControlPoint> .Default);

            allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints);
            allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints);

            // Generate the timing points, making non-timing changes use the previous timing change
            var timingChanges = allPoints.Select(c =>
            {
                var timingPoint     = c as TimingControlPoint;
                var difficultyPoint = c as DifficultyControlPoint;

                if (timingPoint != null)
                {
                    lastTimingPoint = timingPoint;
                }

                if (difficultyPoint != null)
                {
                    lastDifficultyPoint = difficultyPoint;
                }

                return(new MultiplierControlPoint(c.Time)
                {
                    TimingPoint = lastTimingPoint,
                    DifficultyPoint = lastDifficultyPoint
                });
            });

            double lastObjectTime = (Objects.LastOrDefault() as IHasEndTime)?.EndTime ?? Objects.LastOrDefault()?.StartTime ?? double.MaxValue;

            // Perform some post processing of the timing changes
            timingChanges = timingChanges
                            // Collapse sections after the last hit object
                            .Where(s => s.StartTime <= lastObjectTime)
                            // Collapse sections with the same start time
                            .GroupBy(s => s.StartTime).Select(g => g.Last()).OrderBy(s => s.StartTime)
                            // Collapse sections with the same beat length
                            .GroupBy(s => s.TimingPoint.BeatLength * s.DifficultyPoint.SpeedMultiplier).Select(g => g.First());

            DefaultControlPoints.AddRange(timingChanges);

            // If we have no control points, add a default one
            if (DefaultControlPoints.Count == 0)
            {
                DefaultControlPoints.Add(new MultiplierControlPoint());
            }
        }
예제 #5
0
        static public SortedList <KEY_TYPE, VALUE_TYPE> ToSortedList <KEY_TYPE, VALUE_TYPE>(this IEnumerable <KeyValuePair <KEY_TYPE, VALUE_TYPE> > item)
        {
            SortedList <KEY_TYPE, VALUE_TYPE> sorted_list = new SortedList <KEY_TYPE, VALUE_TYPE>();

            sorted_list.AddRange(item);
            return(sorted_list);
        }
예제 #6
0
        private SortedList <CSPrice> LoadDayPrices(int day)
        {
            SortedList <CSPrice> ret = new SortedList <CSPrice>(Comp_CSPrice);

            ret.AddRange(StorageLoader.LoadStorage(DateToDay.ToDate(day), CurrencyPair));
            return(ret);
        }
예제 #7
0
 public void FromMap(Tuple <double, Color>[] values)
 {
     colourMap.Clear();
     colourMap.AddRange(values.Select(x => new KeyValuePair <double, int>(x.Item1, unchecked (x.Item2.A << 24 | x.Item2.R << 16 | x.Item2.G << 8 | x.Item2.B))));
     MinValue   = colourMap.Keys.Min();
     MaxValue   = colourMap.Keys.Max();
     sortedKeys = colourMap.Keys.ToArray();
 }
예제 #8
0
        public void AddNewMessages(params Message[] messages)
        {
            messages = messages.Except(Messages).ToArray();

            Messages.AddRange(messages);

            purgeOldMessages();

            NewMessagesArrived?.Invoke(messages);
        }
예제 #9
0
파일: Channel.cs 프로젝트: librast/osu
        public void AddNewMessages(IEnumerable <Message> messages)
        {
            messages = messages.Except(Messages).ToList();

            Messages.AddRange(messages);

            purgeOldMessages();

            NewMessagesArrived?.Invoke(messages);
        }
예제 #10
0
 public void FromMap(Tuple <double, Color>[] values)
 {
     colourMap.Clear();
     colourMap.AddRange(values.Select(x =>
                                      new KeyValuePair <double, int>(x.Item1,
                                                                     // ReSharper disable once RedundantOverflowCheckingContext
                                                                     unchecked (x.Item2.A << 24 |
                                                                                x.Item2.R << 16 |
                                                                                x.Item2.G << 8 |
                                                                                x.Item2.B))));
     MinValue   = colourMap.Keys.Min();
     MaxValue   = colourMap.Keys.Max();
     sortedKeys = colourMap.Keys.ToArray();
 }
        public void TestSortedSerialization()
        {
            var original = new SortedList <int>();

            original.AddRange(new[] { 6, 5, 4, 3, 2, 1 });

            var deserialized = JsonConvert.DeserializeObject <SortedList <int> >(JsonConvert.SerializeObject(original));

            Assert.AreEqual(original.Count, deserialized.Count, "Counts are not equal");
            for (int i = 0; i < original.Count; i++)
            {
                Assert.AreEqual(original[i], deserialized[i], $"Item at index {i} differs");
            }
        }
        public void TestCustomComparer()
        {
            int Compare(int i1, int i2) => i2.CompareTo(i1);

            var original = new SortedList <int>(Compare);

            original.AddRange(new[] { 1, 2, 3, 4, 5, 6 });

            var deserialized = new SortedList <int>(Compare);

            JsonConvert.PopulateObject(JsonConvert.SerializeObject(original), deserialized);

            Assert.AreEqual(original.Count, deserialized.Count, "Counts are not equal");
            for (int i = 0; i < original.Count; i++)
            {
                Assert.AreEqual(original[i], deserialized[i], $"Item at index {i} differs");
            }
        }
예제 #13
0
    public static void Flatten(this Clip clip)
    {
        var flattenedNotes = new SortedList <NoteEvent>();

        foreach (var note in clip.Notes)
        {
            flattenedNotes.Add(note);
            if (note.HasChildren)
            {
                foreach (var child in note.Children)
                {
                    child.Parent = null;
                }
                flattenedNotes.AddRange(note.Children);
                note.Children = null;
            }
        }
        clip.Notes = flattenedNotes;
    }
예제 #14
0
파일: Channel.cs 프로젝트: ry00001/osu
        /// <summary>
        /// Adds new messages to the channel and purges old messages. Triggers the <see cref="NewMessagesArrived"/> event.
        /// </summary>
        /// <param name="messages"></param>
        public void AddNewMessages(params Message[] messages)
        {
            messages = messages.Except(Messages).ToArray();

            if (messages.Length == 0)
            {
                return;
            }

            Messages.AddRange(messages);

            var maxMessageId = messages.Max(m => m.Id);

            if (maxMessageId > LastMessageId)
            {
                LastMessageId = maxMessageId;
            }

            purgeOldMessages();

            NewMessagesArrived?.Invoke(messages);
        }
예제 #15
0
            protected override object JGetObject(MemoryStream bytes)
            {
                Console.WriteLine("Inicio Deserializar Data");
                object[] partes = base.GetPartsObject(bytes);
                Data     data   = new Data();
                SortedList <long, Tarea> tareas = new SortedList <long, Tarea>();

                Categoria[] categorias = (Categoria[])partes[CATEGORIAS];
                Lista[]     listas     = (Lista[])partes[LISTAS];

                data.Listas.Clear();
                data.Categorias.Clear();


                data.Listas.AddRange(listas);


                for (int i = 0; i < listas.Length; i++)
                {
                    tareas.AddRange(listas[i].Tareas.GetValues());
                }

                for (int i = 0; i < listas.Length; i++)
                {
                    listas[i].TareasOcultas.SetValues(tareas);
                    listas[i].ListasHerencia.SetValues(data.Listas);
                }

                for (int i = 0; i < categorias.Length; i++)
                {
                    data.Categorias.Add(categorias[i]);
                    categorias[i].Listas.SetValues(data.Listas);
                }
                Console.WriteLine("Fin Deserializar Data");
                return(data);
            }
예제 #16
0
        private void load()
        {
            double lastObjectTime = (Objects.LastOrDefault() as IHasEndTime)?.EndTime ?? Objects.LastOrDefault()?.StartTime ?? double.MaxValue;
            double baseBeatLength = TimingControlPoint.DEFAULT_BEAT_LENGTH;

            if (RelativeScaleBeatLengths)
            {
                IReadOnlyList <TimingControlPoint> timingPoints = Beatmap.ControlPointInfo.TimingPoints;
                double maxDuration = 0;

                for (int i = 0; i < timingPoints.Count; i++)
                {
                    if (timingPoints[i].Time > lastObjectTime)
                    {
                        break;
                    }

                    double endTime  = i < timingPoints.Count - 1 ? timingPoints[i + 1].Time : lastObjectTime;
                    double duration = endTime - timingPoints[i].Time;

                    if (duration > maxDuration)
                    {
                        maxDuration = duration;
                        // The slider multiplier is post-multiplied to determine the final velocity, but for relative scale beat lengths
                        // the multiplier should not affect the effective timing point (the longest in the beatmap), so it is factored out here
                        baseBeatLength = timingPoints[i].BeatLength / Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier;
                    }
                }
            }

            // Merge sequences of timing and difficulty control points to create the aggregate "multiplier" control point
            var lastTimingPoint     = new TimingControlPoint();
            var lastDifficultyPoint = new DifficultyControlPoint();
            var allPoints           = new SortedList <ControlPoint>(Comparer <ControlPoint> .Default);

            allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints);
            allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints);

            // Generate the timing points, making non-timing changes use the previous timing change and vice-versa
            var timingChanges = allPoints.Select(c =>
            {
                var timingPoint     = c as TimingControlPoint;
                var difficultyPoint = c as DifficultyControlPoint;

                if (timingPoint != null)
                {
                    lastTimingPoint = timingPoint;
                }

                if (difficultyPoint != null)
                {
                    lastDifficultyPoint = difficultyPoint;
                }

                return(new MultiplierControlPoint(c.Time)
                {
                    Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier,
                    BaseBeatLength = baseBeatLength,
                    TimingPoint = lastTimingPoint,
                    DifficultyPoint = lastDifficultyPoint
                });
            });

            // Trim unwanted sequences of timing changes
            timingChanges = timingChanges
                            // Collapse sections after the last hit object
                            .Where(s => s.StartTime <= lastObjectTime)
                            // Collapse sections with the same start time
                            .GroupBy(s => s.StartTime).Select(g => g.Last()).OrderBy(s => s.StartTime);

            controlPoints.AddRange(timingChanges);

            if (controlPoints.Count == 0)
            {
                controlPoints.Add(new MultiplierControlPoint {
                    Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier
                });
            }
        }
예제 #17
0
        /// <summary>
        /// 回复信息
        /// </summary>
        /// <returns></returns>
        public string Reply()
        {
            //回复信息
            var result = Value;

            //如果是带有记忆的*号标识
            if (Star != null)
            {
                //如果名字不为空
                if (SetVariable.Name != "" || SetVariable.Name != null)
                {
                    //遍历每一个*符号
                    for (int i = 0; i < Star.Count; i++)
                    {
                        //存储变量数目
                        User.StoreNum++;
                        //设定记忆变量
                        Memory.Set(User.UserId + "" + User.StoreNum, SetVariable.Name, AI.Star.List[i]);
                        //break;
                    }
                    //返回值
                    //return this.Value;
                }
                //输出信息
                //return this.Value + Smart.Star.List[Star-1];
                //遍历每一个*符号
                //for (int i = 0; i < this.Star.Count; i++)
                //{
                //    result += Smart.Star.List[i];
                //}
            }

            //如果有动态执行函数功能
            if (Function != null)
            {
                //需要传递的参数集合
                var parm = new SortedList <string>();
                //将里面的索引值取出来
                var star = Star;
                if (star != null)
                {
                    int[] va = star.ToArray();
                    //将真实值取出来
                    parm.AddRange(va.Select(a => AI.Star.List[a - 1]));
                }
                //执行,依然要把参数传递过去
                return(CodeCompiler.Execute(Function.Name, parm.ToArray()));
            }
            //获取存储的变量值
            if (GetVariable.Name != null)
            {
                //获取变量
                result
                    += Memory.Get(User.UserId + "" + User.StoreNum, GetVariable.Name);
            }
            //如果输出用户曾经的输出
            if (Input != -1)
            {
                //输出信息
                result += AI.Input.List[Input - 1];
            }
            if (String.IsNullOrEmpty(result))
            {
                //随机数的方式返回
                var rnd = new Random();
                //返回
                if (Rand != null)
                {
                    return(Rand.List[rnd.Next(0, Rand.List.Count)]);
                }
            }
            return(result);
        }
예제 #18
0
 public void Awake()
 {
     _spawns.AddRange(GetComponentsInChildren <SpawnInfo>());
 }
 public TransceleratorSections(QuestionSections sections)
 {
     m_sections = new SortedList <int, ISectionInfo>(sections.Items.Length);
     m_sections.AddRange(sections.Items.Select(s => new KeyValuePair <int, ISectionInfo>(s.StartRef, s)));
 }
예제 #20
0
파일: Bot.cs 프로젝트: 89sos98/iveely
        //<pattern>*[地名:北京|上海|天津|-ns]*将*[行为:开盘|发布会]*</pattern>
        //    <template>
        //        <function name="Normal" para="1,2,3"></function>
        //        <question>[0]什么地方[1]将[2][行为][3]?[地名]</question>
        //    </template>

        private void BuildRealCategory()
        {
            for (int i = 0; i < Categorys.Count; i++)
            {
                SortedList<Pattern> realPatterns = new SortedList<Pattern>();
                SortedList<Pattern> patterns = Categorys[i].Patterns;
                foreach (Pattern t in patterns)
                {
                    if (t.Value.Contains("["))
                    {
                        string patternValue = t.Value;
                        List<Pattern> myPatterns = new List<Pattern>();
                        int leftIndex = patternValue.IndexOf('[');
                        int rightIndex = patternValue.IndexOf(']');
                        // string middleValue = string.Empty;
                        while (leftIndex > -1)
                        {
                            string patternString = patternValue.Substring(leftIndex + 1, rightIndex - leftIndex - 1);
                            string[] valueTemplate = patternString.Split(new[] { '|', ':' }, StringSplitOptions.RemoveEmptyEntries);
                            if (myPatterns.Count == 0)
                            {
                                Pattern[] pts = new Pattern[valueTemplate.Count() - 1];
                                string header = patternValue.Substring(0, leftIndex);
                                for (int k = 0; k < pts.Count(); k++)
                                {
                                    pts[k] = new Pattern();
                                    pts[k].Value = header + valueTemplate[k + 1];
                                    Template template = new Template();

                                    Template.Question[] questions =
                                        new Template.Question[t.Template.Questions.Count];
                                    for (int n = 0; n < questions.Count(); n++)
                                    {
                                        //questions[n] = new Template.Question();
                                        //questions[n].Answer =
                                        //    t.Template.Questions[n].Answer.Replace(
                                        //        "[" + valueTemplate[0] + "]", valueTemplate[k + 1]);
                                        //questions[n].Description = t.Template.Questions[n].Description.Replace(
                                        //    "[" + valueTemplate[0] + "]", valueTemplate[k + 1]);
                                    }
                                    template.Questions.AddRange(questions);
                                    template.Function = t.Template.Function;
                                    template.Star = t.Template.Star;
                                    pts[k].Template = template;
                                }
                                myPatterns.AddRange(pts);
                            }
                            else
                            {
                                Pattern[,] pts = new Pattern[myPatterns.Count, valueTemplate.Count() - 1];
                                for (int k = 0; k < myPatterns.Count; k++)
                                {

                                    for (int n = 0; n < valueTemplate.Count() - 1; n++)
                                    {
                                        pts[k, n] = new Pattern();
                                        pts[k, n].Value = myPatterns[k].Value + patternValue.Substring(0, leftIndex) + valueTemplate[n + 1];
                                        List<Template.Question> questions = myPatterns[k].Template.Questions;
                                        Template template = new Template();
                                        for (int m = 0; m < questions.Count; m++)
                                        {
                                            //Template.Question myQuestion = new Template.Question();
                                            //myQuestion.Description = questions[m].Description.Replace(
                                            //    "[" + valueTemplate[0] + "]", valueTemplate[n + 1]);
                                            //myQuestion.Answer = questions[m].Answer.Replace(
                                            //    "[" + valueTemplate[0] + "]", valueTemplate[n + 1]);
                                            //template.AddQuestion(myQuestion);

                                        }
                                        template.Function = myPatterns[k].Template.Function;
                                        template.Star = myPatterns[k].Template.Star;
                                        pts[k, n].Template = template;
                                    }
                                }

                                myPatterns.Clear();
                                foreach (var p in pts)
                                {
                                    myPatterns.Add(p);
                                }
                            }


                            patternValue = patternValue.Substring(rightIndex + 1, patternValue.Length - rightIndex - 1);
                            //  int lastRightIndex = rightIndex;
                            leftIndex = patternValue.IndexOf('[');
                            rightIndex = patternValue.IndexOf(']');
                            if (rightIndex == -1)
                            {
                                foreach (Pattern t1 in myPatterns)
                                {
                                    t1.Value += patternValue;
                                }
                            }
                        }
                        realPatterns.AddRange(myPatterns);
                    }
                    else
                    {
                        //Pattern pattern = new Pattern();
                        realPatterns.Add(t);
                    }
                }
                Categorys[i].Patterns = realPatterns;
            }
        }
예제 #21
0
        private void load()
        {
            switch (VisualisationMethod)
            {
            case ScrollVisualisationMethod.Sequential:
                scrollingInfo.Algorithm = new SequentialScrollAlgorithm(ControlPoints);
                break;

            case ScrollVisualisationMethod.Overlapping:
                scrollingInfo.Algorithm = new OverlappingScrollAlgorithm(ControlPoints);
                break;

            case ScrollVisualisationMethod.Constant:
                scrollingInfo.Algorithm = new ConstantScrollAlgorithm();
                break;
            }

            double lastObjectTime = Objects.LastOrDefault()?.GetEndTime() ?? double.MaxValue;
            double baseBeatLength = TimingControlPoint.DEFAULT_BEAT_LENGTH;

            if (RelativeScaleBeatLengths)
            {
                baseBeatLength = Beatmap.GetMostCommonBeatLength();

                // The slider multiplier is post-multiplied to determine the final velocity, but for relative scale beat lengths
                // the multiplier should not affect the effective timing point (the longest in the beatmap), so it is factored out here
                baseBeatLength /= Beatmap.Difficulty.SliderMultiplier;
            }

            // Merge sequences of timing and difficulty control points to create the aggregate "multiplier" control point
            var lastTimingPoint = new TimingControlPoint();
            var lastEffectPoint = new EffectControlPoint();
            var allPoints       = new SortedList <ControlPoint>(Comparer <ControlPoint> .Default);

            allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints);
            allPoints.AddRange(Beatmap.ControlPointInfo.EffectPoints);

            // Generate the timing points, making non-timing changes use the previous timing change and vice-versa
            var timingChanges = allPoints.Select(c =>
            {
                switch (c)
                {
                case TimingControlPoint timingPoint:
                    lastTimingPoint = timingPoint;
                    break;

                case EffectControlPoint difficultyPoint:
                    lastEffectPoint = difficultyPoint;
                    break;
                }

                return(new MultiplierControlPoint(c.Time)
                {
                    Velocity = Beatmap.Difficulty.SliderMultiplier,
                    BaseBeatLength = baseBeatLength,
                    TimingPoint = lastTimingPoint,
                    EffectPoint = lastEffectPoint
                });
            });

            // Trim unwanted sequences of timing changes
            timingChanges = timingChanges
                            // Collapse sections after the last hit object
                            .Where(s => s.StartTime <= lastObjectTime)
                            // Collapse sections with the same start time
                            .GroupBy(s => s.StartTime).Select(g => g.Last()).OrderBy(s => s.StartTime);

            ControlPoints.AddRange(timingChanges);

            if (ControlPoints.Count == 0)
            {
                ControlPoints.Add(new MultiplierControlPoint {
                    Velocity = Beatmap.Difficulty.SliderMultiplier
                });
            }
        }
예제 #22
0
파일: Bot.cs 프로젝트: weiguang3100/iveely
        //<pattern>*[地名:北京|上海|天津|-ns]*将*[行为:开盘|发布会]*</pattern>
        //    <template>
        //        <function name="Normal" para="1,2,3"></function>
        //        <question>[0]什么地方[1]将[2][行为][3]?[地名]</question>
        //    </template>

        private void BuildRealCategory()
        {
            for (int i = 0; i < Categorys.Count; i++)
            {
                SortedList <Pattern> realPatterns = new SortedList <Pattern>();
                SortedList <Pattern> patterns     = Categorys[i].Patterns;
                foreach (Pattern t in patterns)
                {
                    if (t.Value.Contains("["))
                    {
                        string         patternValue = t.Value;
                        List <Pattern> myPatterns   = new List <Pattern>();
                        int            leftIndex    = patternValue.IndexOf('[');
                        int            rightIndex   = patternValue.IndexOf(']');
                        // string middleValue = string.Empty;
                        while (leftIndex > -1)
                        {
                            string   patternString = patternValue.Substring(leftIndex + 1, rightIndex - leftIndex - 1);
                            string[] valueTemplate = patternString.Split(new[] { '|', ':' }, StringSplitOptions.RemoveEmptyEntries);
                            if (myPatterns.Count == 0)
                            {
                                Pattern[] pts    = new Pattern[valueTemplate.Count() - 1];
                                string    header = patternValue.Substring(0, leftIndex);
                                for (int k = 0; k < pts.Count(); k++)
                                {
                                    pts[k]       = new Pattern();
                                    pts[k].Value = header + valueTemplate[k + 1];
                                    Template template = new Template();

                                    Template.Question[] questions =
                                        new Template.Question[t.Template.Questions.Count];
                                    for (int n = 0; n < questions.Count(); n++)
                                    {
                                        //questions[n] = new Template.Question();
                                        //questions[n].Answer =
                                        //    t.Template.Questions[n].Answer.Replace(
                                        //        "[" + valueTemplate[0] + "]", valueTemplate[k + 1]);
                                        //questions[n].Description = t.Template.Questions[n].Description.Replace(
                                        //    "[" + valueTemplate[0] + "]", valueTemplate[k + 1]);
                                    }
                                    template.Questions.AddRange(questions);
                                    template.Function = t.Template.Function;
                                    template.Star     = t.Template.Star;
                                    pts[k].Template   = template;
                                }
                                myPatterns.AddRange(pts);
                            }
                            else
                            {
                                Pattern[,] pts = new Pattern[myPatterns.Count, valueTemplate.Count() - 1];
                                for (int k = 0; k < myPatterns.Count; k++)
                                {
                                    for (int n = 0; n < valueTemplate.Count() - 1; n++)
                                    {
                                        pts[k, n]       = new Pattern();
                                        pts[k, n].Value = myPatterns[k].Value + patternValue.Substring(0, leftIndex) + valueTemplate[n + 1];
                                        List <Template.Question> questions = myPatterns[k].Template.Questions;
                                        Template template = new Template();
                                        for (int m = 0; m < questions.Count; m++)
                                        {
                                            //Template.Question myQuestion = new Template.Question();
                                            //myQuestion.Description = questions[m].Description.Replace(
                                            //    "[" + valueTemplate[0] + "]", valueTemplate[n + 1]);
                                            //myQuestion.Answer = questions[m].Answer.Replace(
                                            //    "[" + valueTemplate[0] + "]", valueTemplate[n + 1]);
                                            //template.AddQuestion(myQuestion);
                                        }
                                        template.Function  = myPatterns[k].Template.Function;
                                        template.Star      = myPatterns[k].Template.Star;
                                        pts[k, n].Template = template;
                                    }
                                }

                                myPatterns.Clear();
                                foreach (var p in pts)
                                {
                                    myPatterns.Add(p);
                                }
                            }


                            patternValue = patternValue.Substring(rightIndex + 1, patternValue.Length - rightIndex - 1);
                            //  int lastRightIndex = rightIndex;
                            leftIndex  = patternValue.IndexOf('[');
                            rightIndex = patternValue.IndexOf(']');
                            if (rightIndex == -1)
                            {
                                foreach (Pattern t1 in myPatterns)
                                {
                                    t1.Value += patternValue;
                                }
                            }
                        }
                        realPatterns.AddRange(myPatterns);
                    }
                    else
                    {
                        //Pattern pattern = new Pattern();
                        realPatterns.Add(t);
                    }
                }
                Categorys[i].Patterns = realPatterns;
            }
        }
예제 #23
0
        /// <summary>
        /// 回复信息
        /// </summary>
        /// <returns></returns>
        public string Reply()
        {
            //回复信息
            var result = Value;
            //如果是带有记忆的*号标识
            if (Star != null)
            {
                //如果名字不为空
                if (SetVariable.Name != "" || SetVariable.Name != null)
                {
                    //遍历每一个*符号
                    for (int i = 0; i < Star.Count; i++)
                    {
                        //存储变量数目
                        User.StoreNum++;
                        //设定记忆变量
                        Memory.Set(User.UserId + "" + User.StoreNum, SetVariable.Name, AI.Star.List[i]);
                        //break;
                    }
                    //返回值
                    //return this.Value;
                }
                //输出信息
                //return this.Value + Smart.Star.List[Star-1];
                //遍历每一个*符号
                //for (int i = 0; i < this.Star.Count; i++)
                //{
                //    result += Smart.Star.List[i];
                //}
            }

            //如果有动态执行函数功能
            if (Function != null)
            {
                //需要传递的参数集合
                var parm = new SortedList<string>();
                //将里面的索引值取出来
                var star = Star;
                if (star != null)
                {
                    int[] va = star.ToArray();
                    //将真实值取出来
                    parm.AddRange(va.Select(a => AI.Star.List[a - 1]));
                }
                //执行,依然要把参数传递过去
                return CodeCompiler.Execute(Function.Name, parm.ToArray());
            }
            //获取存储的变量值
            if (GetVariable.Name != null)
            {

                //获取变量
                result
                    += Memory.Get(User.UserId + "" + User.StoreNum, GetVariable.Name);
            }
            //如果输出用户曾经的输出
            if (Input != -1)
            {
                //输出信息
                result += AI.Input.List[Input - 1];
            }
            if (String.IsNullOrEmpty(result))
            {
                //随机数的方式返回
                var rnd = new Random();
                //返回
                if (Rand != null) return Rand.List[rnd.Next(0, Rand.List.Count)];
            }
            return result;
        }